From f86c1a4b4ba681e25f8b4d107493eafda4d4ac96 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 07:29:17 -0600 Subject: [PATCH 01/13] api-directory(feat[ports]) Read Erlang, OCaml and Common Lisp directory references why: Lua, Rust and TypeScript server pages draw their "What is on here" directory as a table, but the shell only folds a directory whose reference lines use a spelling it knows for the port. Erlang, OCaml and Common Lisp fell back to the shared rustdoc, XML doc, Javadoc and Go forms, so a directory written in any of the three would stay prose. what: - Read EEP-48 code spans (`fun/1`, `mod:fun/1`, `t:type/0`, `c:callback/1`, `m:module`) for Erlang - Read odoc references ({!Client.connect}, {{!x}text}) for OCaml - Read package-qualified code spans (`libtmux:fetch-snapshot`) for Common Lisp - Cover each in the per-port directory table, with an atom, a tuple, plain code spans and unqualified names as negatives --- site/src/lib/api-directory.ts | 6 ++++++ site/test/api-prose.test.ts | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/site/src/lib/api-directory.ts b/site/src/lib/api-directory.ts index 1f38fef67..a1708d5f2 100644 --- a/site/src/lib/api-directory.ts +++ b/site/src/lib/api-directory.ts @@ -58,6 +58,12 @@ const BY_PORT: Record = { ruby: [/\{(?:#[A-Za-z_]\w*[?!=]?|(?:::)?[A-Z]\w*(?:::[A-Z]\w*)*(?:[#.][A-Za-z_]\w*[?!=]?)?)(?:[ \t]+(?=[\w"'([])[^}\n`]*[^}\s`])?\}/], // Haddock links reach the shell as the reST role the adapter writes: :obj:`name `. haskell: [/:obj:`[^`\n]+`/], + // EEP-48 Markdown: `fun/1`, `mod:fun/1`, `t:type/0`, `t:mod:type/0`, `c:callback/1` and `m:module`. + erlang: [/`m:[a-z_]\w*`/, /`(?:[tc]:)?(?:[a-z_]\w*:)?[a-z_]\w*\/\d+`/], + // odoc: {!Client.connect}, {!Libtmux.Options.type-scope} and {{!Client.connect}text}. + ocaml: [/\{\{![^{}\s]+\}[^{}]*\}|\{![^{}\s]+\}/], + // A symbol with its package, as the docstrings write it: `libtmux:fetch-snapshot`, `libtmux.control:open-connection`. + lisp: [/`[a-z][\w.-]*:[^\s`:]+`/], // Documenter: [`name`](@ref), [`name`](@ref Module.name) and [text](@ref). julia: [/\[[^\]\n]+\]\(@ref(?:\s[^)\n]*)?\)/], // Native help names a cmdlet as a bare word or in a code span. diff --git a/site/test/api-prose.test.ts b/site/test/api-prose.test.ts index 04a7afe98..227a76636 100644 --- a/site/test/api-prose.test.ts +++ b/site/test/api-prose.test.ts @@ -211,6 +211,10 @@ const SYNTAXES: { port: string; syntax: string; refs: [string, string, string]; { port: 'powershell', syntax: 'cmdlet names', label: 'Buffers', refs: ['Get-TmuxSession', 'LibTmux\\Get-TmuxWindow', 'Wait-TmuxPaneText'] }, { port: 'powershell', syntax: 'code spans', label: 'Buffers', refs: ['`ConvertTo-TmuxQueryJson`', '`Get-TmuxPane`', '`LibTmux.Server`'] }, { port: 'haskell', syntax: 'reST object roles', label: 'Buffers', refs: [':obj:`Server `', ':obj:`withServer `', ':obj:`capture `'] }, + { port: 'erlang', syntax: 'EEP-48 function and type references', label: 'Buffers', refs: ['`open/1`', '`tmux_snapshot:sessions/1`', '`t:open_options/0`'] }, + { port: 'erlang', syntax: 'EEP-48 module and remote type references', label: 'Buffers', refs: ['`m:tmux_buffer`', '`t:tmux_snapshot:t/0`', '`c:init/1`'] }, + { port: 'ocaml', syntax: 'odoc references', label: 'Buffers', refs: ['{!Client.connect}', '{!Libtmux.Snapshot}', '{!Libtmux.Options.type-scope}'] }, + { port: 'lisp', syntax: 'package-qualified code spans', label: 'Buffers', refs: ['`libtmux:fetch-snapshot`', '`libtmux.control:open-connection`', '`libtmux.query:one-or-none`'] }, ] describe.each(SYNTAXES)('a capability directory in $port\'s $syntax', ({ port, refs, label }) => { @@ -280,6 +284,10 @@ describe('a capability directory keeps each port\'s spelling to itself', () => { ['powershell', 'a Go doc link', '[Server]'], ['lua', 'options and ids', '`-S`, `%0` and `"x y"`'], ['lua', 'a rustdoc link', '[`Server`]'], + ['erlang', 'an atom', '`inconsistent_capture`'], + ['erlang', 'a tuple', '`{server, Server}`'], + ['ocaml', 'a code span', '`start`, `allow_kill`'], + ['lisp', 'a name without its package', '`client`, `fetch-snapshot`'], ])('%s does not read %s', (lang, _, ref) => { expect(groupDirectory(parseApiProse(run(ref)), lang).some((block) => block.kind === 'directory')).toBe(false) }) From 34940f8a4ea52261f176bfb03d34516d133ded82 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 07:29:17 -0600 Subject: [PATCH 02/13] concepts(fix[ocaml]) Map the OCaml server to the Client module why: "A tmux server" pointed OCaml at Libtmux_unix.Client.t, an opaque type alias with no documentation and no members, so the page readers reach from every other port's server page and the core home was empty. The module holds the client's functions and its documentation, as Erlang's tmux_server and Elixir's LibTmux.Server do. what: - Point the server concept and its Eio variant at Libtmux_unix.Client and Libtmux_eio.Client - Point the core home's server object at Libtmux_unix.Client --- packages/api-model/src/concepts.ts | 2 +- site/src/data/core-home.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/api-model/src/concepts.ts b/packages/api-model/src/concepts.ts index 7733f1c6b..56572f9bf 100644 --- a/packages/api-model/src/concepts.ts +++ b/packages/api-model/src/concepts.ts @@ -4053,7 +4053,7 @@ for (const [id, binding] of Object.entries(ERLANG_CONCEPTS)) { CONCEPTS['list-session-panes']!.absent!.julia = 'Traverse `windows(session)` and `panes(window)` in the captured snapshot. `panes(snapshot)` has server-wide scope.' const OCAML_CONCEPTS: Record = { - server: { symbol: 'Libtmux_unix.Client.t', variants: ['Libtmux_eio.Client.t'], note: 'A client is a live, generation-bound server connection. Endpoint describes a socket without connecting; closing a client releases its resources.' }, + server: { symbol: 'Libtmux_unix.Client', variants: ['Libtmux_eio.Client'], note: 'A client is a live, generation-bound server connection. Endpoint describes a socket without connecting; closing a client releases its resources.' }, session: { symbol: 'Libtmux.Session.t' }, window: { symbol: 'Libtmux.Window.t', note: 'A global window can have several session placements. Window_link holds the session, index and current flag.' }, pane: { symbol: 'Libtmux.Pane.t' }, diff --git a/site/src/data/core-home.json b/site/src/data/core-home.json index 2ae20532d..881b9fc74 100644 --- a/site/src/data/core-home.json +++ b/site/src/data/core-home.json @@ -355,7 +355,7 @@ }, "ocaml": { "objects": { - "server": "Libtmux_unix.Client.t", + "server": "Libtmux_unix.Client", "session": "Libtmux.Session.t", "window": "Libtmux.Window.t", "pane": "Libtmux.Pane.t" From beb205ae349871a8cf81d0dc975b857383871bf4 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 07:29:17 -0600 Subject: [PATCH 03/13] lisp(feat[members]) List a client's operations as members of its class why: The client class page had no Members list, unlike every other port's server page: Common Lisp operations are package functions, so the adapter filed all of them under the package. what: - Give each libtmux function whose first required parameter is the client the client class as its parent; macros, functions without a client first and other packages keep the package - Show such a member by its package-qualified name, as Common Lisp writes it, never through the class - Test both, with controls for a function without a client, one that takes the client later and another package's function --- packages/api-model/src/languages/lisp.ts | 10 ++++++++-- packages/api-model/test/lisp.test.ts | 21 +++++++++++++++++++++ site/src/lib/native-name.ts | 2 ++ site/test/native-name.test.ts | 1 + 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/packages/api-model/src/languages/lisp.ts b/packages/api-model/src/languages/lisp.ts index 4792996ad..713414f7b 100644 --- a/packages/api-model/src/languages/lisp.ts +++ b/packages/api-model/src/languages/lisp.ts @@ -239,13 +239,19 @@ export function extractCommonLisp(input: unknown, revision?: string): ApiModel { kind: 'module', modifiers: [], signatures: [], product: pkg.product, package: pkg.system, publicOwner: pkg.name, apiScope: 'exported', doc: documentation(pkg.documentation), source: source(pkg.source), }) + // A function whose first required parameter is the client operates on it, so the client's page lists it as a + // member, as other ports' server pages list their methods. + const client = pkg.symbols.find((symbol) => symbol.kind === 'class' && symbol.name === 'client')?.id for (const symbol of pkg.symbols) { + const params = symbol.signature ? parameters(symbol.signature) : [] + const operation = client && symbol.kind === 'function' && !symbol.modifiers.includes('macro') && + params[0]?.name.toLowerCase() === 'client' && !params[0].optional && !params[0].variadic symbols.push({ id: symbol.id, publicId: symbol.id, qualifiedName: `${pkg.name}:${symbol.name}`, namespace: pkg.name, name: symbol.name, kind: symbol.kind as SymbolKind, - modifiers: symbol.modifiers as Modifier[], parent: pkg.name, + modifiers: symbol.modifiers as Modifier[], parent: operation ? client : pkg.name, signatures: [ - ...(symbol.signature ? [{ raw: symbol.signature, params: parameters(symbol.signature) }] : []), + ...(symbol.signature ? [{ raw: symbol.signature, params }] : []), ...(symbol.methods ?? []).map((method) => methodSignature(symbol.id, method, names)), ], product: pkg.product, package: pkg.system, publicOwner: pkg.name, apiScope: 'exported', diff --git a/packages/api-model/test/lisp.test.ts b/packages/api-model/test/lisp.test.ts index 649a1b4e0..2cfe13a87 100644 --- a/packages/api-model/test/lisp.test.ts +++ b/packages/api-model/test/lisp.test.ts @@ -66,6 +66,27 @@ describe('Common Lisp native API adapter', () => { .toEqual(['libtmux.workspace:result-outcomes']) }) + it('lists the operations that take a client as members of its class', () => { + const operation = (name: string, signature: string) => ({ ...functionSymbol(`libtmux:${name}`, name, 'src/client.lisp'), signature }) + const withClient = structuredClone(fixture) + withClient.source.files.push({ path: 'src/client.lisp', sha256: '9'.repeat(64) }) + withClient.packages[0].symbols.push( + { id: 'libtmux:client', name: 'client', kind: 'class', modifiers: [], supertypes: [], + documentation: documentation('A connection scope.'), source: source('src/client.lisp', 1) }, + operation('fetch-snapshot', '(fetch-snapshot client &key timeout)'), + operation('open-client', '(open-client &key socket-path)'), + operation('client-label', '(client-label value client)'), + ) + withClient.packages[1].symbols.push(functionSymbol('libtmux.json:write-client', 'write-client', 'src/json.lisp')) + const parents = Object.fromEntries(extractCommonLisp(withClient, revision).symbols.map((entry) => [entry.id, entry.parent])) + expect(parents['libtmux:fetch-snapshot']).toBe('libtmux:client') + // The controls: no client, a client that is not the first parameter, and another package's function. + expect(parents['libtmux:open-client']).toBe('libtmux') + expect(parents['libtmux:client-label']).toBe('libtmux') + expect(parents['libtmux:session/function']).toBe('libtmux') + expect(parents['libtmux.json:write-client']).toBe('libtmux.json') + }) + it('extracts the optional public control package alongside existing systems', () => { const input = structuredClone(fixture) input.source.files.push({ path: 'src/control.lisp', sha256: '1'.repeat(64) }) diff --git a/site/src/lib/native-name.ts b/site/src/lib/native-name.ts index b0032b79d..7722335b9 100644 --- a/site/src/lib/native-name.ts +++ b/site/src/lib/native-name.ts @@ -105,6 +105,8 @@ export function nativeShortName(model: { port?: string; symbols: readonly ApiSym const id = qualifiedNameOf(symbol), ownerId = qualifiedNameOf(owner) // Raku writes an exception by its X:: path, not through the module that exports it. if (model?.port === 'raku' && !id.startsWith(ownerId)) return id + // Common Lisp writes a class's operation by its package, never through the class. + if (model?.port === 'lisp' && owner.kind === 'class') return id // OCaml constructors and record fields live in their module's namespace, not their type's. if (model?.port === 'ocaml') return id.split('.').slice(-2).join('.') // Swift writes a member's labels in its name and fewer of them in its id, so the id is not always the owner and the name. diff --git a/site/test/native-name.test.ts b/site/test/native-name.test.ts index 5989bb2bb..ecffa18f7 100644 --- a/site/test/native-name.test.ts +++ b/site/test/native-name.test.ts @@ -217,6 +217,7 @@ describe('short names', () => { continue } if (port === 'raku' && !symbol.id.startsWith(owner.id)) { expect(shown, symbol.id).toBe(symbol.id); continue } + if (port === 'lisp' && owner.kind === 'class') { expect(shown, symbol.id).toBe(symbol.id); continue } expect(shown.startsWith(owner.name) && shown.endsWith(symbol.name), `${port} ${symbol.id}`).toBe(true) const separator = shown.slice(owner.name.length, shown.length - symbol.name.length) // A Rust tuple field follows its owner with a dot, as rustdoc writes it; every other Rust member with `::`. From bc459ef5382403684a08f50f7de7d94d39ab6471 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 10:52:04 -0600 Subject: [PATCH 04/13] concepts(test[ocaml]) Expect the Client module as the OCaml server why: Mapping the OCaml server concept to Libtmux_unix.Client left the concept test expecting the Client.t type, so the test failed on the branch before any model changed. what: - Expect the server concept of OCaml to resolve to the Libtmux_unix.Client module symbol, which carries the capability directory --- packages/api-model/test/concepts.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/api-model/test/concepts.test.ts b/packages/api-model/test/concepts.test.ts index d25f7a9c0..db69dd977 100644 --- a/packages/api-model/test/concepts.test.ts +++ b/packages/api-model/test/concepts.test.ts @@ -101,7 +101,7 @@ describe('concept map', () => { ['powershell', 'LibTmux\\New-TmuxServer', 'function'], ['julia', 'LibTmux.Server', 'struct'], ['fsharp', 'LibTmux.FSharp.Server', 'module'], - ['ocaml', 'Libtmux_unix.Client.t', 'typealias'], + ['ocaml', 'Libtmux_unix.Client', 'module'], ] for (const [port, id, kind] of expected) { const symbol = models.get(port)!.symbols.find((symbol) => (symbol.publicId ?? symbol.id) === id)! From a88013a93d3325d6d69f5c9e6ff3476a21675ddb Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 10:52:04 -0600 Subject: [PATCH 05/13] stage-port-docs(fix[html-header]) Stage a README whose header and badges are HTML why: libtmux-erlang writes its README header in HTML so ex_doc renders it: a centered

title and badges. Staging read only a Markdown title and Markdown badge images, so the Getting started page kept a second h1 and hotlinked three img.shields.io badges and a GitHub Actions badge that every other port serves from the site's origin. The Erlang pin to the current master fails the off-origin badge tests until staging reads the HTML form. what: - Read a centered

title as the README title, as a centered Markdown heading already is, so the page keeps one heading - Render the img.shields.io badges inside an HTML block to files on the site's origin and drop a status badge with its link, as for Markdown badges; refuse an HTML badge the localizer cannot render - Share the badge rendering between the Markdown and HTML paths - Expect a staged README written as HTML to hold no off-origin badge and no

, and fail the badge unit test without the HTML path --- scripts/lib/badges.mjs | 24 +++++++++++++++++++++--- scripts/stage-port-docs.mjs | 7 +++++-- site/test/port-guide-badges.test.ts | 15 +++++++++++++++ site/test/stage-port-docs.test.ts | 20 ++++++++++++++++++++ 4 files changed, 61 insertions(+), 5 deletions(-) diff --git a/scripts/lib/badges.mjs b/scripts/lib/badges.mjs index 6a5100222..4f29b507e 100644 --- a/scripts/lib/badges.mjs +++ b/scripts/lib/badges.mjs @@ -38,6 +38,9 @@ const VERSION_SERVICES = { const OFF_ORIGIN = /^https?:\/\/(?:img\.shields\.io|badgen\.net|badge\.fury\.io|(?:www\.)?github\.com\/[^/]+\/[^/]+\/(?:actions\/workflows\/[^/]+|workflows\/[^/]+)\/badge\.svg|github\.com\/[^/]+\/[^/]+\/workflows\/.*\/badge\.svg)/i +/** An `` with its source, and the `` around it when it is a link: groups are the opening tag, quote, source and closing tag. */ +const HTML_IMAGE = /(]*>\s*)?]*?\bsrc=(["'])([^"']+)\2[^>]*>(\s*<\/a>)?/gi + export function isOffOriginBadge(url) { return OFF_ORIGIN.test(url) } @@ -114,7 +117,24 @@ export function readRegistry() { export function localizeBadges(content, port, registry) { const files = new Map() const edits = [] + const publish = (spec) => { + const svg = makeBadge({ label: spec.label, message: spec.message, color: spec.color }) + const name = `${BADGE_DIRECTORY}/${createHash('sha256').update(svg).digest('hex').slice(0, 12)}.svg` + files.set(name, svg) + return name + } const visit = (node, parent) => { + if (node.type === 'html') { + // A README written as HTML, as the Erlang one is for ex_doc, holds `` badges. + const value = node.value.replace(HTML_IMAGE, (image, open, quote, url, close) => { + if (!isOffOriginBadge(url)) return image + const spec = badgeSpec(url, { port, registry }) + if (!spec) return open && close ? '' : (open ?? '') + return image.replace(`src=${quote}${url}${quote}`, `src=${quote}/${publish(spec)}${quote}`) + }) + if (value !== node.value) edits.push({ start: node.position.start.offset, end: node.position.end.offset, text: value }) + return + } if (node.type === 'image' && isOffOriginBadge(node.url)) { const spec = badgeSpec(node.url, { port, registry }) const droppable = parent?.type === 'link' && parent.children.length === 1 ? parent : node @@ -122,9 +142,7 @@ export function localizeBadges(content, port, registry) { edits.push({ start: droppable.position.start.offset, end: droppable.position.end.offset, text: '' }) return } - const svg = makeBadge({ label: spec.label, message: spec.message, color: spec.color }) - const name = `${BADGE_DIRECTORY}/${createHash('sha256').update(svg).digest('hex').slice(0, 12)}.svg` - files.set(name, svg) + const name = publish(spec) node.url = `/${name}` node.alt = node.alt || `${spec.label}: ${spec.message}` edits.push({ start: node.position.start.offset, end: node.position.end.offset, text: toMarkdown(node).trimEnd() }) diff --git a/scripts/stage-port-docs.mjs b/scripts/stage-port-docs.mjs index 067e88f4d..2dce90e56 100644 --- a/scripts/stage-port-docs.mjs +++ b/scripts/stage-port-docs.mjs @@ -41,8 +41,11 @@ function titleAndBody(content, sourcePath) { // GitHub README headers may center the title and intro in a presentation // wrapper. The site supplies its own heading; later HTML stays intact. const centered = /^
\s*\n([\s\S]*?)\n<\/div>\s*/.exec(content) - if (centered && /^#\s/.test(centered[1])) { - content = `${centered[1]}\n\n${content.slice(centered[0].length)}` + if (centered) { + // The Erlang README writes the centered title as

so ex_doc renders it. + const html = /^

([^<\n]+)<\/h1>[ \t]*(?:\n|$)/.exec(centered[1]) + const inner = html ? `# ${html[1]}\n${centered[1].slice(html[0].length)}` : centered[1] + if (/^#\s/.test(inner)) content = `${inner}\n\n${content.slice(centered[0].length)}` } const match = /^#\s+(.+)\n+/.exec(content) return { diff --git a/site/test/port-guide-badges.test.ts b/site/test/port-guide-badges.test.ts index f72a1429b..62c65ad90 100644 --- a/site/test/port-guide-badges.test.ts +++ b/site/test/port-guide-badges.test.ts @@ -100,11 +100,26 @@ describe('localizeBadges', () => { expect(content).toBe(' after') }) + it('renders and drops the badges of a README written as HTML', () => { + const { content, files } = localizeBadges([ + '

', + ' checks', + ' docs', + '

', + ].join('\n'), 'ruby', registry) + expect(content).not.toContain('actions/workflows') + expect(content).toMatch(/docs<\/a>/) + expect(findOffOriginBadges(content)).toEqual([]) + expect([...files.values()]).toHaveLength(1) + expect([...files.values()][0]).toContain('aria-label="docs: libtmux.org"') + }) + it('refuses a badge it cannot render rather than hotlinking it', () => { expect(() => localizeBadges('![x](https://img.shields.io/github/stars/o/r)', 'ruby', registry)).toThrow(/unsupported badge/) expect(() => localizeBadges('![x](https://img.shields.io/hexpm/dt/libtmux)', 'elixir', { ports: { elixir: { version: '0.1.0' } } })).toThrow(/unsupported badge/) expect(() => localizeBadges('![x](https://img.shields.io/maven-central/v/libtmux)', 'kotlin', { ports: { kotlin: { version: '0.1.0' } } })).toThrow(/unsupported badge/) expect(() => localizeBadges('![x](https://img.shields.io/gem/v/missing)', 'ruby', registry)).toThrow(/registry data does not carry/) + expect(() => localizeBadges('', 'ruby', registry)).toThrow(/unsupported badge/) }) }) diff --git a/site/test/stage-port-docs.test.ts b/site/test/stage-port-docs.test.ts index 39c6d6bd2..08a2b5ff9 100644 --- a/site/test/stage-port-docs.test.ts +++ b/site/test/stage-port-docs.test.ts @@ -520,6 +520,26 @@ describe('staged port guide links', () => { expect(overview).toContain('
\n\nA later centered block.\n\n
') }) + it('extracts a centered title written as HTML and serves its badges locally', () => { + const header = [ + '
', '', 'Drive tmux from Erlang.', '', + ].join('\n') + const guides = Object.keys(stagedRoutesFor('erlang')).map((path) => ({ + path, content: path === 'README.md' ? header : '# Guide\n\nbody\n', + })) + const files = stagedPortGuides('erlang', { + source: { repository: 'libtmux/libtmux-erlang', revision: '0123456789abcdef' }, + guides, + }) + const overview = files.get('erlang/guides/getting-started/index.md')! + expect(overview).not.toContain('

') + expect(overview).toContain('Drive tmux from Erlang.') + expect(overview).toMatch(/libtmux\.org/) + expect(overview).not.toContain('img.shields.io') + }) + it('stages canonical routes with aliases and reader domain metadata', () => { const guides = Object.keys(stagedRoutesFor('ruby')).map((path) => ({ path, content: '# Guide\n\nbody\n' })) const files = stagedPortGuides('ruby', { From 42be26a3bba5fda9255d566d4594075559cab465 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 10:44:28 -0600 Subject: [PATCH 06/13] erlang(chore[pin]) Pin Erlang to the tmux_server capability directory why: The Erlang reference page cannot show the "What is on here" capability directory until the model carries the prose it is built from. libtmux-erlang PR #15 adds that directory to the tmux_server module docs, and the committed model, guide cache and manifest still described the pre-PR master 539c7297c. The pin is the PR head, which merges into master with a merge commit, so the revision stays reachable after the merge. what: - Pin Erlang to libtmux/libtmux-erlang@33fd7fe98 and regenerate its model and path data (exported with OTP 29.1.2 and the same exporter digest as before), tmux usage, guide cache, manifest packages and mention index with the repository's generators - Adopt the source change between the pins: the tmux_server module doc gains the capability directory, and no other declaration or doc comment changed, so the other 324 symbols move only by line number - Re-anchor the three tmux_server.erl evidence lines of the reviewed usage entries to their new positions; no claim or rule changed - Take the rewritten README and reader guides into the guide cache: the README gains the send-keys and capture, query planner and command batching sections and an HTML header with badges, which staging now reads, and the guides cut their paragraph walls - Add the three programs the repository gained, typing_demo.erl, plan_demo.erl and batch_demo.erl, to the examples index, link all eighteen at the new revision, and expect eighteen in the index test - Leave the landing example and its recording at the revision where the program was recorded: examples/ gained files but the recorded program is unchanged Source refs: libtmux/libtmux-erlang PR #15 head 33fd7fe985454e375d5ac8533043cabf4a0b2fa5, previous pin 539c7297ceae65a1cf683e0836eae0a1ccd34d64. --- .../docs/ports/erlang/examples/index.md | 35 +++++---- site/src/data/api/erlang.json | 2 +- site/src/data/api/erlang.paths.json | 2 +- site/src/data/manifest-packages.json | 4 +- site/src/data/mentions.json | 77 +++++++++++++++++++ site/src/data/port-guides/erlang.json | 38 ++++----- site/src/data/tmux-usage/erlang.json | 16 ++-- site/test/port-examples-index.test.ts | 2 +- 8 files changed, 128 insertions(+), 48 deletions(-) diff --git a/site/src/content/docs/ports/erlang/examples/index.md b/site/src/content/docs/ports/erlang/examples/index.md index b040b1c11..7d84d01de 100644 --- a/site/src/content/docs/ports/erlang/examples/index.md +++ b/site/src/content/docs/ports/erlang/examples/index.md @@ -2,7 +2,7 @@ port: erlang route: examples title: Examples -description: Run the fifteen tested Erlang programs against private tmux servers and read each one's guide. +description: Run the eighteen tested Erlang programs against private tmux servers and read each one's guide. --- Each program below is a module in the repository's `examples/` directory. The @@ -15,28 +15,31 @@ adapting a program to an existing server. | Program | What it demonstrates | Guide | | --- | --- | --- | -| [inspect_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/inspect_demo.erl) | Inspect an existing tmux socket without changing its sessions. | [Installation](../guides/installation/) | -| [readme_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/readme_demo.erl) | Create a workspace, query its graph and preserve captured values. | [Getting started](../guides/getting-started/) | -| [linked_graph.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/linked_graph.erl) | Distinguish physical windows from their session memberships. | [Object graph](../concepts/object-graph/) | -| [filter_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/filter_demo.erl) | Validate portable JSON and filter captured rows without tmux I/O. | [Selections and queries](../concepts/queries/) | -| [control_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/control_demo.erl) | Attach explicitly, inspect captured values and prove detachment. | [Control connections](../topics/control/) | -| [native_consumer.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/native_consumer.erl) | Construct native values and exercise a borrowed endpoint through public APIs. | Installed-consumer check | +| [inspect_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/inspect_demo.erl) | Inspect an existing tmux socket without changing its sessions. | [Installation](../guides/installation/) | +| [readme_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/readme_demo.erl) | Create a workspace, query its graph and preserve captured values. | [Getting started](../guides/getting-started/) | +| [linked_graph.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/linked_graph.erl) | Distinguish physical windows from their session memberships. | [Object graph](../concepts/object-graph/) | +| [filter_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/filter_demo.erl) | Validate portable JSON and filter captured rows without tmux I/O. | [Selections and queries](../concepts/queries/) | +| [plan_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/plan_demo.erl) | Explain a query, let tmux exclude candidates, then fetch it. | [Selections and queries](../concepts/queries/) | +| [control_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/control_demo.erl) | Attach explicitly, inspect captured values and prove detachment. | [Control connections](../topics/control/) | +| [native_consumer.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/native_consumer.erl) | Construct native values and exercise a borrowed endpoint through public APIs. | Installed-consumer check | ## Run, send and capture | Program | What it demonstrates | Guide | | --- | --- | --- | -| [job_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/job_demo.erl) | Capture a job that acknowledges terminal parsing before it exits. | [Owned operations](../guides/operations/) | -| [pipe_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/pipe_demo.erl) | Save terminal bytes after a consumer acknowledgement. | [Pipe pane output](../guides/piping/) | -| [pane_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/pane_demo.erl) | Isolate a running pane, then join it back without respawning. | [Panes](../guides/panes/) | -| [command_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/command_demo.erl) | Build captured-target commands, then execute and inspect them. | [Commands](../guides/commands/) | +| [job_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/job_demo.erl) | Capture a job that acknowledges terminal parsing before it exits. | [Owned operations](../guides/operations/) | +| [pipe_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/pipe_demo.erl) | Save terminal bytes after a consumer acknowledgement. | [Pipe pane output](../guides/piping/) | +| [pane_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/pane_demo.erl) | Isolate a running pane, then join it back without respawning. | [Panes](../guides/panes/) | +| [command_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/command_demo.erl) | Build captured-target commands, then execute and inspect them. | [Commands](../guides/commands/) | +| [typing_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/typing_demo.erl) | Type a command into a shell pane, wait for it, then read the screen. | [Getting started](../guides/getting-started/) | +| [batch_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/batch_demo.erl) | Run several commands in one tmux client and read an option batch. | [Getting started](../guides/getting-started/) | ## Options, hooks, keys and buffers | Program | What it demonstrates | Guide | | --- | --- | --- | -| [options_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/options_demo.erl) | Use local options to mark workspace ownership without inheritance. | [Options](../guides/options/) | -| [config_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/config_demo.erl) | Apply session configuration and wait for its explicit signal. | [Configuration](../guides/configuration/) | -| [hook_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/hook_demo.erl) | Acknowledge a registered split hook before reading its effect. | [Hooks](../guides/hooks/) | -| [key_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/key_demo.erl) | Install and remove an application-owned key table. | [Keys](../guides/keys/) | -| [buffer_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/539c7297ceae65a1cf683e0836eae0a1ccd34d64/examples/buffer_demo.erl) | Store a binary artifact without terminal or text conversion. | [Buffers](../guides/buffers/) | +| [options_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/options_demo.erl) | Use local options to mark workspace ownership without inheritance. | [Options](../guides/options/) | +| [config_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/config_demo.erl) | Apply session configuration and wait for its explicit signal. | [Configuration](../guides/configuration/) | +| [hook_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/hook_demo.erl) | Acknowledge a registered split hook before reading its effect. | [Hooks](../guides/hooks/) | +| [key_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/key_demo.erl) | Install and remove an application-owned key table. | [Keys](../guides/keys/) | +| [buffer_demo.erl](https://github.com/libtmux/libtmux-erlang/blob/33fd7fe985454e375d5ac8533043cabf4a0b2fa5/examples/buffer_demo.erl) | Store a binary artifact without terminal or text conversion. | [Buffers](../guides/buffers/) | diff --git a/site/src/data/api/erlang.json b/site/src/data/api/erlang.json index fcfed5f2b..1ec1d5aba 100644 --- a/site/src/data/api/erlang.json +++ b/site/src/data/api/erlang.json @@ -1 +1 @@ -{"port":"erlang","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractor":"@libtmux/api-model@0.0.1 (Erlang EEP-48 and abstract code v3)","nativeProvenance":{"files":[{"path":".tool-versions","sha256":"73a9c039345d63a5316d1818639cabf8f563af4752b3d25168aff80beae90a68"},{"path":"apps/libtmux_erlang/rebar.config","sha256":"7dde37bc878d42712eb562a96f7b2bef0f717d552c1fe115c3224cf7a39c59a2"},{"path":"apps/libtmux_erlang/src/libtmux_erlang.app.src","sha256":"c0dabd09a69c341798a2f66fe042d3e810a53b2a858fa4781c1273936c16b2db"},{"path":"apps/libtmux_erlang/src/libtmux_erlang_app.erl","sha256":"b649483a5e0bf6cc3a377aa06a381e6afe2b316f0c64590d13dc650520040328"},{"path":"apps/libtmux_erlang/src/tmux_admission.erl","sha256":"78330dddda6ae5854d2e72585523c6664293167d4b25273015494f8877029b4f"},{"path":"apps/libtmux_erlang/src/tmux_args.erl","sha256":"f054894dfd02179f09fe153afacf29dd9e8494ec381abd07ab92b56300ca10cd"},{"path":"apps/libtmux_erlang/src/tmux_buffer.erl","sha256":"c05edba9f3cfde487d699b5ed7e83b8353f0d7419db309a22d8a0f938572f996"},{"path":"apps/libtmux_erlang/src/tmux_buffer_codec.erl","sha256":"872d28160204881f0b11de18ae99704ca17a1e5914819abd3c1c30298427121e"},{"path":"apps/libtmux_erlang/src/tmux_capability.erl","sha256":"1514ac1583f5f870c067585f4509a1304147b2e4527a7026dfdac367c54c72c1"},{"path":"apps/libtmux_erlang/src/tmux_capability_data.erl","sha256":"e5a6f66ded73cb16e53d9f6bbbc0d6066088e58598b8e970b37e6bb3ea142e1e"},{"path":"apps/libtmux_erlang/src/tmux_command.erl","sha256":"4ef3e833cd4beeb62f8dc34994fd4071a0df675c3e2304b3e80fcd6d9579153c"},{"path":"apps/libtmux_erlang/src/tmux_control.erl","sha256":"0a5412aa42a2616a12a07310facd5bd2a669e2753949c3dc4966fac7aaeb0bdf"},{"path":"apps/libtmux_erlang/src/tmux_control_codec.erl","sha256":"a3395198fe0ebba49dc598f0e2503a14f2b00b2ccb36982c90513f851a6a5b48"},{"path":"apps/libtmux_erlang/src/tmux_error.erl","sha256":"ccb10f5a434672a20068759ee1b54ba6c6c503f0f876247aad7125c6b4c5ad82"},{"path":"apps/libtmux_erlang/src/tmux_filter.erl","sha256":"b582961447a700c38d348230a016918cf07cec169ab46d11b4c9a925857a142b"},{"path":"apps/libtmux_erlang/src/tmux_filter_eval.erl","sha256":"5e715cfa4110951771cbd7fe13eb2797a2ff2dd2d38ed5838b500524a3f7fbc2"},{"path":"apps/libtmux_erlang/src/tmux_hook.erl","sha256":"723c166ff42524679066011916463761ad5d4e9ccc6e9c901beb3cca6df53a3d"},{"path":"apps/libtmux_erlang/src/tmux_identity.erl","sha256":"31ab809d3c407e0214f6b952e4e24cc5289f3d4ee305f6fe0b9b1520f4af9d7d"},{"path":"apps/libtmux_erlang/src/tmux_json.erl","sha256":"2dce31dd87dae4e32c314de5c1ddefcee077cfef09a78cbcf6f660748573ddfc"},{"path":"apps/libtmux_erlang/src/tmux_key.erl","sha256":"00c7d3a141d377c115cf2a6d010312aa4c006d34355111ff51424b3c2b2a3e23"},{"path":"apps/libtmux_erlang/src/tmux_log.erl","sha256":"885dcb198a82a0ed13f8c766e63e3953e4e9134f5d4bd2f86e79f0e0de65783a"},{"path":"apps/libtmux_erlang/src/tmux_matcher.erl","sha256":"b599f732e73ad9c7701df6c9c65c9524645c988bb5ba2d0729b9004136d29c16"},{"path":"apps/libtmux_erlang/src/tmux_model.erl","sha256":"519cfeb36fa0ea3df6d742edc87ded1f9d4800fc4fe7c662f2e676e29a4ce0a9"},{"path":"apps/libtmux_erlang/src/tmux_observe.erl","sha256":"4e726b823568a66cdf0f3c34aeb6c0b55651522da9a6263d077a2926cd699da0"},{"path":"apps/libtmux_erlang/src/tmux_operation.erl","sha256":"f5d34e31af1ac17e267bff6529a454d095ff3c7c238d64d6bbb0002e54285c47"},{"path":"apps/libtmux_erlang/src/tmux_option.erl","sha256":"c1872d0d9f74f136d0fbb1a2b28232d4245a197f8fd84d78ae6bf4200fd0088a"},{"path":"apps/libtmux_erlang/src/tmux_option_batch.erl","sha256":"16b90a2b4e8bf168dd3d5bd56bfbb4a561cfd9ff8f43054917ce9500488b195b"},{"path":"apps/libtmux_erlang/src/tmux_option_codec.erl","sha256":"cd3dc1cc2d457cd711247c539f0fc0e3498303180751724ebae77462cede9b6d"},{"path":"apps/libtmux_erlang/src/tmux_option_data.erl","sha256":"8fe72d14d2ec8d6a9aef7ac8a46923f3c70f47f45b5c6fcd0b1754eae8ca0ae4"},{"path":"apps/libtmux_erlang/src/tmux_option_scope.erl","sha256":"7f6227cd1808bf8b27df12fafc3c35c073797efee7a4ed9f89e19bc2b498ed11"},{"path":"apps/libtmux_erlang/src/tmux_owned_server.erl","sha256":"17521c819d7aea427429dc18aafee101544a6f85c0772857d540d1dd887a44f3"},{"path":"apps/libtmux_erlang/src/tmux_pane.erl","sha256":"e71ac56dab19886495cae801a1a83d85123e519de1c10ba8eb4128c8ff33db48"},{"path":"apps/libtmux_erlang/src/tmux_query.erl","sha256":"687cc6d89f68815662d8154ed3326ed69dd5b665c4cc1fec10036022c52cb641"},{"path":"apps/libtmux_erlang/src/tmux_query_plan.erl","sha256":"98299c186428ccc70588cee87b65e89d172045b89d01d0c88996834454238a93"},{"path":"apps/libtmux_erlang/src/tmux_regex.erl","sha256":"c97133a505dfbf7a54b0b59645429a3a512482bec99dfc5cc8da0ef27664af44"},{"path":"apps/libtmux_erlang/src/tmux_registry.erl","sha256":"e0370601b396566bb24323a65e0fc2e6a1930c6298cbd125590009a4855d0740"},{"path":"apps/libtmux_erlang/src/tmux_schema.erl","sha256":"85ebfc0c7f53cf4e7952f9ec440395646d48d9100ad2ea191d9c053759625a65"},{"path":"apps/libtmux_erlang/src/tmux_schema_data.erl","sha256":"4cd255118e2b207d40507fa2a5b91af7555e41134986eff7c58ce2349a96560d"},{"path":"apps/libtmux_erlang/src/tmux_scope.erl","sha256":"02c1624a9618fb24022b13263e6de0ca14ca60e5ff7b773e1ecfdd742b2ea03b"},{"path":"apps/libtmux_erlang/src/tmux_select.erl","sha256":"49f16937a1edf0057364f54718907d48fa2442a6410c38218f984c456874968c"},{"path":"apps/libtmux_erlang/src/tmux_server.erl","sha256":"e54e0940fb9c86985620e0c983538fbcf9e4e06b0c36b925dc7c46c21451d516"},{"path":"apps/libtmux_erlang/src/tmux_session.erl","sha256":"150217b8d739092eded788198c86e0d82d6e7e81453ab8c3423c53ea8d4280d0"},{"path":"apps/libtmux_erlang/src/tmux_snapshot.erl","sha256":"570e30612017e0a80be44fcae0ad5aaf44968588244916efc93516751dc58f81"},{"path":"apps/libtmux_erlang/src/tmux_sup.erl","sha256":"d0769251b68e8118e8cb58d2cd974cbf59e8c72b5713e738d6b82df14cd400ee"},{"path":"apps/libtmux_erlang/src/tmux_target.erl","sha256":"107de5ba111b6ff3641c3e1ba2197b6a66808a654e031b0837ff2befaad67d5d"},{"path":"apps/libtmux_erlang/src/tmux_text_codec.erl","sha256":"22b3823103dd84df3e21d6b9e2362da9f74c062731253fbac0b555868be758db"},{"path":"apps/libtmux_erlang/src/tmux_transport.erl","sha256":"1be3ba6148a39b041720b1123f42fd1d9142993dff39e8b655b24db245f25b82"},{"path":"apps/libtmux_erlang/src/tmux_transport_codec.erl","sha256":"516f5d3d79f31702a7b27b09945e1f5b8b9cfce613ede4ac9edc817f941686df"},{"path":"apps/libtmux_erlang/src/tmux_version.erl","sha256":"c09c120c90ec42a7cc55772b13823e3169259c68f2330537f1e5cb19e087d283"},{"path":"apps/libtmux_erlang/src/tmux_window.erl","sha256":"8fd8325549b1756f76c3fceb36ccfcf15068ec9c0cfa6a290da8ae3067817a4e"},{"path":"apps/libtmux_erlang/src/tmux_window_link.erl","sha256":"3584235656fc15976074e964f5ab2042e7dc83ed0fa3748a28059da32dd7550c"},{"path":"apps/libtmux_erlang/test/tmux_admission_tests.erl","sha256":"90cd16fd73aaaa9ac32ac1ac2b6ccf16d879b5dee88950d42d44455ac33c92a3"},{"path":"apps/libtmux_erlang/test/tmux_buffer_tests.erl","sha256":"0f117487e30b8edc908393ed85f3837d92c3f4309b0f5e7233c3926822bc8fee"},{"path":"apps/libtmux_erlang/test/tmux_capability_tests.erl","sha256":"7062a4401ae2f6d42389780c200957d85613eb635721c294bd8916d851f4bbec"},{"path":"apps/libtmux_erlang/test/tmux_command_tests.erl","sha256":"d0c8e817342d2d2000a097ef248557f3f22c02b149ac068d6da6faf2719f8dfe"},{"path":"apps/libtmux_erlang/test/tmux_domain_tests.erl","sha256":"8df9b7ab8fcf08838cb83bf814e610a8d2fe042abb8c5a7861700d5243b8cc9f"},{"path":"apps/libtmux_erlang/test/tmux_error_tests.erl","sha256":"9561f706fe80150aac64481762a7be1ecd28f26d7b643cf194774691a1eda6e2"},{"path":"apps/libtmux_erlang/test/tmux_filter_fixture_tests.erl","sha256":"2042d790c9a8db07d0260aeb18a1658f1715299a7493d80c95f9ab6667f60f9c"},{"path":"apps/libtmux_erlang/test/tmux_filter_tests.erl","sha256":"297207998c206b10f71799cb9b642fb435b397e8e076f9c5780f5bae4bc2d82e"},{"path":"apps/libtmux_erlang/test/tmux_hook_tests.erl","sha256":"4f9bbdc801ab3d6e14609be8c0f2477bc00d530d9c829b719a8c98a7e3160482"},{"path":"apps/libtmux_erlang/test/tmux_identity_tests.erl","sha256":"fcf254ed09fc1111b65eb4a5dab2304ee013d8eae937cf590b496c3955453945"},{"path":"apps/libtmux_erlang/test/tmux_json_tests.erl","sha256":"55d60e58bd058a1882c1288880cca60596397702594791a7f4907f6bccdd6408"},{"path":"apps/libtmux_erlang/test/tmux_key_tests.erl","sha256":"d39af985776d7ed68e4b39f535b0513f2cda3b95d27ee7f438c64d7490e5f8f8"},{"path":"apps/libtmux_erlang/test/tmux_model_tests.erl","sha256":"ed7b34128ff3c55020a8b430814cd21d7fbd0af49d645d1caf640c9b12a1bde5"},{"path":"apps/libtmux_erlang/test/tmux_option_tests.erl","sha256":"35a8b9a53fe2545095255c04ef0e5d92e21ff09405e6204a73b5bbbbdb25bc07"},{"path":"apps/libtmux_erlang/test/tmux_query_tests.erl","sha256":"3f6a7b2d3dfbcb252b62e2559e2318c976541b763e507ddbf57133582e121cb9"},{"path":"apps/libtmux_erlang/test/tmux_regex_tests.erl","sha256":"53f60668b1c3cf9449ab59b5576e5d367902f374aa6d5a99e50dfa5d0c96a05c"},{"path":"apps/libtmux_erlang/test/tmux_registry_tests.erl","sha256":"1564e63d63be02e2ddc13e58a67a003eb77e3129b4f6d6585d6cb2ef26d8fbc4"},{"path":"apps/libtmux_erlang/test/tmux_scope_tests.erl","sha256":"575a142cc074ffcd51784bfba68bd81b8ab1fb53684e2c47fa912cbf9ae38f19"},{"path":"apps/libtmux_erlang/test/tmux_select_tests.erl","sha256":"130475107a7ade6e18b98987ae222ff4ea12ee9bdb40cf90fd40d37b13292f74"},{"path":"apps/libtmux_erlang/test/tmux_snapshot_tests.erl","sha256":"641dd3e523efdd7a313d5bc8109d13419bedc50f1565a2abbdb4226594a51f60"},{"path":"apps/libtmux_erlang/test/tmux_text_codec_tests.erl","sha256":"fd089f5e50f509390051325c009eeb9abc3aca4a5c046c3562d64061f2c77bd0"},{"path":"apps/libtmux_erlang/test/tmux_transport_codec_tests.erl","sha256":"8769931bdc39f25e927ead06b17b985d192be54610b799ced428d4fab5d351cf"},{"path":"apps/libtmux_erlang/test/tmux_version_tests.erl","sha256":"3867637a0194ef1eee541ad311d3b296436c0220e2323b504b17243a8a588bd1"},{"path":"examples/buffer_demo.erl","sha256":"d4579d644f0d68f5b864036351ad538c7b18f73469d33fa933da248b72028f50"},{"path":"examples/command_demo.erl","sha256":"c9af9f446d73710ade39ee59a29494a9df5be076172a7efa977bc35034a33622"},{"path":"examples/config_demo.erl","sha256":"0d861a00b4f1025976a1c10e1e4873d08cedcf5f622d1d307420672f4caca3e4"},{"path":"examples/control_demo.erl","sha256":"3e407160772d5677ffb6983405bcf032d728e65e3c6eec9566445c41b2a49d7b"},{"path":"examples/filter_demo.erl","sha256":"9b3467b20497d568c0832685c790fcd0909133a15d5814282ccf55765771d321"},{"path":"examples/hook_demo.erl","sha256":"5c6c777bc6a2ab716a00bef55f44b4cf7fe43ad29ad31b55ea092acdeef49087"},{"path":"examples/inspect_demo.erl","sha256":"a87e20080863153c687682f7c21961dd50edd853254dac38f8c09a1b34f03bbd"},{"path":"examples/job_demo.erl","sha256":"8ddbd70130f47ae022d2224646b132e18aa5178b50aa6965b33612230ddf3bf5"},{"path":"examples/key_demo.erl","sha256":"572bb44ae0bca5354d9080993d6010d97caa25dcaaad89417912f4ddcca975e4"},{"path":"examples/linked_graph.erl","sha256":"d6d5f7b51e76e2023c6f33a1547ff71534f6107d705db20d2012122f552c6bf0"},{"path":"examples/native_consumer.erl","sha256":"fe3a5943ada5885c09918b3693510de612437ef6b8bd3b431674c846ae648eea"},{"path":"examples/options_demo.erl","sha256":"37a5a00ae52c25b5eef4ff079b6b5fe8155f54be85488d456ba1399dcddec468"},{"path":"examples/pane_demo.erl","sha256":"e103746aebc97ed5c939e384c935f2bf7830c0e0efa0c269fc70d5dec7b6f300"},{"path":"examples/pipe_demo.erl","sha256":"a5ea3562db13830139f6ffcf95b4b0ef0fb5dee7dcb408335aaad3ac80519e6d"},{"path":"examples/readme_demo.erl","sha256":"1ff24e66b6ac576c63eb2fc481aeeb17ab641608ec4ac56c09f9266e34fcf850"},{"path":"property/prop_tmux_filter.erl","sha256":"1a918ae522b6ae675c3ec2c42ffbb87bfd8cb30bb770ae9ac5f7bf6740b7713e"},{"path":"property/prop_tmux_graph.erl","sha256":"2fe1dfd9e870a5e98ce6a7e4c89a1a33b72d0661dc68860a6d6be83470e17fee"},{"path":"rebar.config","sha256":"faac9e9d16e8df896c8bb4bccb71214a6c6096e395301a97a38c0c89c9e56c74"},{"path":"rebar.lock","sha256":"11147eb50b093a61fe80253dae762d703387f23054d00907217c4ab3dc2d6b8c"},{"path":"test/consumers/model_types_bad.erl","sha256":"643fe7c662cc031de656149da55ec3c038541a7a1d3ece01ed7b2ca21bc5d68a"},{"path":"test/consumers/model_types_ok.erl","sha256":"fcababe54e4626a8827c319025bc801bcac51457489281d67b02a31edaebf763"},{"path":"test/tmux_buffer_SUITE.erl","sha256":"605251515daff77735e714ac9bd42abdb41695c650236aa3ee1d1d15e77ebbd0"},{"path":"test/tmux_channel_SUITE.erl","sha256":"0c72df0e5291895ee491fc9b6148100bd19c993546f932db35da4240d4f29a34"},{"path":"test/tmux_command_SUITE.erl","sha256":"7d8bc30cff9cb9168885be97a9929090d94314871d2cba6123a327dfe30c464e"},{"path":"test/tmux_control_SUITE.erl","sha256":"787e82c6ab419ceb69d7e75146b1750bf0d8425281b30e541f3865184e352a2f"},{"path":"test/tmux_control_codec_SUITE.erl","sha256":"3244294cd87b33384cadfb2e53ff501aecabb571388e99faf9cbc057158558ce"},{"path":"test/tmux_control_codec_tests.erl","sha256":"6730a09af09dbd5ebcd5e4cb8dd8abafc0c339d7cf14b8f79926a755b95c3705"},{"path":"test/tmux_diagnostics_SUITE.erl","sha256":"72aa812052d70b5af8b44777e0d39dca8f94f43faa3fd1c78c981157d4596246"},{"path":"test/tmux_docs_SUITE.erl","sha256":"fe2e757d2b3496eeb9928ab6fbea00434b5b9bd00bec199730162b14400cf589"},{"path":"test/tmux_domain_SUITE.erl","sha256":"53bf4ec2c1e4ebdbdb11f3cc3f4e235140cb3aa6e9859bc7a79c3ea4b7c30fa7"},{"path":"test/tmux_fixture_SUITE.erl","sha256":"2a7ad27ad63f1892f347fb3b272231a9ed3603f8025527931f6f98024b469e73"},{"path":"test/tmux_hook_SUITE.erl","sha256":"c020bd17251344e15d823e05e0a4ec8be4e05c6b6d3582af2aa659ff08577ef6"},{"path":"test/tmux_key_SUITE.erl","sha256":"3b5d0da672633a7470446008b79741900df9f88d5c12e21559445f2f1f1b2412"},{"path":"test/tmux_option_SUITE.erl","sha256":"88a323f26b52025092e31255f2ab944859cadd45e74ff7fd90cd6d76da0e6583"},{"path":"test/tmux_owned_server_SUITE.erl","sha256":"de43f1cfecf8c20f349a9fcaae0b02fd0559a7ab3f8621caf6f4a0cf40fa0980"},{"path":"test/tmux_pipe_SUITE.erl","sha256":"cfb3cdd298f43dc66afb306f6ac1f5f692968958a959fa8b7bbb2beaaa602b46"},{"path":"test/tmux_query_SUITE.erl","sha256":"63e71283c8aadd680c6fb006c7f9177c66b0c05b258b3849d20ea9e05699da06"},{"path":"test/tmux_server_SUITE.erl","sha256":"af9bdd800ddf33a37d4d48d5b4329f1f90dd8ba93797cfe4beb04e1587244de4"},{"path":"test/tmux_test_fixture.erl","sha256":"48b64d04a7fa2c0c4848f5203c76bc11daa98ddf3d5e1f7cc4ac5a3793ca8d00"},{"path":"test/tmux_topology_SUITE.erl","sha256":"3e5fd3cde6709593e169a93bc1ee684d3e460788400b514439009da3e58397bf"},{"path":"test/tmux_transport_SUITE.erl","sha256":"17ca53bf22a720e3b4b57ee9be9a9e8d2517abd3659b2c79c4b81d92a1eaf01c"}],"exporter":{"name":"Erlang EEP-48 and abstract code","version":3,"otp":"29.1.2","columns":60,"source_sha256":"2fc491ad480e74fded943bf072d5bfd452116a9dfc6dc7062860727fe487f1ab"}},"sources":[{"package":"libtmux_erlang","product":"core","version":"0.0.1","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"}],"symbols":[{"id":"tmux_buffer","publicId":"tmux_buffer","qualifiedName":"tmux_buffer","name":"tmux_buffer","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Load, inspect and paste tmux byte buffers through an explicit endpoint.","body":"Use `load/3` for binary payloads, including NUL bytes, and `show/2` to read\nthem back without terminal escaping or an added newline. `list/1` returns\ncaptured metadata in tmux's newest-first order; it never loads payloads.\n`paste/3` sends a named buffer to a registered pane. Direct input is available\nthrough `tmux_pane:send_text/2`.\n\nNames are NUL-free binaries, distinct from payload bytes. New names retain\ntmux's storage rules: 3.7+ cleans names and can reject control bytes or escape\nbackslashes. Use observed names from `list/1` for subsequent calls. Empty load\ninput is tmux's no-op; it neither creates nor clears a buffer. `delete/2`\nremoves a buffer explicitly. Names have no persistent object identity, and\nconcurrent commands can replace a buffer between calls.\n\nAll operations except `capabilities/1` perform explicit I/O. They use the\none-shot transport and preserve operational errors and ownership checks.\nThe [buffer guide](buffers.md) shows a complete byte round trip."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_buffer"},{"id":"tmux_buffer:capabilities/1","publicId":"tmux_buffer:capabilities/1","qualifiedName":"tmux_buffer:capabilities/1","name":"capabilities/1","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"capabilities(Version)\n-spec capabilities(tmux_version:t()) -> capabilities().","references":[{"start":41,"end":55,"target":"t:tmux_version:t/0"},{"start":62,"end":74,"target":"t:tmux_buffer:capabilities/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]}],"returns":"capabilities()","returnsReferences":[{"start":0,"end":12,"target":"t:tmux_buffer:capabilities/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Describe version differences without I/O. This does not qualify an untested release. `paste/3` uses paste_sanitize to gate sanitization and render raw paste.","examples":[{"lang":"erlang","code":"1> {ok, V} = tmux_version:parse(<<\"tmux 3.3\">>), ok.\nok\n2> tmux_buffer:capabilities(V).\n#{paste_sanitize => false,cleaned_names => false,\n rename_replaces => false,strict_named_target => false}"}]},"source":{"line":55,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_buffer-capabilities-1"},{"id":"tmux_buffer:delete/2","publicId":"tmux_buffer:delete/2","qualifiedName":"tmux_buffer:delete/2","name":"delete/2","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"delete(Server, Buffer)\n-spec delete(tmux_server:t(), target()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":36,"end":49,"target":"t:tmux_server:t/0"},{"start":53,"end":59,"target":"t:tmux_buffer:target/0"},{"start":87,"end":111,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":141,"end":144,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Buffer","type":"target()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_buffer:target/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Delete a named buffer or latest. Missing buffers return buffer_not_found. This performs I/O and affects the server-wide buffer store.","body":"On 3.3/3.3a, named deletion first checks existence with a zero-output `show/3`\nread because native deletion falls back to the newest buffer when a name is\nabsent. This check does not collect a payload or depend on the list bounds.\nIt is not atomic: concurrent removal after the check can trigger that fallback.\nUse external serialization or tmux 3.4+ when that race is unacceptable."},"source":{"line":126,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_buffer-delete-2"},{"id":"tmux_buffer:list/1","publicId":"tmux_buffer:list/1","qualifiedName":"tmux_buffer:list/1","name":"list/1","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"list(Server)\n-spec list(tmux_server:t()) ->\n {ok, [info()]} | {error, map()}.","references":[{"start":24,"end":37,"target":"t:tmux_server:t/0"},{"start":64,"end":68,"target":"t:tmux_buffer:info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":83,"end":86,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, [info()]} | {error, map()}","returnsReferences":[{"start":6,"end":10,"target":"t:tmux_buffer:info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture metadata in tmux's newest-first insertion order. Renaming preserves position; replacing data through `load/3` inserts a new buffer. Length frames preserve names containing delimiters, newlines or invalid UTF-8 on releases that permit them. Returns an ordinary list, bounded to 4096 rows and 1 MiB of encoded output. No payloads, hidden refresh or atomic snapshot is provided."},"source":{"line":106,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_buffer-list-1"},{"id":"tmux_buffer:load/3","publicId":"tmux_buffer:load/3","qualifiedName":"tmux_buffer:load/3","name":"load/3","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"load(Server, Name, Bytes)\n-spec load(tmux_server:t(),\n binary() | automatic,\n binary()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":37,"end":50,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":65,"end":71,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":98,"end":104,"target":"t:erlang:binary/0"},{"start":130,"end":154,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":182,"end":185,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Name","type":"binary() | automatic","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Bytes","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Load binary bytes under a name, or create an automatic buffer. Input may contain NUL. Empty input succeeds without changing the buffer store, including an existing name. The command payload, including argv and stdin, must fit the endpoint's 256 KiB admission limit. See `tmux_server:command/3`.","body":"Returns the completed command result, not a persistent buffer handle. No\nclipboard write is requested. Native stored-name rules still apply."},"source":{"line":72,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_buffer-load-3"},{"id":"tmux_buffer:paste/3","publicId":"tmux_buffer:paste/3","qualifiedName":"tmux_buffer:paste/3","name":"paste/3","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"paste(Pane, Buffer, Options)\n-spec paste(tmux_model:pane(), target(), paste_options()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":41,"end":56,"target":"t:tmux_model:pane/0"},{"start":60,"end":66,"target":"t:tmux_buffer:target/0"},{"start":70,"end":83,"target":"t:tmux_buffer:paste_options/0"},{"start":110,"end":134,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":163,"end":166,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Buffer","type":"target()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_buffer:target/0"}]},{"name":"Options","type":"paste_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_buffer:paste_options/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Send a named buffer or latest to a registered pane. Defaults preserve payload bytes: LF separators and unsanitized input. On tmux 3.7+, raw paste uses -S; sanitize=true selects its safe print encoding. Earlier releases reject that request with unsupported_capability before dispatch.","body":"separator is NUL-free; delete removes the buffer after the native paste call.\nbracketed adds markers only if the target has enabled that terminal mode.\nNative input-off/dead-pane behavior still applies. Completion establishes the\ntmux command result, not consumption by the child. No automatic retry occurs."},"source":{"line":167,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_buffer-paste-3"},{"id":"tmux_buffer:rename/3","publicId":"tmux_buffer:rename/3","qualifiedName":"tmux_buffer:rename/3","name":"rename/3","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"rename(Server, Old, New)\n-spec rename(tmux_server:t(), binary(), binary()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":38,"end":51,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":55,"end":61,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":65,"end":71,"target":"t:erlang:binary/0"},{"start":99,"end":123,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":153,"end":156,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Old","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"New","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Rename one explicit name. tmux 3.3 refuses an occupied destination; 3.4+ replaces it. This is native collision behavior, not an atomic absence check. Identical input names return same_buffer_name before I/O, avoiding unsafe legacy tmux paths. New names retain native cleaning rules; see `list/1` for stored names. The same observed 3.3/3.3a missing-name preflight and race as `delete/2` apply."},"source":{"line":142,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_buffer-rename-3"},{"id":"tmux_buffer:show/2","publicId":"tmux_buffer:show/2","qualifiedName":"tmux_buffer:show/2","name":"show/2","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"show(Server, Buffer)\n-spec show(tmux_server:t(), target()) ->\n {ok, binary()} | {error, map()}.","references":[{"start":32,"end":45,"target":"t:tmux_server:t/0"},{"start":49,"end":55,"target":"t:tmux_buffer:target/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":81,"end":87,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":101,"end":104,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Buffer","type":"target()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_buffer:target/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read exact payload bytes with default bounds. See `show/3` for limits."},"source":{"line":81,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_buffer-show-2"},{"id":"tmux_buffer:show/3","publicId":"tmux_buffer:show/3","qualifiedName":"tmux_buffer:show/3","name":"show/3","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"show(Server, Buffer, Options)\n-spec show(tmux_server:t(), target(), read_options()) ->\n {ok, binary()} | {error, map()}.","references":[{"start":41,"end":54,"target":"t:tmux_server:t/0"},{"start":58,"end":64,"target":"t:tmux_buffer:target/0"},{"start":68,"end":80,"target":"t:tmux_buffer:read_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":106,"end":112,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":126,"end":129,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Buffer","type":"target()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_buffer:target/0"}]},{"name":"Options","type":"read_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_buffer:read_options/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read exact payload bytes from an unattached one-shot client. No print decoding or newline removal applies. max_bytes is 0 through 1 MiB; exceeding it returns output_limit with partial command evidence, never a successful truncated value. deadline_ms is 1 through 600000. Missing buffers return buffer_not_found."},"source":{"line":90,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_buffer-show-3"},{"id":"t:tmux_buffer:capabilities/0","publicId":"t:tmux_buffer:capabilities/0","qualifiedName":"tmux_buffer:capabilities/0","name":"capabilities/0","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type capabilities() ::\n #{paste_sanitize := boolean(),\n cleaned_names := boolean(),\n rename_replaces := boolean(),\n strict_named_target := boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":54,"end":61,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":94,"end":101,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":136,"end":143,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":182,"end":189,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Source-defined buffer behavior for a parsed daemon version."},"source":{"line":39,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_buffer-capabilities-0"},{"id":"t:tmux_buffer:info/0","publicId":"t:tmux_buffer:info/0","qualifiedName":"tmux_buffer:info/0","name":"info/0","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type info() ::\n #{name := binary(),\n size := non_neg_integer(),\n created := non_neg_integer()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":36,"end":42,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":66,"end":81,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":108,"end":123,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Captured name, payload byte count and Unix creation time; not a live handle."},"source":{"line":28,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_buffer-info-0"},{"id":"t:tmux_buffer:paste_options/0","publicId":"t:tmux_buffer:paste_options/0","qualifiedName":"tmux_buffer:paste_options/0","name":"paste_options/0","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type paste_options() ::\n #{separator => binary(),\n delete => boolean(),\n bracketed => boolean(),\n sanitize => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":50,"end":56,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":82,"end":89,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":118,"end":125,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":153,"end":160,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Paste controls. separator defaults to LF; delete and bracketed default to false. sanitize defaults to false, preserving bytes. Explicit sanitization requires tmux 3.7+. Bracketing occurs only when the pane enables bracketed paste."},"source":{"line":36,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_buffer-paste_options-0"},{"id":"t:tmux_buffer:read_options/0","publicId":"t:tmux_buffer:read_options/0","qualifiedName":"tmux_buffer:read_options/0","name":"read_options/0","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type read_options() ::\n #{max_bytes => 0..1048576,\n deadline_ms => 1..600000}.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read bounds: max_bytes defaults to 1 MiB; deadline_ms defaults to 2500."},"source":{"line":30,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_buffer-read_options-0"},{"id":"t:tmux_buffer:target/0","publicId":"t:tmux_buffer:target/0","qualifiedName":"tmux_buffer:target/0","name":"target/0","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type target() :: binary() | latest.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":18,"end":24,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A stored buffer name, or latest to let tmux select its newest buffer."},"source":{"line":26,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_buffer-target-0"},{"id":"tmux_capability","publicId":"tmux_capability","qualifiedName":"tmux_capability","name":"tmux_capability","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Look up source-derived native command declarations and feature minimums.","body":"`commands/1` and `command/2` describe the exact source profiles in `profiles/0`.\nProfiles cover every release in the supported tmux 3.3a–3.8 range. They do not\ncontact tmux, interpret its arguments or qualify another build.\nCanonical command names are lookup keys; aliases remain metadata. A native\ndeclaration does not mean this library provides a typed facade for it. Use\n`tmux_command:raw/2` for an explicit trusted command.\n\n`describe/1` reports selected native feature minimums. `require/2` compares a\nparsed version with one of those minimums; it does not perform I/O or dispatch\nthe command. Numeric minimum checks also accept uncatalogued and tracking\nversions, preserving the distinction from exact parser discovery. They do not\nestablish runtime or CI qualification. Use `tmux_server:version/1` to obtain the\nversion captured by a registered endpoint.\n\nThe [generated reference](commands-reference.md) records source profiles and\nparser declarations. Maintaining the catalogue needs a tmux source checkout;\ninstalled consumers use compiled data and OTP only."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_capability"},{"id":"tmux_capability:command/2","publicId":"tmux_capability:command/2","qualifiedName":"tmux_capability:command/2","name":"command/2","namespace":"tmux_capability","parent":"tmux_capability","kind":"function","modifiers":[],"signatures":[{"raw":"command(Version, Name)\n-spec command(tmux_version:t(), binary()) ->\n {ok, command_info()} | {error, map()}.","references":[{"start":37,"end":51,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":55,"end":61,"target":"t:erlang:binary/0"},{"start":90,"end":102,"target":"t:tmux_capability:command_info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":116,"end":119,"target":"t:erlang:map/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, command_info()} | {error, map()}","returnsReferences":[{"start":5,"end":17,"target":"t:tmux_capability:command_info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":31,"end":34,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Look up one canonical native command in an exact source profile. Returns unknown_command for aliases or unknown names, unsupported_command when a known command is absent from that profile, and unsupported_command_catalogue for uncatalogued or tracking versions. Performs no I/O.","examples":[{"lang":"erlang","code":"1> {ok, V} = tmux_version:parse(<<\"tmux 3.3a\">>), ok.\nok\n2> {ok, C} = tmux_capability:command(V, <<\"send-keys\">>), ok.\nok\n3> maps:get(file, maps:get(source, C)).\n<<\"cmd-send-keys.c\">>"}]},"source":{"line":74,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_capability-command-2"},{"id":"tmux_capability:commands/1","publicId":"tmux_capability:commands/1","qualifiedName":"tmux_capability:commands/1","name":"commands/1","namespace":"tmux_capability","parent":"tmux_capability","kind":"function","modifiers":[],"signatures":[{"raw":"commands(Version)\n-spec commands(tmux_version:t()) ->\n {ok, [binary()]} | {error, map()}.","references":[{"start":33,"end":47,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":78,"end":84,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":99,"end":102,"target":"t:erlang:map/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]}],"returns":"{ok, [binary()]} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":6,"end":12,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":27,"end":30,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return sorted canonical command names for an exact catalogued stable version. Tracking and uncatalogued versions return unsupported_command_catalogue. This is pure source discovery; it does not execute list-commands."},"source":{"line":50,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_capability-commands-1"},{"id":"tmux_capability:describe/1","publicId":"tmux_capability:describe/1","qualifiedName":"tmux_capability:describe/1","name":"describe/1","namespace":"tmux_capability","parent":"tmux_capability","kind":"function","modifiers":[],"signatures":[{"raw":"describe/1\n-spec describe(feature()) ->\n {ok, feature_info()} | {error, map()}.","references":[{"start":26,"end":33,"target":"t:tmux_capability:feature/0"},{"start":63,"end":75,"target":"t:tmux_capability:feature_info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":89,"end":92,"target":"t:erlang:map/0"}],"params":[{"name":"Feature","type":"feature()","typeReferences":[{"start":0,"end":7,"target":"t:tmux_capability:feature/0"}]}],"returns":"{ok, feature_info()} | {error, map()}","returnsReferences":[{"start":5,"end":17,"target":"t:tmux_capability:feature_info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":31,"end":34,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return a selected native feature's source-derived minimum and sampled profiles. Unknown features return unknown_capability. Performs no I/O; `require/2` applies the minimum to a parsed version."},"source":{"line":99,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_capability-describe-1"},{"id":"tmux_capability:profiles/0","publicId":"tmux_capability:profiles/0","qualifiedName":"tmux_capability:profiles/0","name":"profiles/0","namespace":"tmux_capability","parent":"tmux_capability","kind":"function","modifiers":[],"signatures":[{"raw":"profiles()\n-spec profiles() -> [binary()].","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":32,"end":38,"target":"t:erlang:binary/0"}],"params":[],"returns":"[binary()]","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":1,"end":7,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"List the exact source profile names in catalogue order. Performs no I/O."},"source":{"line":42,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_capability-profiles-0"},{"id":"tmux_capability:require/2","publicId":"tmux_capability:require/2","qualifiedName":"tmux_capability:require/2","name":"require/2","namespace":"tmux_capability","parent":"tmux_capability","kind":"function","modifiers":[],"signatures":[{"raw":"require(Version, Feature)\n-spec require(tmux_version:t(), feature()) ->\n ok | {error, map()}.","references":[{"start":40,"end":54,"target":"t:tmux_version:t/0"},{"start":58,"end":65,"target":"t:tmux_capability:feature/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":102,"end":105,"target":"t:erlang:map/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]},{"name":"Feature","type":"feature()","typeReferences":[{"start":0,"end":7,"target":"t:tmux_capability:feature/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Require a native feature's numeric major/minor floor without dispatching I/O. An older version returns unsupported_capability with capability and minimum. Patch letters and tracking markers do not promote an older minor version. Unknown features and malformed parsed versions return distinct errors.","examples":[{"lang":"erlang","code":"1> {ok, V} = tmux_version:parse(<<\"tmux 3.4\">>), ok.\nok\n2> tmux_capability:require(V, send_client_keys).\nok"}]},"source":{"line":122,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_capability-require-2"},{"id":"t:tmux_capability:command_info/0","publicId":"t:tmux_capability:command_info/0","qualifiedName":"tmux_capability:command_info/0","name":"command_info/0","namespace":"tmux_capability","parent":"tmux_capability","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type command_info() ::\n #{alias := binary() | none,\n argument_spec := binary(),\n min_args := non_neg_integer(),\n max_args := non_neg_integer() | none,\n source :=\n #{file := binary(),\n commit := binary(),\n sha256 := binary()}}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":45,"end":51,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":91,"end":97,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":125,"end":140,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":168,"end":183,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":242,"end":248,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":280,"end":286,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":318,"end":324,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Native alias, flag declaration and positional bounds, with the exact source file, commit and SHA-256. none means no alias or an unbounded positional upper limit. Additional argument callbacks and runtime checks remain tmux's concern."},"source":{"line":36,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_capability-command_info-0"},{"id":"t:tmux_capability:feature/0","publicId":"t:tmux_capability:feature/0","qualifiedName":"tmux_capability:feature/0","name":"feature/0","namespace":"tmux_capability","parent":"tmux_capability","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type feature() ::\n native_list_filter | send_client_keys |\n key_list_format | layout_json.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Selected native capabilities; these do not introduce new typed command options."},"source":{"line":27,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_capability-feature-0"},{"id":"t:tmux_capability:feature_info/0","publicId":"t:tmux_capability:feature_info/0","qualifiedName":"tmux_capability:feature_info/0","name":"feature_info/0","namespace":"tmux_capability","parent":"tmux_capability","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type feature_info() ::\n #{minimum :=\n {non_neg_integer(), non_neg_integer()},\n commands := [binary()],\n description := binary(),\n versions := [binary()]}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":64,"end":79,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":83,"end":98,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":128,"end":134,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":166,"end":172,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":201,"end":207,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Source-sampled profiles, native commands, description and numeric minimum."},"source":{"line":29,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_capability-feature_info-0"},{"id":"tmux_command","publicId":"tmux_command","qualifiedName":"tmux_command","name":"tmux_command","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Build tmux commands and bounded sequences without performing I/O.","body":"Arguments remain binary values. Rendering protects trailing semicolons from\ntmux's command separator parser. This is distinct from shell quoting and from\nformat expansion. A raw command is trusted application code; external services\nmust apply their own command allowlist and write policy.\n\nUse `literal_format/1` only for a whole argument that tmux\nexpands as a format, such as a new name or cwd. It does not encode a value\nnested in a format expression. tmux's stored-name escaping and session-name\nsubstitutions still apply. Use `literal_format/2` with mode time\nfor commands such as display-message that also expand strftime percent\ndirectives. This protects one format-expansion pass, not later visual style\nrendering or recursive/nested expansion. No renderer reverses stored-name\nsemantics.\n\n`launch/1` distinguishes executable argv from an explicitly\nrequested shell command. A singleton argv uses the installed helper's\nexec-only mode because tmux otherwise passes one argument to its default\nshell. Empty argv is invalid; default_shell explicitly requests tmux's\nconfigured default command/shell. The internal helper uses an absolute path so\na child's cwd does not change helper resolution. Relative executable arguments\nretain their native meaning.\n\nEmpty shell commands have command-specific lifetime. split-window creates a\nprocess-free pane. new-session executes an empty shell command and can remove\nthe new object immediately. new-window does likewise before tmux 3.8; tmux 3.8\ncreates a process-free pane. Use a persistent job for parent sessions/windows\nthat must remain available across supported versions.\n\nSubmit commands through `tmux_server:command/3` or `tmux_operation:start/3`.\n`sequence/1` combines flat command values for one-shot execution with combined\noutput and a possible completed prefix on error.\nThe [job guide](jobs.md) shows submission, completion and cancellation.\n`tmux_session:rename_command/2` and `tmux_pane:resize_command/2` build values\nbound to their row's captured origin. Execution through another endpoint\nreturns different_owner before native work. Construction does not validate\nendpoint liveness or authorize an automatic mutation retry.\n\n`wait_for/2` builds native channel signals, waits and advisory locks.\n`source_file/2` builds configuration loading from stdin or a literal absolute\npath. Both return command values without opening an endpoint or doing I/O.\n`to_config/1` renders a command or bounded command list for native\nconfiguration input, preserving argument bytes through tmux's lexer.","examples":[{"lang":"erlang","code":"1> {ok, C} = tmux_command:raw(<<\"list-panes\">>, [<<\"-a\">>]), ok.\nok\n2> tmux_command:argv(C).\n[<<\"list-panes\">>,<<\"-a\">>]\n3> tmux_command:literal_format(<<\"api-#{pane_id}\">>).\n{ok,<<\"api-##{pane_id}\">>}\n4> tmux_command:launch(#{argv => [<<\"/bin/printf\">>, <<\"hello\">>]}).\n{ok,[<<\"/bin/printf\">>,<<\"hello\">>]}"}]},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_command"},{"id":"tmux_command:argv/1","publicId":"tmux_command:argv/1","qualifiedName":"tmux_command:argv/1","name":"argv/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"argv(Command)\n-spec argv(t()) -> [binary()].","references":[{"start":25,"end":26,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":34,"end":40,"target":"t:erlang:binary/0"}],"params":[{"name":"Command","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_command:t/0"}]}],"returns":"[binary()]","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":1,"end":7,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Render a validated command into executable argv, protecting trailing tmux separators. Performs no I/O and raises for an invalid command value."},"source":{"line":299,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_command-argv-1"},{"id":"tmux_command:launch/1","publicId":"tmux_command:launch/1","qualifiedName":"tmux_command:launch/1","name":"launch/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"launch/1\n-spec launch(launch_spec()) ->\n {ok, [binary()]} | {error, map()}.","references":[{"start":22,"end":33,"target":"t:tmux_command:launch_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":62,"end":68,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":83,"end":86,"target":"t:erlang:map/0"}],"params":[{"name":"Argument1","type":"launch_spec()","typeReferences":[{"start":0,"end":11,"target":"t:tmux_command:launch_spec/0"}]}],"returns":"{ok, [binary()]} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":6,"end":12,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":27,"end":30,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Render explicit executable argv, an explicitly requested shell command, or default_shell. Singleton argv uses the installed helper's exec-only mode to avoid tmux interpreting it as shell syntax. Performs no I/O."},"source":{"line":448,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_command-launch-1"},{"id":"tmux_command:literal_format/1","publicId":"tmux_command:literal_format/1","qualifiedName":"tmux_command:literal_format/1","name":"literal_format/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"literal_format(Value)\n-spec literal_format(binary()) ->\n {ok, binary()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":43,"end":49,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":85,"end":91,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":105,"end":108,"target":"t:erlang:map/0"}],"params":[{"name":"Value","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Quote a complete literal argument for tmux format expansion. This does not encode operands nested inside another format expression. Performs no I/O."},"source":{"line":389,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_command-literal_format-1"},{"id":"tmux_command:literal_format/2","publicId":"tmux_command:literal_format/2","qualifiedName":"tmux_command:literal_format/2","name":"literal_format/2","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"literal_format/2\n-spec literal_format(binary(), tmux | time) ->\n {ok, binary()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":38,"end":44,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":93,"end":99,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":113,"end":116,"target":"t:erlang:map/0"}],"params":[{"name":"Value","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Mode","type":"tmux | time","typeReferences":[]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Quote a complete literal format argument. Mode tmux protects hash expansion; mode time also protects strftime percent directives. Stored-name semantics remain tmux's own. This handles one expansion pass, not a nested operand, recursive expansion or later visual style rendering. Performs no I/O.","body":"Hash runs before `[` stay unchanged because tmux preserves style-looking\nprefixes for a separate drawing step. Other hashes are doubled. In time mode,\nan argument containing percent bytes must fit tmux's 8191-byte strftime result\nlimit after hash encoding and before percent doubling; larger values return\n`format_limit` with `time_bytes` and `max_bytes`. Arguments without percent\nbytes skip that native time-expansion limit. The encoded 32 KiB command limit\nstill applies in either mode."},"source":{"line":407,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_command-literal_format-2"},{"id":"tmux_command:raw/2","publicId":"tmux_command:raw/2","qualifiedName":"tmux_command:raw/2","name":"raw/2","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"raw(Name, Arguments)\n-spec raw(binary(), [binary()]) ->\n {ok, t()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":31,"end":37,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":42,"end":48,"target":"t:erlang:binary/0"},{"start":74,"end":75,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":89,"end":92,"target":"t:erlang:map/0"}],"params":[{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Arguments","type":"[binary()]","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":1,"end":7,"target":"t:erlang:binary/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate one trusted command name and binary argv, without I/O. The renderer protects tmux separators; it does not provide shell or nested-format quoting. External services still need their own allowlists and write policy. Names are at most 128 bytes. NUL bytes are rejected, and at most 2,040 arguments fit within a 32 KiB command reservation including framing overhead."},"source":{"line":100,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_command-raw-2"},{"id":"tmux_command:sequence/1","publicId":"tmux_command:sequence/1","qualifiedName":"tmux_command:sequence/1","name":"sequence/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"sequence/1\n-spec sequence([t(), ...]) -> {ok, t()} | {error, map()}.","references":[{"start":27,"end":28,"target":"t:tmux_command:t/0"},{"start":46,"end":47,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":61,"end":64,"target":"t:erlang:map/0"}],"params":[{"name":"Commands","type":"[t(), ...]","typeReferences":[{"start":1,"end":2,"target":"t:tmux_command:t/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Build one bounded native command sequence without I/O. Members must be a nonempty flat list of at most 256 command values. Their combined executable argv is limited to 2041 words and 32 KiB including separator overhead. Arguments keep the literal separator protection of `raw/2`; only boundaries between members become native command separators in `argv/1`.","body":"Captured members must share an endpoint origin. That origin also binds the\nsequence; raw members use the caller's explicitly selected endpoint. Submit\nthrough `tmux_server:command/3` or `tmux_operation:start/3`.\n\nExecution is not atomic. A failed member can leave a completed prefix, and\ncommands can wait or interleave with other work. The one-shot result contains\ncombined bounded stdout/stderr and native exit status, without per-member\ncompletion attribution or rollback. Control-mode eligibility is separate.\n`to_config/1` can serialize a sequence with the same origin-loss policy as\nother configuration text."},"source":{"line":129,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_command-sequence-1"},{"id":"tmux_command:source_file/2","publicId":"tmux_command:source_file/2","qualifiedName":"tmux_command:source_file/2","name":"source_file/2","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"source_file(Source, Options)\n-spec source_file(source(), source_options()) ->\n {ok, t()} | {error, map()}.","references":[{"start":47,"end":53,"target":"t:tmux_command:source/0"},{"start":57,"end":71,"target":"t:tmux_command:source_options/0"},{"start":104,"end":105,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":119,"end":122,"target":"t:erlang:map/0"}],"params":[{"name":"Source","type":"source()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_command:source/0"}]},{"name":"Options","type":"source_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_command:source_options/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Build configuration loading from stdin or one literal absolute path, without I/O. `stdin` renders `source-file -`; supply configuration bytes in the `stdin` option of `tmux_server:command/3` or `tmux_operation:start/3`. Those APIs bound input to 256 KiB including their argument reservation.","body":"Paths are NUL-free POSIX byte binaries. Glob metacharacters and backslashes\nare escaped so only that filename is selected; format expansion is disabled.\nThe combined encoded path and flags must fit `raw/2` limits. The file is read\nby tmux at execution time; this builder does not open it or bound its size.\n\n`parse_only` requests native `-n` parsing without executing the configuration's\ncommand list. `quiet` requests native `-q` missing-file suppression; it does\nnot suppress syntax or execution errors. Both default to false. Configuration\nis trusted tmux code, with its own variable, directive and command semantics.\nParse-only is not a sandbox. Execution can partially change server state before\nan error; cancellation cannot undo those effects. Completion does not prove\nthat background jobs launched by the configuration have finished.","examples":[{"lang":"erlang","code":"1> {ok, Source} = tmux_command:source_file(stdin, #{parse_only => true}), ok.\nok\n2> tmux_command:argv(Source).\n[<<\"source-file\">>,<<\"-n\">>,<<\"--\">>,<<\"-\">>]"}]},"source":{"line":228,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_command-source_file-2"},{"id":"tmux_command:to_config/1","publicId":"tmux_command:to_config/1","qualifiedName":"tmux_command:to_config/1","name":"to_config/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"to_config/1\n-spec to_config(t() | [t(), ...]) ->\n {ok, binary()} | {error, map()}.","references":[{"start":28,"end":29,"target":"t:tmux_command:t/0"},{"start":35,"end":36,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":73,"end":79,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":93,"end":96,"target":"t:erlang:map/0"}],"params":[{"name":"Argument1","type":"t() | [t(), ...]","typeReferences":[{"start":0,"end":1,"target":"t:tmux_command:t/0"},{"start":7,"end":8,"target":"t:tmux_command:t/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Render validated commands as native configuration text, without I/O. Accepts one command, a `sequence/1` value, or a nonempty flat list of at most 256 commands. Returns an ASCII binary of at most 32 KiB, without a final newline. Validation uses `validate/1`; escaping growth, command count and aggregate size can return `command_limit`. Lists use native command separators between independently quoted commands. Rendering does not execute them or provide atomic execution or rollback. The text carries no origin token; executing serialized configuration requires the caller to choose and validate its destination explicitly.","body":"Each argument is doublequoted. Quote, backslash, dollar, tilde, control and\nnon-ASCII bytes use three-digit octal escapes. Empty arguments, semicolons,\nnewlines and non-UTF-8 byte values remain argument data. The lexer does not\nexpand their variables or tilde prefixes, strip newline indentation, or\ninterpret them as directives, comments or additional commands.\n\nProtection covers one lexer pass. Native command-string arguments, including\n`bind-key` and `set-hook` values, can be parsed again by the receiving command.\nRender each inner command string separately for its own parse boundary.\n\nThis is tmux configuration syntax, separate from `argv/1` executable arguments\nand shell quoting. Native commands still interpret their values and expand\nformats as usual; `literal_format/2` handles that separate boundary when\nliteral format values are required. Load the text explicitly with\n`source_file/2`, or store it through a native command that accepts configuration\ntext. The [configuration guide](configuration.md) uses this renderer with\nexplicit execution and completion signals."},"source":{"line":340,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_command-to_config-1"},{"id":"tmux_command:validate/1","publicId":"tmux_command:validate/1","qualifiedName":"tmux_command:validate/1","name":"validate/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"validate/1\n-spec validate(term()) -> {ok, t()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":26,"end":30,"target":"t:erlang:term/0"},{"start":42,"end":43,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":57,"end":60,"target":"t:erlang:map/0"}],"params":[{"name":"Argument1","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Revalidate a command value at a submission boundary. Returns a compact validated command or a tagged shape/argument/resource error, without I/O."},"source":{"line":252,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_command-validate-1"},{"id":"tmux_command:wait_for/2","publicId":"tmux_command:wait_for/2","qualifiedName":"tmux_command:wait_for/2","name":"wait_for/2","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"wait_for(Channel, Action)\n-spec wait_for(binary(), wait_action()) ->\n {ok, t()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":41,"end":47,"target":"t:erlang:binary/0"},{"start":51,"end":62,"target":"t:tmux_command:wait_action/0"},{"start":92,"end":93,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":107,"end":110,"target":"t:erlang:map/0"}],"params":[{"name":"Channel","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Action","type":"wait_action()","typeReferences":[{"start":0,"end":11,"target":"t:tmux_command:wait_action/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Build a native `wait-for` command without I/O. Channels are nonempty NUL-free binary names, subject to the command reservation in `raw/2`; neither shell nor format expansion occurs. Submit through `tmux_operation:start/3` for a wait that leaves the caller free, or through `tmux_server:command/3` to await it.","body":"`signal` wakes current waiters. On an unlocked channel with no waiters or\npending wakeup, it retains one wakeup for a later wait. Signaling that channel\nagain before a wait can clear the pending state. Signals are neither counted\nnor reliably coalesced events; send once per expected wait. Channel names are\nshared by all clients of the server. Use separate names for signaling and\nlocking. `lock` acquires an advisory channel lock or waits\nfor an explicit `unlock`; a completed command client's exit does not release\nits acquired lock. Unlocking an unlocked channel is a native command error.\n\nCancellation retires the library client. It does not undo a signal or release\na lock that may already have been acquired; an uncertain lock outcome needs\napplication coordination before another unlock. This is not an owned mutex.","examples":[{"lang":"erlang","code":"1> {ok, Signal} = tmux_command:wait_for(<<\"build-ready\">>, signal), ok.\nok\n2> tmux_command:argv(Signal).\n[<<\"wait-for\">>,<<\"-S\">>,<<\"--\">>,<<\"build-ready\">>]"}]},"source":{"line":188,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_command-wait_for-2"},{"id":"t:tmux_command:launch_spec/0","publicId":"t:tmux_command:launch_spec/0","qualifiedName":"tmux_command:launch_spec/0","name":"launch_spec/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type launch_spec() ::\n default_shell |\n #{argv := [binary(), ...]} |\n #{shell := binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":70,"end":76,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":109,"end":115,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Explicit executable argv, an explicitly requested shell command, or tmux's configured default shell."},"source":{"line":74,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_command-launch_spec-0"},{"id":"t:tmux_command:respawn_spec/0","publicId":"t:tmux_command:respawn_spec/0","qualifiedName":"tmux_command:respawn_spec/0","name":"respawn_spec/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type respawn_spec() ::\n previous |\n #{argv := [binary(), ...]} |\n #{shell := binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":66,"end":72,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":105,"end":111,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Reuse tmux's saved command/shell, or replace it with argv or a shell command. Used by `tmux_pane:respawn/2` and `tmux_window:respawn/2`."},"source":{"line":81,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_command-respawn_spec-0"},{"id":"t:tmux_command:source/0","publicId":"t:tmux_command:source/0","qualifiedName":"tmux_command:source/0","name":"source/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type source() :: stdin | binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":26,"end":32,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Standard input, or one literal absolute POSIX byte path with no NUL."},"source":{"line":68,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_command-source-0"},{"id":"t:tmux_command:source_options/0","publicId":"t:tmux_command:source_options/0","qualifiedName":"tmux_command:source_options/0","name":"source_options/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type source_options() ::\n #{parse_only => boolean(), quiet => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":52,"end":59,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":72,"end":79,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Native parse-only and quiet-missing-file flags; both default to false."},"source":{"line":70,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_command-source_options-0"},{"id":"t:tmux_command:t/0","publicId":"t:tmux_command:t/0","qualifiedName":"tmux_command:t/0","name":"t/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated command or flat sequence. Rendering and execution remain separate. Domain builders retain a captured endpoint origin; raw values are unbound."},"source":{"line":87,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_command-t-0"},{"id":"t:tmux_command:wait_action/0","publicId":"t:tmux_command:wait_action/0","qualifiedName":"tmux_command:wait_action/0","name":"wait_action/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type wait_action() :: wait | signal | lock | unlock.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Native wait channel action. lock/unlock are explicit advisory operations, not owned leases."},"source":{"line":66,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_command-wait_action-0"},{"id":"tmux_control","publicId":"tmux_control","qualifiedName":"tmux_control","name":"tmux_control","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Own an explicit persistent tmux control attachment.","body":"`attach/3` attaches to an existing session from `m:tmux_server` and verifies\nthe daemon identity on that connection. The caller owns its lifetime.\nAttachment changes the session's attached-client count. The command client\nuses no-output and ignore-size; -E skips attachment's environment update.\nThe library issues no session-option writes or session-creation commands.\nConfigured hooks and native lifetime policies can still change state,\nincluding on failed attach or detachment. Those effects are not rolled back.\nCommand submission and terminal streaming are not yet exposed.\n\nUse `close/1` before closing the parent endpoint. Parent closing, invalidation\nor caller death requests retirement, but parent close alone does not prove\nthis client's exit. Control close and `status/1` report its native cleanup.\nNeither detachment nor cancellation reverses remote effects. Application\nshutdown alone is not a verified cleanup result."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_control"},{"id":"tmux_control:attach/3","publicId":"tmux_control:attach/3","qualifiedName":"tmux_control:attach/3","name":"attach/3","namespace":"tmux_control","parent":"tmux_control","kind":"function","modifiers":[],"signatures":[{"raw":"attach(Server, Session, Options)\n-spec attach(tmux_server:t(),\n tmux_model:session(),\n attach_options()) ->\n {ok, t()} | {error, map()}.","references":[{"start":46,"end":59,"target":"t:tmux_server:t/0"},{"start":76,"end":94,"target":"t:tmux_model:session/0"},{"start":111,"end":125,"target":"t:tmux_control:attach_options/0"},{"start":153,"end":154,"target":"t:tmux_control:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":168,"end":171,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Options","type":"attach_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_control:attach_options/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_control:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Attach to an existing captured session from this exact endpoint origin. Performs I/O and waits for a same-connection identity probe. Uses attach-session with -E rather than creating a session or writing options. Configured hooks may change state; failure does not reverse their effects. The control client affects attached_count. Unexpected hook-generated reply blocks fail attachment and retire the client.","body":"An attachment timeout requests cleanup. If cleanup cannot be proved within\nits finite deadline, the error includes a control handle for `close/1` recovery.\nThe supervised owner remains until native retirement. Close explicitly to\nobserve cleanup, including when the parent endpoint is already closed."},"source":{"line":55,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_control-attach-3"},{"id":"tmux_control:close/1","publicId":"tmux_control:close/1","qualifiedName":"tmux_control:close/1","name":"close/1","namespace":"tmux_control","parent":"tmux_control","kind":"function","modifiers":[],"signatures":[{"raw":"close(Control)\n-spec close(t()) -> ok | {error, map()}.","references":[{"start":27,"end":28,"target":"t:tmux_control:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":48,"end":51,"target":"t:erlang:map/0"}],"params":[{"name":"Control","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_control:t/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Retire this control client and its helper without issuing session or daemon destruction commands. Native lifetime policies and detachment hooks may still change state; cleanup does not reverse their effects. Returns ok only after actual retirement. A finite cleanup failure leaves a supervised owner for retry and observation. Successful close is idempotent during the 60-second handle retention period."},"source":{"line":89,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_control-close-1"},{"id":"tmux_control:status/1","publicId":"tmux_control:status/1","qualifiedName":"tmux_control:status/1","name":"status/1","namespace":"tmux_control","parent":"tmux_control","kind":"function","modifiers":[],"signatures":[{"raw":"status(Control)\n-spec status(t()) -> {ok, state()} | {error, map()}.","references":[{"start":29,"end":30,"target":"t:tmux_control:t/0"},{"start":42,"end":47,"target":"t:tmux_control:state/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":61,"end":64,"target":"t:erlang:map/0"}],"params":[{"name":"Control","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_control:t/0"}]}],"returns":"{ok, state()} | {error, map()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_control:state/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":24,"end":27,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read retained connection state without a tmux command. Inspect cleanup rather than inferring native exit from the Erlang owner's lifecycle. Closed handles expire after 60 seconds and then return control_expired."},"source":{"line":97,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_control-status-1"},{"id":"t:tmux_control:attach_options/0","publicId":"t:tmux_control:attach_options/0","qualifiedName":"tmux_control:attach_options/0","name":"attach_options/0","namespace":"tmux_control","parent":"tmux_control","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type attach_options() ::\n #{startup_timeout_ms => 1..600000}.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Finite attachment budget, including parent registration, exec and identity. Defaults to 2500 ms."},"source":{"line":29,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_control-attach_options-0"},{"id":"t:tmux_control:state/0","publicId":"t:tmux_control:state/0","qualifiedName":"tmux_control:state/0","name":"state/0","namespace":"tmux_control","parent":"tmux_control","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type state() ::\n #{phase := attaching | open | closing | closed,\n generation := reference(),\n owner := pid(),\n identity := unverified | same_connection,\n cleanup := pending | incomplete | complete,\n child_pid := none | pos_integer(),\n helper_pid := none | pos_integer(),\n cause := none | atom()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":101,"end":110,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pid/0","project":"Erlang/OTP"},"start":135,"end":138,"target":"t:erlang:pid/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":284,"end":295,"target":"t:erlang:pos_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":332,"end":343,"target":"t:erlang:pos_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":375,"end":379,"target":"t:erlang:atom/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Connection state, separate from command completion. complete proves native client/helper retirement; pending and incomplete do not. Retained PIDs are diagnostic observations, never permission to signal a process."},"source":{"line":35,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_control-state-0"},{"id":"t:tmux_control:t/0","publicId":"t:tmux_control:t/0","qualifiedName":"tmux_control:t/0","name":"t/0","namespace":"tmux_control","parent":"tmux_control","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A generation-bound connection handle. Passing it does not transfer lifetime ownership."},"source":{"line":27,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_control-t-0"},{"id":"tmux_error","publicId":"tmux_error","qualifiedName":"tmux_error","name":"tmux_error","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Explain library exceptions through Erlang's native error formatter.","body":"The shell and `erl_error:format_exception/3` call `format_error/2` through\nEEP-54 stack metadata. Explanations supplement the original exception reason;\ntagged results from `tmux_filter:new/2` and `tmux_select:try_where/2` retain\ntheir existing structured data. Formatting performs no tmux I/O.\n\nOnly library-raised errors carry this metadata. Application callback failures\nretain their original class, reason and stack. Coverage errors describe missing\nobservations; formatting never loads those observations or retries an action.\nLong detail values may be abbreviated in the explanation. The exception reason\nretains the original error data. See [runtime diagnostics](diagnostics.md) for\nthe separate, bounded Logger report contract."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_error.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_error"},{"id":"tmux_error:format_error/2","publicId":"tmux_error:format_error/2","qualifiedName":"tmux_error:format_error/2","name":"format_error/2","namespace":"tmux_error","parent":"tmux_error","kind":"function","modifiers":[],"signatures":[{"raw":"format_error/2\n-spec format_error(term(), erlang:stacktrace()) ->\n #{general => unicode:chardata()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":34,"end":38,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:stacktrace/0","project":"Erlang/OTP"},"start":42,"end":59,"target":"t:erlang:stacktrace/0"},{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/unicode.html#t:chardata/0","project":"Erlang/OTP"},"start":101,"end":117,"target":"t:unicode:chardata/0"}],"params":[{"name":"Argument1","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]},{"name":"Argument2","type":"erlang:stacktrace()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:stacktrace/0","project":"Erlang/OTP"},"start":0,"end":17,"target":"t:erlang:stacktrace/0"}]}],"returns":"#{general => unicode:chardata()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/unicode.html#t:chardata/0","project":"Erlang/OTP"},"start":13,"end":29,"target":"t:unicode:chardata/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return supplemental native error text, or an empty map for an unknown reason.","body":"This is the `c:erl_error:format_error/2` callback. It neither changes the\nexception nor catches it on behalf of a caller.","examples":[{"lang":"erlang","code":"1> #{general := Text} = tmux_error:format_error({bad_query_limit, -1}, []), ok.\nok\n2> unicode:characters_to_binary(Text).\n<<\"The query limit must be an integer from 0 through 65536.\">>"}]},"source":{"line":34,"file":"apps/libtmux_erlang/src/tmux_error.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_error-format_error-2"},{"id":"tmux_filter","publicId":"tmux_filter","qualifiedName":"tmux_filter","name":"tmux_filter","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Construct portable conditions and prepare them against captured values.","body":"Local criteria use atom keys, binary text and schema-typed values. Fields and\noperators conjoin. Boolean branches use 'and', 'or' and 'not'; relationships\nuse some/every/none/count or is/is_not. Validation examines the entire input\nbefore evaluation. No function here performs tmux I/O. Use portable filters\nwith `tmux_select:where/2` or `tmux_query:where/2`; the [query\nguide](querying.md) explains their different execution boundaries.\n\nWire version 1 uses generated camelCase field names, snake_case operators,\nJSON null for known absence and {\"base64\": \"...\"} for byte operands. Byte\nvalues never become text implicitly. Regex uses the restricted ASCII\nportable_v1 dialect, absolute anchors and no flags. Preparation compiles each\npattern once. Non-ASCII subjects and exhausted match limits return errors.\n\nBoth input criteria and their normalized wire document must fit the grammar,\ndepth and byte limits. Resource errors can refer to the canonical wire path.","examples":[{"lang":"erlang","code":"1> Fields = #{id => <<\"%1\">>, current_command => <<\"vim\">>}, ok.\nok\n2> {ok, P} = tmux_model:pane(Fields), S = tmux_select:from_list(pane, [P]), ok.\nok\n3> R = #{pattern => <<\"^(vim|nvim)$\">>, dialect => portable_v1}, ok.\nok\n4> tmux_select:size(tmux_select:where(#{current_command => #{regex => R}}, S)).\n1"}]},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_filter"},{"id":"tmux_filter:decode_json/1","publicId":"tmux_filter:decode_json/1","qualifiedName":"tmux_filter:decode_json/1","name":"decode_json/1","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"decode_json(Binary)\n-spec decode_json(binary()) ->\n {ok, json:decode_value()} |\n {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":38,"end":44,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/json.html#t:decode_value/0","project":"Erlang/OTP"},"start":77,"end":94,"target":"t:json:decode_value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":129,"end":132,"target":"t:erlang:map/0"}],"params":[{"name":"Binary","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, json:decode_value()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/json.html#t:decode_value/0","project":"Erlang/OTP"},"start":5,"end":22,"target":"t:json:decode_value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":36,"end":39,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Decode bounded external JSON with duplicate-key, trailing-input and depth checks. Returns tagged errors with input paths. Parsing does not execute tmux or choose application modules."},"source":{"line":135,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_filter-decode_json-1"},{"id":"tmux_filter:entity/1","publicId":"tmux_filter:entity/1","qualifiedName":"tmux_filter:entity/1","name":"entity/1","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"entity/1\n-spec entity(t()) -> tmux_schema:entity().","references":[{"start":22,"end":23,"target":"t:tmux_filter:t/0"},{"start":30,"end":48,"target":"t:tmux_schema:entity/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_filter:t/0"}]}],"returns":"tmux_schema:entity()","returnsReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the schema entity this portable filter accepts, without I/O."},"source":{"line":141,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_filter-entity-1"},{"id":"tmux_filter:from_wire/2","publicId":"tmux_filter:from_wire/2","qualifiedName":"tmux_filter:from_wire/2","name":"from_wire/2","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"from_wire(Entity, Document)\n-spec from_wire(tmux_schema:entity(), term()) ->\n {ok, t()} | {error, map()}.","references":[{"start":44,"end":62,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":66,"end":70,"target":"t:erlang:term/0"},{"start":101,"end":102,"target":"t:tmux_filter:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":116,"end":119,"target":"t:erlang:map/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Document","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_filter:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate a versioned filter document using generated wire-name allowlists. Rejects unknown fields, operators, wrong entity/version and resource limits. No payload key becomes an atom; this does not execute a query."},"source":{"line":99,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_filter-from_wire-2"},{"id":"tmux_filter:matches/2","publicId":"tmux_filter:matches/2","qualifiedName":"tmux_filter:matches/2","name":"matches/2","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"matches(Prepared, Row)\n-spec matches(prepared(), tmux_model:row()) ->\n {ok, boolean()} | {error, map()}.","references":[{"start":37,"end":45,"target":"t:tmux_filter:prepared/0"},{"start":49,"end":63,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":92,"end":99,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":113,"end":116,"target":"t:erlang:map/0"}],"params":[{"name":"Prepared","type":"prepared()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_filter:prepared/0"}]},{"name":"Row","type":"tmux_model:row()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_model:row/0"}]}],"returns":"{ok, boolean()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":5,"end":12,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":26,"end":29,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Evaluate an unmodified captured row against a prepared filter. Returns a Boolean result or tagged context/regex resource error. It performs no tmux I/O and never converts evaluation failure into a nonmatch."},"source":{"line":223,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_filter-matches-2"},{"id":"tmux_filter:new/2","publicId":"tmux_filter:new/2","qualifiedName":"tmux_filter:new/2","name":"new/2","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"new/2\n-spec new(tmux_schema:entity(), map() | t()) ->\n {ok, t()} | {error, map()}.","references":[{"start":16,"end":34,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":38,"end":41,"target":"t:erlang:map/0"},{"start":46,"end":47,"target":"t:tmux_filter:t/0"},{"start":72,"end":73,"target":"t:tmux_filter:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":87,"end":90,"target":"t:erlang:map/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Filter","type":"map() | t()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"},{"start":8,"end":9,"target":"t:tmux_filter:t/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_filter:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate criteria or reuse an already normalized filter for the same entity.","examples":[{"lang":"erlang","code":"1> {ok, F} = tmux_filter:new(pane, #{width => #{gte => 120.0}}), ok.\nok\n2> tmux_filter:new(pane, F) =:= {ok, F}.\ntrue\n3> tmux_filter:new(pane, #{active => #{contains => <<\"yes\">>}}).\n{error,#{code => unsupported_operator,path => [active,contains],allowed => [equals,'not',in,not_in]}}"}]},"source":{"line":75,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_filter-new-2"},{"id":"tmux_filter:new_or_error/2","publicId":"tmux_filter:new_or_error/2","qualifiedName":"tmux_filter:new_or_error/2","name":"new_or_error/2","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"new_or_error(Entity, Criteria)\n-spec new_or_error(tmux_schema:entity(), map() | t()) ->\n t().","references":[{"start":50,"end":68,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":72,"end":75,"target":"t:erlang:map/0"},{"start":80,"end":81,"target":"t:tmux_filter:t/0"},{"start":110,"end":111,"target":"t:tmux_filter:t/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Criteria","type":"map() | t()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"},{"start":8,"end":9,"target":"t:tmux_filter:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_filter:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a normalized portable filter, raising bad_filter on malformed trusted criteria. Performs no tmux I/O. External input should use `new/2` or `from_wire/2` for tagged validation errors."},"source":{"line":86,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_filter-new_or_error-2"},{"id":"tmux_filter:predicate/1","publicId":"tmux_filter:predicate/1","qualifiedName":"tmux_filter:predicate/1","name":"predicate/1","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"predicate(Prepared)\n-spec predicate(prepared()) ->\n fun((tmux_model:row()) -> boolean()).","references":[{"start":36,"end":44,"target":"t:tmux_filter:prepared/0"},{"start":75,"end":89,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":96,"end":103,"target":"t:erlang:boolean/0"}],"params":[{"name":"Prepared","type":"prepared()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_filter:prepared/0"}]}],"returns":"fun((tmux_model:row()) -> boolean())","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":26,"end":33,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return a Boolean function bound to the prepared observation context.","body":"Rows outside that context raise {prepared_context_mismatch, Detail}. Regex\nevaluation errors raise {filter_evaluation_failed, Detail}. Use `matches/2`\nfor tagged errors. This does not run callbacks."},"source":{"line":205,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_filter-predicate-1"},{"id":"tmux_filter:prepare/2","publicId":"tmux_filter:prepare/2","qualifiedName":"tmux_filter:prepare/2","name":"prepare/2","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"prepare/2\n-spec prepare(t(), tmux_snapshot:t()) ->\n {ok, prepared()} | {error, map()}.","references":[{"start":24,"end":25,"target":"t:tmux_filter:t/0"},{"start":29,"end":44,"target":"t:tmux_snapshot:t/0"},{"start":73,"end":81,"target":"t:tmux_filter:prepared/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":95,"end":98,"target":"t:erlang:map/0"}],"params":[{"name":"Filter","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_filter:t/0"}]},{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"{ok, prepared()} | {error, map()}","returnsReferences":[{"start":5,"end":13,"target":"t:tmux_filter:prepared/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":27,"end":30,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Bind a filter to one snapshot and check all required coverage first.","body":"The prepared value can match only unmodified rows captured in that snapshot.\nIt remains usable after the endpoint closes. It cannot refresh observations.","examples":[{"lang":"erlang","code":"1> {ok, F} = tmux_filter:new(pane, #{width => #{gte => 80}}), ok.\nok\n2> tmux_filter:requirements(F).\n[{collection,pane},{field,pane,width}]"}]},"source":{"line":178,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_filter-prepare-2"},{"id":"tmux_filter:requirements/1","publicId":"tmux_filter:requirements/1","qualifiedName":"tmux_filter:requirements/1","name":"requirements/1","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"requirements/1\n-spec requirements(t()) -> [tmux_snapshot:requirement()].","references":[{"start":34,"end":35,"target":"t:tmux_filter:t/0"},{"start":43,"end":68,"target":"t:tmux_snapshot:requirement/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_filter:t/0"}]}],"returns":"[tmux_snapshot:requirement()]","returnsReferences":[{"start":1,"end":26,"target":"t:tmux_snapshot:requirement/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Derive every field and complete relationship needed for faithful evaluation. The complete requirement set is checked before short-circuiting any row."},"source":{"line":161,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_filter-requirements-1"},{"id":"tmux_filter:to_wire/1","publicId":"tmux_filter:to_wire/1","qualifiedName":"tmux_filter:to_wire/1","name":"to_wire/1","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"to_wire/1\n-spec to_wire(t()) -> wire_document().","references":[{"start":24,"end":25,"target":"t:tmux_filter:t/0"},{"start":32,"end":45,"target":"t:tmux_filter:wire_document/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_filter:t/0"}]}],"returns":"wire_document()","returnsReferences":[{"start":0,"end":13,"target":"t:tmux_filter:wire_document/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Export versioned JSON-compatible predicate data with generated wire names. Byte operands use base64 objects and known absence uses JSON null. Functions, compiled regexes and native record internals never enter this representation."},"source":{"line":125,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_filter-to_wire-1"},{"id":"t:tmux_filter:expr/0","publicId":"t:tmux_filter:expr/0","qualifiedName":"tmux_filter:expr/0","name":"expr/0","namespace":"tmux_filter","parent":"tmux_filter","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type expr() ::\n {all | any, [expr()]} |\n {negate, expr()} |\n {field, binary(), atom(), term()} |\n {relation, binary(), atom(), expr()} |\n {count, binary(), [{atom(), term()}]}.","params":[],"references":[{"start":39,"end":43,"target":"t:tmux_filter:expr/0"},{"start":69,"end":73,"target":"t:tmux_filter:expr/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":97,"end":103,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":107,"end":111,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":115,"end":119,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":146,"end":152,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":156,"end":160,"target":"t:erlang:atom/0"},{"start":164,"end":168,"target":"t:tmux_filter:expr/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":192,"end":198,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":204,"end":208,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":212,"end":216,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Normalized data expressions with stable field IDs, used by internal planners; not the wire grammar."},"source":{"line":42,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_filter-expr-0"},{"id":"t:tmux_filter:prepared/0","publicId":"t:tmux_filter:prepared/0","qualifiedName":"tmux_filter:prepared/0","name":"prepared/0","namespace":"tmux_filter","parent":"tmux_filter","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque prepared().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A cached evaluator bound to one captured observation and schema context."},"source":{"line":49,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_filter-prepared-0"},{"id":"t:tmux_filter:t/0","publicId":"t:tmux_filter:t/0","qualifiedName":"tmux_filter:t/0","name":"t/0","namespace":"tmux_filter","parent":"tmux_filter","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Portable normalized predicate data for one schema entity; contains no executable state."},"source":{"line":40,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_filter-t-0"},{"id":"t:tmux_filter:wire_document/0","publicId":"t:tmux_filter:wire_document/0","qualifiedName":"tmux_filter:wire_document/0","name":"wire_document/0","namespace":"tmux_filter","parent":"tmux_filter","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type wire_document() :: #{binary() => json:encode_value()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/json.html#t:encode_value/0","project":"Erlang/OTP"},"start":39,"end":56,"target":"t:json:encode_value/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Version-one JSON-compatible filter envelope with binary keys version, entity and where. entity is the generated wire entity name; where contains Boolean, field and relationship conditions. Version is the integer 1. Keys and operators still require `from_wire/2` validation; the typespec alone does not authorize arbitrary fields or unbounded external input."},"source":{"line":57,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_filter-wire_document-0"},{"id":"tmux_hook","publicId":"tmux_hook","qualifiedName":"tmux_hook","name":"tmux_hook","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Store builtin hook commands and run them in an explicit observed context.","body":"`set/3` replaces one indexed entry. `append/3` uses tmux's first vacant index;\n`clear/2` leaves an empty local array and `unset/2` restores inheritance.\n`get/3` reads local values unless inheritance is requested. Commands are\n`t:tmux_command:t/0` values, rendered by `tmux_command:to_config/1` before tmux\nparses and stores them. A successful write confirms registration, while later\nhook effects need their own completion evidence.\n\nTable scope and execution context are separate. `run/2` selects a session,\nchecked window link or checked pane/link pair. Physical windows can belong to\nseveral sessions; a link preserves the chosen session and index. Preflight and\ndispatch are separate observations, with no atomic compare-and-act guarantee.\nKnown restarts and closed owners invalidate references. Captured rows never\nrefresh during these actions.\n\nNames and table scopes use the exact source-derived version catalogue from\n`tmux_option:catalogue/1`. User options, prefixes and aliases are rejected.\nThe native custom-event and monitor interfaces are outside this API. Deliberate\nraw integration remains available through `tmux_command:raw/2`. Calls perform\nI/O after validation and never retry uncertain mutations. The\n[hook guide](hooks.md) demonstrates registration and an effect acknowledgement."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_hook"},{"id":"tmux_hook:append/3","publicId":"tmux_hook:append/3","qualifiedName":"tmux_hook:append/3","name":"append/3","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"append(Scope, Name0, Commands)\n-spec append(scope(), binary(), commands()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":44,"end":49,"target":"t:tmux_hook:scope/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":53,"end":59,"target":"t:erlang:binary/0"},{"start":63,"end":71,"target":"t:tmux_hook:commands/0"},{"start":99,"end":123,"target":"t:tmux_operation:completed/0"},{"start":153,"end":175,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_hook:scope/0"}]},{"name":"Name0","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Commands","type":"commands()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_hook:commands/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Store commands at tmux's first vacant local index for the unindexed name. A new local array starts independently of inherited entries; this does not copy the parent's array. The command result does not report the chosen index; `get/3` observes current entries separately. Performs I/O with the parsing and unknown-outcome semantics of `set/3`."},"source":{"line":116,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_hook-append-3"},{"id":"tmux_hook:clear/2","publicId":"tmux_hook:clear/2","qualifiedName":"tmux_hook:clear/2","name":"clear/2","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"clear(Scope, Name0)\n-spec clear(scope(), binary()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":32,"end":37,"target":"t:tmux_hook:scope/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":41,"end":47,"target":"t:erlang:binary/0"},{"start":74,"end":98,"target":"t:tmux_operation:completed/0"},{"start":127,"end":149,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_hook:scope/0"}]},{"name":"Name0","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Leave an empty local hook array, masking inherited entries. This differs from `unset/2`, which restores inheritance. Global clear empties that defaults table. Performs I/O; existing effects already queued by tmux are not cancelled."},"source":{"line":132,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_hook-clear-2"},{"id":"tmux_hook:get/3","publicId":"tmux_hook:get/3","qualifiedName":"tmux_hook:get/3","name":"get/3","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"get(Scope, Key, Options)\n-spec get(scope(),\n tmux_option:key(),\n tmux_option:read_options()) ->\n {ok, value()} | none | {error, map()}.","references":[{"start":35,"end":40,"target":"t:tmux_hook:scope/0"},{"start":54,"end":69,"target":"t:tmux_option:key/0"},{"start":83,"end":107,"target":"t:tmux_option:read_options/0"},{"start":132,"end":137,"target":"t:tmux_hook:value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":158,"end":161,"target":"t:erlang:map/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_hook:scope/0"}]},{"name":"Key","type":"tmux_option:key()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_option:key/0"}]},{"name":"Options","type":"tmux_option:read_options()","typeReferences":[{"start":0,"end":24,"target":"t:tmux_option:read_options/0"}]}],"returns":"{ok, value()} | none | {error, map()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_hook:value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":31,"end":34,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read a builtin hook array or indexed entry. Options follow `t:tmux_option:read_options/0`: local-only by default, inherit = true follows its parent tables. Missing local arrays or entries return none; an empty local array returns {ok, #{}} and masks inheritance.","body":"Values are tmux's command-list serialization, including its quoting and escape\nsequences. They are neither the original input text nor individual decoded\narguments. Reading does not execute them. Use `set/3` for validated command\nvalues and `unset/2` to restore inheritance. Performs I/O and preserves backend\nerrors; a vanished target is not an absent hook."},"source":{"line":65,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_hook-get-3"},{"id":"tmux_hook:run/2","publicId":"tmux_hook:run/2","qualifiedName":"tmux_hook:run/2","name":"run/2","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"run(Context, Name0)\n-spec run(context(), binary()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":30,"end":37,"target":"t:tmux_hook:context/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":41,"end":47,"target":"t:erlang:binary/0"},{"start":72,"end":96,"target":"t:tmux_operation:completed/0"},{"start":123,"end":145,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Context","type":"context()","typeReferences":[{"start":0,"end":7,"target":"t:tmux_hook:context/0"}]},{"name":"Name0","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Request native set-hook -R in the explicit `t:context/0`. tmux resolves the hook through that context's effective tables; global table flags do not select a separate execution scope. A session uses its current window and pane. A window link fixes the observed session/index and expected physical window; a pane context additionally checks that pane's observed parent.","body":"Performs I/O. The result is the native command outcome, not an acknowledgement\nof background work launched by its commands. A missing or empty effective hook\ncan succeed without effects. Wait on an application completion condition when\neffects matter. Existence and membership checks precede dispatch. If the\ntarget disappears after preflight, tmux can still fall back to another\ncontext. This is not atomic compare-and-act. Use fresh links after known\ntopology changes."},"source":{"line":173,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_hook-run-2"},{"id":"tmux_hook:set/3","publicId":"tmux_hook:set/3","qualifiedName":"tmux_hook:set/3","name":"set/3","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"set(Scope, Key, Commands)\n-spec set(scope(),\n {binary(), non_neg_integer()},\n commands()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":36,"end":41,"target":"t:tmux_hook:scope/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":56,"end":62,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":66,"end":81,"target":"t:erlang:non_neg_integer/0"},{"start":96,"end":104,"target":"t:tmux_hook:commands/0"},{"start":129,"end":153,"target":"t:tmux_operation:completed/0"},{"start":180,"end":202,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_hook:scope/0"}]},{"name":"Key","type":"{binary(), non_neg_integer()}","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":1,"end":7,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":11,"end":26,"target":"t:erlang:non_neg_integer/0"}]},{"name":"Commands","type":"commands()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_hook:commands/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Replace one {Name, Index} entry with validated command values. An explicit index is required; other entries remain. Indexes range from zero to 2147483647. The rendered command text is bounded before dispatch. Native commands still interpret their arguments and formats when the hook later runs. Use `append/3` for native vacant-index selection and `clear/2` to mask inherited hooks with an empty local array.","body":"Performs I/O. tmux parses commands before replacing an existing entry, but a\nfailed first write can already create an empty local override. Registration\nand later execution are separate; this call promises no transaction, rollback\nor completion of future effects."},"source":{"line":99,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_hook-set-3"},{"id":"tmux_hook:unset/2","publicId":"tmux_hook:unset/2","qualifiedName":"tmux_hook:unset/2","name":"unset/2","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"unset(Scope, Key)\n-spec unset(scope(), tmux_option:key()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":30,"end":35,"target":"t:tmux_hook:scope/0"},{"start":39,"end":54,"target":"t:tmux_option:key/0"},{"start":81,"end":105,"target":"t:tmux_operation:completed/0"},{"start":134,"end":156,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_hook:scope/0"}]},{"name":"Key","type":"tmux_option:key()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_option:key/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove one indexed entry or the whole local array. Removing an entry leaves its local array, possibly empty. Removing the whole array restores inheritance; unsetting a global builtin resets its native default. Missing local values are a successful native no-op. Performs I/O; queued hook effects are unaffected."},"source":{"line":148,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_hook-unset-2"},{"id":"t:tmux_hook:commands/0","publicId":"t:tmux_hook:commands/0","qualifiedName":"tmux_hook:commands/0","name":"commands/0","namespace":"tmux_hook","parent":"tmux_hook","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type commands() ::\n tmux_command:t() | [tmux_command:t(), ...].","params":[],"references":[{"start":30,"end":44,"target":"t:tmux_command:t/0"},{"start":50,"end":64,"target":"t:tmux_command:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"One validated command or a nonempty list; at most 256 commands and 32 KiB rendered text."},"source":{"line":45,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_hook-commands-0"},{"id":"t:tmux_hook:context/0","publicId":"t:tmux_hook:context/0","qualifiedName":"tmux_hook:context/0","name":"context/0","namespace":"tmux_hook","parent":"tmux_hook","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type context() ::\n tmux_model:session() |\n tmux_model:window_link() |\n {pane,\n tmux_model:pane(),\n tmux_model:window_link()}.","params":[],"references":[{"start":29,"end":47,"target":"t:tmux_model:session/0"},{"start":62,"end":84,"target":"t:tmux_model:window_link/0"},{"start":117,"end":132,"target":"t:tmux_model:pane/0"},{"start":147,"end":169,"target":"t:tmux_model:window_link/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A session's current context, one observed membership, or a pane in that membership."},"source":{"line":39,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_hook-context-0"},{"id":"t:tmux_hook:scope/0","publicId":"t:tmux_hook:scope/0","qualifiedName":"tmux_hook:scope/0","name":"scope/0","namespace":"tmux_hook","parent":"tmux_hook","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type scope() ::\n tmux_model:session() |\n tmux_model:window() |\n tmux_model:pane() |\n {session_defaults | window_defaults,\n tmux_server:t()}.","params":[],"references":[{"start":27,"end":45,"target":"t:tmux_model:session/0"},{"start":60,"end":77,"target":"t:tmux_model:window/0"},{"start":92,"end":107,"target":"t:tmux_model:pane/0"},{"start":170,"end":183,"target":"t:tmux_server:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A registered local table or explicit global session/window defaults; see `t:tmux_option:scope/0`."},"source":{"line":33,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_hook-scope-0"},{"id":"t:tmux_hook:value/0","publicId":"t:tmux_hook:value/0","qualifiedName":"tmux_hook:value/0","name":"value/0","namespace":"tmux_hook","parent":"tmux_hook","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type value() ::\n binary() | #{non_neg_integer() => binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":40,"end":55,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":61,"end":67,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Canonical native command-list text, or a sparse map of indexes to that text."},"source":{"line":49,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_hook-value-0"},{"id":"tmux_identity","publicId":"tmux_identity","qualifiedName":"tmux_identity","name":"tmux_identity","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Observe a Linux process incarnation using its PID, boot ID and start ticks.","body":"A successful check is an observation. It neither reserves a PID nor pins a\ntmux connection, and it never authorizes signalling a process. Endpoint owners\nin `m:tmux_server` compare the PID returned by the current connection as well.\nA server can still change between this check and a later one-shot command.\n\nUse `fingerprint/1` to compare captured incarnations across endpoint handles\nor persist that comparison in a plan. It performs no process observation;\nthe key grants neither liveness nor permission to act.","examples":[{"lang":"erlang","code":"1> Pid = list_to_integer(os:getpid()), ok.\nok\n2> {ok, Identity} = tmux_identity:observe(Pid), ok.\nok\n3> tmux_identity:check(Identity, Pid).\nok"}]},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_identity"},{"id":"tmux_identity:check/2","publicId":"tmux_identity:check/2","qualifiedName":"tmux_identity:check/2","name":"check/2","namespace":"tmux_identity","parent":"tmux_identity","kind":"function","modifiers":[],"signatures":[{"raw":"check/2\n-spec check(t(), pos_integer()) -> ok | {error, map()}.","references":[{"start":20,"end":21,"target":"t:tmux_identity:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":25,"end":36,"target":"t:erlang:pos_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":56,"end":59,"target":"t:erlang:map/0"}],"params":[{"name":"Identity","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_identity:t/0"}]},{"name":"ObservedPid","type":"pos_integer()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":0,"end":11,"target":"t:erlang:pos_integer/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Re-observe the PID and compare its incarnation token. A successful result is a momentary observation, not ownership, permission to signal, or a same-connection guarantee."},"source":{"line":92,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_identity-check-2"},{"id":"tmux_identity:fingerprint/1","publicId":"tmux_identity:fingerprint/1","qualifiedName":"tmux_identity:fingerprint/1","name":"fingerprint/1","namespace":"tmux_identity","parent":"tmux_identity","kind":"function","modifiers":[],"signatures":[{"raw":"fingerprint/1\n-spec fingerprint(t()) ->\n {ok, fingerprint()} |\n {error, #{code := invalid_identity}}.","references":[{"start":32,"end":33,"target":"t:tmux_identity:t/0"},{"start":66,"end":77,"target":"t:tmux_identity:fingerprint/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_identity:t/0"}]}],"returns":"{ok, fingerprint()} |\n {error, #{code := invalid_identity}}","returnsReferences":[{"start":5,"end":16,"target":"t:tmux_identity:fingerprint/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Derive a portable `t:fingerprint/0` from a captured identity without I/O.","body":"The key includes PID, boot ID and process-start ticks. Reconnecting to the same\nprocess preserves it; changing any component changes it. The encoding is\nversioned for persisted plans. Use `check/2` for a fresh process observation.\nMalformed identity terms return invalid_identity before hashing.","examples":[{"lang":"erlang","code":"1> {ok, I} = tmux_identity:observe(list_to_integer(os:getpid())), ok.\nok\n2> {ok, Key} = tmux_identity:fingerprint(I), ok.\nok\n3> byte_size(Key).\n73"}]},"source":{"line":59,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_identity-fingerprint-1"},{"id":"tmux_identity:observe/1","publicId":"tmux_identity:observe/1","qualifiedName":"tmux_identity:observe/1","name":"observe/1","namespace":"tmux_identity","parent":"tmux_identity","kind":"function","modifiers":[],"signatures":[{"raw":"observe/1\n-spec observe(pos_integer()) -> {ok, t()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":24,"end":35,"target":"t:erlang:pos_integer/0"},{"start":47,"end":48,"target":"t:tmux_identity:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":62,"end":65,"target":"t:erlang:map/0"}],"params":[{"name":"Pid","type":"pos_integer()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":0,"end":11,"target":"t:erlang:pos_integer/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_identity:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Observe a Linux PID incarnation without signalling it. Returns a tagged error if the process cannot be identified; this performs local operating-system I/O."},"source":{"line":79,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_identity-observe-1"},{"id":"t:tmux_identity:fingerprint/0","publicId":"t:tmux_identity:fingerprint/0","qualifiedName":"tmux_identity:fingerprint/0","name":"fingerprint/0","namespace":"tmux_identity","parent":"tmux_identity","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type fingerprint() :: binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":23,"end":29,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Versioned SHA-256 comparison key for a captured Linux process incarnation. The linux-v1 prefix identifies the canonical encoding, independent of Erlang term serialization. Keys compare identity observations, not endpoint ownership or current liveness. They are identifiers, not authentication tokens."},"source":{"line":38,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_identity-fingerprint-0"},{"id":"t:tmux_identity:t/0","publicId":"t:tmux_identity:t/0","qualifiedName":"tmux_identity:t/0","name":"t/0","namespace":"tmux_identity","parent":"tmux_identity","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Observed Linux PID, boot identity and process-start token. It does not pin a connection."},"source":{"line":30,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_identity-t-0"},{"id":"tmux_json","publicId":"tmux_json","qualifiedName":"tmux_json","name":"tmux_json","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Decode bounded JSON using OTP's `m:json` parser and binary object keys.","body":"Documents are limited to 256 KiB before parsing and 32 nested containers\nduring parsing. Duplicate keys are rejected before overwriting values, even\nwhen different escapes spell the same key. Trailing input is rejected. Numbers\nstay in the shared exact integer range. Integral decimal tokens are converted\nexactly; fractional tokens that round to integers are rejected. Field\nvalidation decides whether a remaining float is permitted. Syntax and resource\nerrors have a root path; duplicate-key errors retain their complete document\npath. Use `tmux_filter:from_wire/2` to validate decoded filter data."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_json.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_json"},{"id":"tmux_json:decode/1","publicId":"tmux_json:decode/1","qualifiedName":"tmux_json:decode/1","name":"decode/1","namespace":"tmux_json","parent":"tmux_json","kind":"function","modifiers":[],"signatures":[{"raw":"decode/1\n-spec decode(binary()) ->\n {ok, json:decode_value()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":22,"end":28,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/json.html#t:decode_value/0","project":"Erlang/OTP"},"start":56,"end":73,"target":"t:json:decode_value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":87,"end":90,"target":"t:erlang:map/0"}],"params":[{"name":"Binary","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, json:decode_value()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/json.html#t:decode_value/0","project":"Erlang/OTP"},"start":5,"end":22,"target":"t:json:decode_value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":36,"end":39,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return a decoded value or a structured error without creating payload atoms.","examples":[{"lang":"erlang","code":"1> tmux_json:decode(<<\"{\\\"a\\\": [1, true, null]}\">>).\n{ok,#{<<\"a\">> => [1,true,null]}}\n2> tmux_json:decode(<<\"{\\\"a\\\": {\\\"x\\\": 1, \\\"x\\\": 2}}\">>).\n{error,#{code => duplicate_key,path => [<<\"a\">>,<<\"x\">>]}}\n3> tmux_json:decode(<<\"[] []\">>).\n{error,#{code => trailing_input,path => []}}"}]},"source":{"line":32,"file":"apps/libtmux_erlang/src/tmux_json.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_json-decode-1"},{"id":"tmux_key","publicId":"tmux_key","qualifiedName":"tmux_key","name":"tmux_key","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Register and remove bindings in explicit server key tables.","body":"`bind/3` uses the native prefix table; `bind/4` chooses a table, repeat flag\nand note. Command values use `tmux_command:to_config/1` for the stored parser\nboundary. Replacing a binding resets its commands, repeat flag and note.\nRegistration does not prove that a client later executed the binding.\n\nTables belong to the server. A session's key-table option selects its default\ntable through `m:tmux_option`; tmux's prefix and client table-switching rules\nstill apply. Registering a custom table does not select it for any client.\n`clear_table/2` requires an explicit name and can affect attached clients.\n\n`listing/2` returns native presentation bytes. Field padding, quoting, note\ncoverage and formatting vary by daemon release. It does not decode bindings\nor promise reusable configuration. Retain the original command values when\nan application needs to install the same binding again.\n\nKey names use tmux's own binary spellings, such as C-b, Enter and MouseDown1Pane.\nThe daemon validates actual names and modifiers. Library validation bounds\nbytes and rejects NUL before dispatch. Calls use registered endpoint identity,\nperform explicit I/O and never retry uncertain mutations. They do not attach\na client or refresh captured rows.\n\nThe [key-table guide](keys.md) installs and removes an application-owned table."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_key"},{"id":"tmux_key:bind/3","publicId":"tmux_key:bind/3","qualifiedName":"tmux_key:bind/3","name":"bind/3","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"bind(Server, Key, Commands)\n-spec bind(tmux_server:t(),\n key(),\n tmux_command:t() | [tmux_command:t(), ...]) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":39,"end":52,"target":"t:tmux_server:t/0"},{"start":67,"end":70,"target":"t:tmux_key:key/0"},{"start":85,"end":99,"target":"t:tmux_command:t/0"},{"start":105,"end":119,"target":"t:tmux_command:t/0"},{"start":151,"end":175,"target":"t:tmux_operation:completed/0"},{"start":203,"end":225,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_key:key/0"}]},{"name":"Commands","type":"tmux_command:t() | [tmux_command:t(), ...]","typeReferences":[{"start":0,"end":14,"target":"t:tmux_command:t/0"},{"start":20,"end":34,"target":"t:tmux_command:t/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Register commands in the native prefix table with default options. Performs I/O; see `bind/4` for replacement, command parsing and future execution."},"source":{"line":53,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_key-bind-3"},{"id":"tmux_key:bind/4","publicId":"tmux_key:bind/4","qualifiedName":"tmux_key:bind/4","name":"bind/4","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"bind(Server, Key0, Commands, Options)\n-spec bind(tmux_server:t(),\n key(),\n tmux_command:t() | [tmux_command:t(), ...],\n bind_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":49,"end":62,"target":"t:tmux_server:t/0"},{"start":77,"end":80,"target":"t:tmux_key:key/0"},{"start":95,"end":109,"target":"t:tmux_command:t/0"},{"start":115,"end":129,"target":"t:tmux_command:t/0"},{"start":150,"end":162,"target":"t:tmux_key:bind_options/0"},{"start":188,"end":212,"target":"t:tmux_operation:completed/0"},{"start":240,"end":262,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Key0","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_key:key/0"}]},{"name":"Commands","type":"tmux_command:t() | [tmux_command:t(), ...]","typeReferences":[{"start":0,"end":14,"target":"t:tmux_command:t/0"},{"start":20,"end":34,"target":"t:tmux_command:t/0"}]},{"name":"Options","type":"bind_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_key:bind_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Register or replace one binding with validated command values. Commands can be one value or a flat nonempty list; `tmux_command:to_config/1` applies the aggregate count and byte bounds. Options follow `t:bind_options/0`. Arguments, table names and notes are literal bytes at registration; stored commands still interpret their values and formats when a client executes them.","body":"Performs I/O. tmux parses the commands before replacing an existing binding.\nThe result confirms registration, while effects of future key presses need\ntheir own acknowledgement. Replacement resets the old repeat flag and note\nusing the supplied options. Errors preserve backend diagnostics and unknown\noutcomes; there is no rollback or automatic retry."},"source":{"line":70,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_key-bind-4"},{"id":"tmux_key:clear_table/2","publicId":"tmux_key:clear_table/2","qualifiedName":"tmux_key:clear_table/2","name":"clear_table/2","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"clear_table(Server, Table)\n-spec clear_table(tmux_server:t(), binary()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":45,"end":58,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":62,"end":68,"target":"t:erlang:binary/0"},{"start":101,"end":125,"target":"t:tmux_operation:completed/0"},{"start":160,"end":182,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Table","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove the entire explicitly named table through native unbind-key -a -T. Names use the bounds in `t:bind_options/0`. This can remove default bindings and affect attached clients. Missing tables remain native errors; this call does not restore factory defaults or cancel commands already queued. Performs I/O after endpoint and argument validation."},"source":{"line":114,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_key-clear_table-2"},{"id":"tmux_key:listing/1","publicId":"tmux_key:listing/1","qualifiedName":"tmux_key:listing/1","name":"listing/1","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"listing(Server)\n-spec listing(tmux_server:t()) ->\n {ok, binary()} | {error, map()}.","references":[{"start":30,"end":43,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":72,"end":78,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":92,"end":95,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read all tables as native listing bytes. Performs I/O; see `listing/2`."},"source":{"line":122,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_key-listing-1"},{"id":"tmux_key:listing/2","publicId":"tmux_key:listing/2","qualifiedName":"tmux_key:listing/2","name":"listing/2","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"listing/2\n-spec listing(tmux_server:t(), listing_options()) ->\n {ok, binary()} | {error, map()}.","references":[{"start":24,"end":37,"target":"t:tmux_server:t/0"},{"start":41,"end":56,"target":"t:tmux_key:listing_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":85,"end":91,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":105,"end":108,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Options","type":"listing_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_key:listing_options/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read native list-keys presentation output, optionally filtering by table and key through `t:listing_options/0`. Returns the command's stdout unchanged; spacing, quoting and included metadata follow that daemon. This is a text view, with no decoded-row, exact-note or configuration-round-trip guarantee.","body":"tmux 3.4 can escape dollar signs in this output. tmux 3.7c can send a single\nmatching entry to its status-message path, producing empty stdout without an\nattached target client. Empty presentation output does not prove absence.\nThe [key-table guide](keys.md) demonstrates a table with multiple bindings.\n\nThe baseline command has no custom format option on tmux 3.3. Deliberate\nnewer-server formatting is available through `tmux_command:raw/2`. Performs\nI/O; missing tables, invalid key spellings and backend errors remain errors."},"source":{"line":140,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_key-listing-2"},{"id":"tmux_key:unbind/2","publicId":"tmux_key:unbind/2","qualifiedName":"tmux_key:unbind/2","name":"unbind/2","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"unbind(Server, Key)\n-spec unbind(tmux_server:t(), key()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":33,"end":46,"target":"t:tmux_server:t/0"},{"start":50,"end":53,"target":"t:tmux_key:key/0"},{"start":81,"end":105,"target":"t:tmux_operation:completed/0"},{"start":135,"end":157,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_key:key/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove a binding from the native prefix table. Performs I/O; see `unbind/3`."},"source":{"line":83,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_key-unbind-2"},{"id":"tmux_key:unbind/3","publicId":"tmux_key:unbind/3","qualifiedName":"tmux_key:unbind/3","name":"unbind/3","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"unbind(Server, Key0, Options)\n-spec unbind(tmux_server:t(),\n key(),\n #{table => binary()}) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":43,"end":56,"target":"t:tmux_server:t/0"},{"start":73,"end":76,"target":"t:tmux_key:key/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":104,"end":110,"target":"t:erlang:binary/0"},{"start":139,"end":163,"target":"t:tmux_operation:completed/0"},{"start":193,"end":215,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Key0","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_key:key/0"}]},{"name":"Options","type":"#{table => binary()}","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":11,"end":17,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove one key from the explicit table, defaulting to prefix. Only table is accepted in the options map. A missing key in an existing table is a native no-op; a missing explicit table remains an error. Removing the final custom binding can remove its table, so a repeated call can then report that missing table. Invalid native key names are never quietly suppressed.","body":"Performs I/O. Effects already queued by a client are unaffected. Use\n`clear_table/2` to remove an entire explicitly named table."},"source":{"line":97,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_key-unbind-3"},{"id":"t:tmux_key:bind_options/0","publicId":"t:tmux_key:bind_options/0","qualifiedName":"tmux_key:bind_options/0","name":"bind_options/0","namespace":"tmux_key","parent":"tmux_key","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type bind_options() ::\n #{table => binary(),\n repeat => boolean(),\n note => binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":45,"end":51,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":77,"end":84,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":108,"end":114,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Default table is prefix and repeat is false. Tables contain 1..1024 NUL-free bytes. note is at most 32 KiB of NUL-free bytes; omitting it removes an old note when commands are replaced. Command-level aggregate bounds still apply."},"source":{"line":38,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_key-bind_options-0"},{"id":"t:tmux_key:key/0","publicId":"t:tmux_key:key/0","qualifiedName":"tmux_key:key/0","name":"key/0","namespace":"tmux_key","parent":"tmux_key","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type key() :: binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":15,"end":21,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A nonempty NUL-free native key spelling, at most 128 bytes; tmux validates its meaning."},"source":{"line":32,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_key-key-0"},{"id":"t:tmux_key:listing_options/0","publicId":"t:tmux_key:listing_options/0","qualifiedName":"tmux_key:listing_options/0","name":"listing_options/0","namespace":"tmux_key","parent":"tmux_key","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type listing_options() ::\n #{table => binary(), key => key()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":48,"end":54,"target":"t:erlang:binary/0"},{"start":65,"end":68,"target":"t:tmux_key:key/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"No table filter lists all native tables. table restricts the listing to one nonempty NUL-free name of at most 1024 bytes; key restricts it to a native key spelling. Missing tables and invalid key spellings retain native errors. Unmatched filters can return empty output or a backend error by release."},"source":{"line":45,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_key-listing_options-0"},{"id":"tmux_matcher","publicId":"tmux_matcher","qualifiedName":"tmux_matcher","name":"tmux_matcher","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Prepare a trusted local predicate once for a captured snapshot.","body":"Use `tmux_select:matching/2` with `{Module, State}`. The application chooses\nModule; external filter documents cannot select the `c:prepare/2`\ncallback. Preparation returns a unary Boolean function or a tagged error.\nCallback exceptions propagate. The adapter does not make executable predicates\nportable or push them to tmux."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_matcher.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_matcher"},{"id":"c:tmux_matcher:prepare/2","publicId":"c:tmux_matcher:prepare/2","qualifiedName":"tmux_matcher:prepare/2","name":"prepare/2","namespace":"tmux_matcher","parent":"tmux_matcher","kind":"function","modifiers":["abstract"],"signatures":[{"raw":"-callback prepare(State :: term(),\n Snapshot :: tmux_snapshot:t()) ->\n {ok,\n fun((tmux_model:row()) ->\n boolean())} |\n {error, term()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":27,"end":31,"target":"t:erlang:term/0"},{"start":65,"end":80,"target":"t:tmux_snapshot:t/0"},{"start":140,"end":154,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":191,"end":198,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":234,"end":238,"target":"t:erlang:term/0"}],"params":[{"name":"State","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]},{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"{ok, fun((tmux_model:row()) -> boolean())} |\n {error, term()}","returnsReferences":[{"start":10,"end":24,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":31,"end":38,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":63,"end":67,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Prepare a local Boolean predicate once for this captured snapshot. Return a tagged preparation error when the matcher cannot operate. Callback exceptions remain application failures; this does not make a matcher portable or suitable for untrusted module selection."},"source":{"line":17,"file":"apps/libtmux_erlang/src/tmux_matcher.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"c-tmux_matcher-prepare-2"},{"id":"tmux_model","publicId":"tmux_model","qualifiedName":"tmux_model","name":"tmux_model","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Validated native domain records. Constructors perform no tmux I/O.","body":"Missing optional observations remain not_loaded; required identity fields\nmust be supplied. Unavailable capabilities remain\nunavailable. Neither state means an empty relation or known absence.\nRows created by `new/2` and the entity constructors are detached.\nEntity constructors accept generated input-map types such as\n`t:pane_input/0`. Use `new/2` to validate dynamic maps; Dialyzer checks\nknown constructor shapes but does not replace runtime validation.\nUse `tmux_server:bind/2` to register a fresh observed row for actions;\nuse `m:tmux_snapshot` for captured graph relationships.\n\nObserved rows carry a private `t:observation/0` value. Actions compare it\nwith the row's origin, snapshot identity and target fields, rejecting\nmismatched observations before I/O. Valid-shaped binding mismatches return\nobservation_mismatch; detached and malformed rows keep their validation\nerrors. Retarget through\n`tmux_server:bind/2`; it reads current values. This protects ordinary API\nuse, not authority against trusted code in the Erlang VM.\n\nNative model version 2 adds this association. Discard version-1 rows and\nsnapshots on upgrade and freshly observe them. `to_map/1` extracts domain\nfields for explicit schema validation; maps carry no actionable origin."},"source":{"line":2,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model"},{"id":"tmux_model:entity/1","publicId":"tmux_model:entity/1","qualifiedName":"tmux_model:entity/1","name":"entity/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"entity/1\n-spec entity(row()) -> tmux_schema:entity().","references":[{"start":22,"end":25,"target":"t:tmux_model:row/0"},{"start":32,"end":50,"target":"t:tmux_schema:entity/0"}],"params":[{"name":"Argument1","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"tmux_schema:entity()","returnsReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the built-in entity kind of a native row without I/O."},"source":{"line":233,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-entity-1"},{"id":"tmux_model:get/2","publicId":"tmux_model:get/2","qualifiedName":"tmux_model:get/2","name":"get/2","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"get/2\n-spec get(atom(), row()) -> term().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":16,"end":20,"target":"t:erlang:atom/0"},{"start":24,"end":27,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":34,"end":38,"target":"t:erlang:term/0"}],"params":[{"name":"Argument1","type":"atom()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:atom/0"}]},{"name":"Argument2","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"term()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read a permitted domain field without I/O. Unknown fields raise unknown_field; unloaded and unavailable values remain distinct."},"source":{"line":268,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-get-2"},{"id":"tmux_model:model_version/1","publicId":"tmux_model:model_version/1","qualifiedName":"tmux_model:model_version/1","name":"model_version/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"model_version/1\n-spec model_version(row()) -> pos_integer().","references":[{"start":36,"end":39,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":46,"end":57,"target":"t:erlang:pos_integer/0"}],"params":[{"name":"Argument1","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"pos_integer()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":0,"end":11,"target":"t:erlang:pos_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read the native model version. Unknown versions fail validation; record internals are not a persistence format."},"source":{"line":254,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-model_version-1"},{"id":"tmux_model:new/2","publicId":"tmux_model:new/2","qualifiedName":"tmux_model:new/2","name":"new/2","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"new(Entity, Fields)\n-spec new(atom(), map()) ->\n {ok, row()} |\n {error, tmux_schema:error_detail()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":30,"end":34,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":38,"end":41,"target":"t:erlang:map/0"},{"start":66,"end":69,"target":"t:tmux_model:row/0"},{"start":96,"end":120,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Entity","type":"atom()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:atom/0"}]},{"name":"Fields","type":"map()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"}]}],"returns":"{ok, row()} | {error, tmux_schema:error_detail()}","returnsReferences":[{"start":5,"end":8,"target":"t:tmux_model:row/0"},{"start":22,"end":46,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a detached row from validated observations.","body":"Accepts dynamic maps, including malformed input that returns a tagged\n`t:tmux_schema:error_detail/0`. For trusted typed code, prefer the entity\nconstructors such as `pane/1` and `t:pane_input/0`.","examples":[{"lang":"erlang","code":"1> {ok, Pane} = tmux_model:new(pane, #{id => <<\"%1\">>, width => 120}), ok.\nok\n2> tmux_model:get(width, Pane).\n120"}]},"source":{"line":192,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-new-2"},{"id":"tmux_model:origin/1","publicId":"tmux_model:origin/1","qualifiedName":"tmux_model:origin/1","name":"origin/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"origin/1\n-spec origin(row()) -> none | reference().","references":[{"start":22,"end":25,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":39,"end":48,"target":"t:erlang:reference/0"}],"params":[{"name":"Argument1","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"none | reference()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":7,"end":16,"target":"t:erlang:reference/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read the opaque origin token, or none for a detached row. This does not revalidate endpoint lifetime."},"source":{"line":240,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-origin-1"},{"id":"tmux_model:pane/1","publicId":"tmux_model:pane/1","qualifiedName":"tmux_model:pane/1","name":"pane/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"pane(Fields)\n-spec pane(pane_input()) ->\n {ok, pane()} |\n {error, tmux_schema:error_detail()}.","references":[{"start":24,"end":34,"target":"t:tmux_model:pane_input/0"},{"start":60,"end":64,"target":"t:tmux_model:pane/0"},{"start":92,"end":116,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Fields","type":"pane_input()","typeReferences":[{"start":0,"end":10,"target":"t:tmux_model:pane_input/0"}]}],"returns":"{ok, pane()} |\n {error, tmux_schema:error_detail()}","returnsReferences":[{"start":5,"end":9,"target":"t:tmux_model:pane/0"},{"start":33,"end":57,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a detached pane row, validating required fields and scalar bounds without tmux I/O."},"source":{"line":212,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-pane-1"},{"id":"tmux_model:session/1","publicId":"tmux_model:session/1","qualifiedName":"tmux_model:session/1","name":"session/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"session(Fields)\n-spec session(session_input()) ->\n {ok, session()} |\n {error, tmux_schema:error_detail()}.","references":[{"start":30,"end":43,"target":"t:tmux_model:session_input/0"},{"start":72,"end":79,"target":"t:tmux_model:session/0"},{"start":110,"end":134,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Fields","type":"session_input()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_model:session_input/0"}]}],"returns":"{ok, session()} |\n {error, tmux_schema:error_detail()}","returnsReferences":[{"start":5,"end":12,"target":"t:tmux_model:session/0"},{"start":36,"end":60,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a detached session row, validating required fields and scalar bounds without tmux I/O."},"source":{"line":200,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-session-1"},{"id":"tmux_model:snapshot_id/1","publicId":"tmux_model:snapshot_id/1","qualifiedName":"tmux_model:snapshot_id/1","name":"snapshot_id/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"snapshot_id/1\n-spec snapshot_id(row()) -> none | reference().","references":[{"start":32,"end":35,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":49,"end":58,"target":"t:erlang:reference/0"}],"params":[{"name":"Argument1","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"none | reference()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":7,"end":16,"target":"t:erlang:reference/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read the capture identity, or none when not associated with a snapshot. Performs no I/O."},"source":{"line":247,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-snapshot_id-1"},{"id":"tmux_model:to_map/1","publicId":"tmux_model:to_map/1","qualifiedName":"tmux_model:to_map/1","name":"to_map/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"to_map/1\n-spec to_map(row()) -> map().","references":[{"start":22,"end":25,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":32,"end":35,"target":"t:erlang:map/0"}],"params":[{"name":"Row","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"map()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return domain field values without origin or capture metadata. This is not the portable filter wire representation. Performs no I/O."},"source":{"line":261,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-to_map-1"},{"id":"tmux_model:validate/1","publicId":"tmux_model:validate/1","qualifiedName":"tmux_model:validate/1","name":"validate/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"validate(Row)\n-spec validate(term()) -> {ok, row()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":29,"end":33,"target":"t:erlang:term/0"},{"start":45,"end":48,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":62,"end":65,"target":"t:erlang:map/0"}],"params":[{"name":"Row","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]}],"returns":"{ok, row()} | {error, map()}","returnsReferences":[{"start":5,"end":8,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate native row shape, model version and normalized observations. Exported records do not enforce these invariants at construction. Performs no I/O."},"source":{"line":216,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-validate-1"},{"id":"tmux_model:window/1","publicId":"tmux_model:window/1","qualifiedName":"tmux_model:window/1","name":"window/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"window(Fields)\n-spec window(window_input()) ->\n {ok, window()} |\n {error, tmux_schema:error_detail()}.","references":[{"start":28,"end":40,"target":"t:tmux_model:window_input/0"},{"start":68,"end":74,"target":"t:tmux_model:window/0"},{"start":104,"end":128,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Fields","type":"window_input()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_model:window_input/0"}]}],"returns":"{ok, window()} |\n {error, tmux_schema:error_detail()}","returnsReferences":[{"start":5,"end":11,"target":"t:tmux_model:window/0"},{"start":35,"end":59,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a detached window row, validating required fields and scalar bounds without tmux I/O."},"source":{"line":204,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-window-1"},{"id":"tmux_model:window_link/1","publicId":"tmux_model:window_link/1","qualifiedName":"tmux_model:window_link/1","name":"window_link/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"window_link(Fields)\n-spec window_link(window_link_input()) ->\n {ok, window_link()} |\n {error, tmux_schema:error_detail()}.","references":[{"start":38,"end":55,"target":"t:tmux_model:window_link_input/0"},{"start":88,"end":99,"target":"t:tmux_model:window_link/0"},{"start":134,"end":158,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Fields","type":"window_link_input()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_model:window_link_input/0"}]}],"returns":"{ok, window_link()} |\n {error, tmux_schema:error_detail()}","returnsReferences":[{"start":5,"end":16,"target":"t:tmux_model:window_link/0"},{"start":40,"end":64,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a detached window_link row, validating required fields and scalar bounds without tmux I/O."},"source":{"line":208,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-window_link-1"},{"id":"t:tmux_model:observation/0","publicId":"t:tmux_model:observation/0","qualifiedName":"tmux_model:observation/0","name":"observation/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque observation().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Private captured target association, created by observation. Retain with its row; construction and field access are internal. It is not an authorization or serialization format."},"source":{"line":46,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-observation-0"},{"id":"t:tmux_model:pane/0","publicId":"t:tmux_model:pane/0","qualifiedName":"tmux_model:pane/0","name":"pane/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type pane() :: #pane{}.","params":[],"references":[{"start":16,"end":21,"target":"#tmux_model:pane{}"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated pane observation. Native records are experimental in OTP 29."},"source":{"line":112,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-pane-0"},{"id":"t:tmux_model:pane_id/0","publicId":"t:tmux_model:pane_id/0","qualifiedName":"tmux_model:pane_id/0","name":"pane_id/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-nominal pane_id() :: binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":22,"end":28,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A canonical pane ID binary in the percent namespace; nominal checking is by Dialyzer."},"source":{"line":37,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-pane_id-0"},{"id":"t:tmux_model:pane_input/0","publicId":"t:tmux_model:pane_input/0","qualifiedName":"tmux_model:pane_input/0","name":"pane_input/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type pane_input() ::\n #{id := pane_id(),\n window_id =>\n window_id() | not_loaded | unavailable,\n index =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n active => boolean() | not_loaded | unavailable,\n current_command =>\n binary() | not_loaded | unavailable,\n current_path =>\n binary() | not_loaded | unavailable,\n width =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n height =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n pid =>\n pos_integer() |\n float() |\n none | not_loaded | unavailable,\n title => binary() | not_loaded | unavailable,\n dead => boolean() | not_loaded | unavailable,\n exit_status =>\n integer() |\n float() |\n none | not_loaded | unavailable}.","params":[],"references":[{"start":40,"end":47,"target":"t:tmux_model:pane_id/0"},{"start":92,"end":101,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":169,"end":184,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":205,"end":210,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":279,"end":286,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":364,"end":370,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":445,"end":451,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":519,"end":534,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":555,"end":560,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":645,"end":660,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":681,"end":686,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":768,"end":779,"target":"t:erlang:pos_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":800,"end":805,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":880,"end":886,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":937,"end":944,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":1018,"end":1025,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":1046,"end":1051,"target":"t:erlang:float/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Trusted constructor fields for `pane/1`. Required keys use :=; optional observations may be not_loaded or unavailable. Integral floats are normalized to integers. Runtime validation still checks ranges, IDs, UTF-8 and derived values. Use `new/2` for dynamically validated maps."},"source":{"line":162,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-pane_input-0"},{"id":"t:tmux_model:row/0","publicId":"t:tmux_model:row/0","qualifiedName":"tmux_model:row/0","name":"row/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type row() ::\n #session{} | #window{} | #window_link{} | #pane{}.","params":[],"references":[{"start":25,"end":33,"target":"#tmux_model:session{}"},{"start":38,"end":45,"target":"#tmux_model:window{}"},{"start":50,"end":62,"target":"#tmux_model:window_link{}"},{"start":67,"end":72,"target":"#tmux_model:pane{}"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"One schema-defined native domain record, with separate origin and capture metadata."},"source":{"line":104,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-row-0"},{"id":"t:tmux_model:session/0","publicId":"t:tmux_model:session/0","qualifiedName":"tmux_model:session/0","name":"session/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type session() :: #session{}.","params":[],"references":[{"start":19,"end":27,"target":"#tmux_model:session{}"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated session observation. Native records are experimental in OTP 29."},"source":{"line":106,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-session-0"},{"id":"t:tmux_model:session_id/0","publicId":"t:tmux_model:session_id/0","qualifiedName":"tmux_model:session_id/0","name":"session_id/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-nominal session_id() :: binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":25,"end":31,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A canonical session ID binary in the dollar namespace."},"source":{"line":41,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-session_id-0"},{"id":"t:tmux_model:session_input/0","publicId":"t:tmux_model:session_input/0","qualifiedName":"tmux_model:session_input/0","name":"session_input/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type session_input() ::\n #{id := session_id(),\n name => binary() | not_loaded | unavailable,\n attached_count =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n attached =>\n boolean() | not_loaded | unavailable,\n created =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable}.","params":[],"references":[{"start":43,"end":53,"target":"t:tmux_model:session_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":77,"end":83,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":160,"end":175,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":196,"end":201,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":288,"end":295,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":365,"end":380,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":401,"end":406,"target":"t:erlang:float/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Trusted constructor fields for `session/1`. Required keys use :=; optional observations may be not_loaded or unavailable. Integral floats are normalized to integers. Runtime validation still checks ranges, IDs, UTF-8 and derived values. Use `new/2` for dynamically validated maps."},"source":{"line":120,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-session_input-0"},{"id":"t:tmux_model:window/0","publicId":"t:tmux_model:window/0","qualifiedName":"tmux_model:window/0","name":"window/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type window() :: #window{}.","params":[],"references":[{"start":18,"end":25,"target":"#tmux_model:window{}"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated window observation. Native records are experimental in OTP 29."},"source":{"line":108,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-window-0"},{"id":"t:tmux_model:window_id/0","publicId":"t:tmux_model:window_id/0","qualifiedName":"tmux_model:window_id/0","name":"window_id/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-nominal window_id() :: binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":24,"end":30,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A canonical physical-window ID binary in the at-sign namespace."},"source":{"line":39,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-window_id-0"},{"id":"t:tmux_model:window_input/0","publicId":"t:tmux_model:window_input/0","qualifiedName":"tmux_model:window_input/0","name":"window_input/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type window_input() ::\n #{id := window_id(),\n name => binary() | not_loaded | unavailable,\n width =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n height =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n pane_count =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n layout => binary() | not_loaded | unavailable}.","params":[],"references":[{"start":42,"end":51,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":75,"end":81,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":149,"end":164,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":185,"end":190,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":275,"end":290,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":311,"end":316,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":405,"end":420,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":441,"end":446,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":515,"end":521,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Trusted constructor fields for `window/1`. Required keys use :=; optional observations may be not_loaded or unavailable. Integral floats are normalized to integers. Runtime validation still checks ranges, IDs, UTF-8 and derived values. Use `new/2` for dynamically validated maps."},"source":{"line":134,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-window_input-0"},{"id":"t:tmux_model:window_link/0","publicId":"t:tmux_model:window_link/0","qualifiedName":"tmux_model:window_link/0","name":"window_link/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type window_link() :: #window_link{}.","params":[],"references":[{"start":23,"end":35,"target":"#tmux_model:window_link{}"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated window_link observation. Native records are experimental in OTP 29."},"source":{"line":110,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-window_link-0"},{"id":"t:tmux_model:window_link_input/0","publicId":"t:tmux_model:window_link_input/0","qualifiedName":"tmux_model:window_link_input/0","name":"window_link_input/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type window_link_input() ::\n #{session_id := session_id(),\n window_id := window_id(),\n index := non_neg_integer() | float(),\n active => boolean() | not_loaded | unavailable}.","params":[],"references":[{"start":55,"end":65,"target":"t:tmux_model:session_id/0"},{"start":94,"end":103,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":128,"end":143,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":148,"end":153,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":179,"end":186,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Trusted constructor fields for `window_link/1`. Required keys use :=; optional observations may be not_loaded or unavailable. Integral floats are normalized to integers. Runtime validation still checks ranges, IDs, UTF-8 and derived values. Use `new/2` for dynamically validated maps."},"source":{"line":149,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_model-window_link_input-0"},{"id":"#tmux_model:session{}","publicId":"#tmux_model:session{}","qualifiedName":"#tmux_model:session{}","name":"#session{}","namespace":"tmux_model","parent":"tmux_model","kind":"struct","modifiers":[],"signatures":[{"raw":"-record #session{id :: session_id(),\n name =\n not_loaded ::\n binary() |\n not_loaded | unavailable,\n attached_count =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n attached =\n not_loaded ::\n boolean() |\n not_loaded | unavailable,\n created =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n origin = none :: none | reference(),\n snapshot_id = none :: none | reference(),\n model_version = 2 :: pos_integer(),\n observation =\n none :: none | observation()}.","params":[],"references":[{"start":23,"end":33,"target":"t:tmux_model:session_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":121,"end":127,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":277,"end":292,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":436,"end":443,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":586,"end":601,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":698,"end":707,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":757,"end":766,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":808,"end":819,"target":"t:erlang:pos_integer/0"},{"start":890,"end":901,"target":"t:tmux_model:observation/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","source":{"line":48,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-session"},{"id":"#tmux_model:window{}","publicId":"#tmux_model:window{}","qualifiedName":"#tmux_model:window{}","name":"#window{}","namespace":"tmux_model","parent":"tmux_model","kind":"struct","modifiers":[],"signatures":[{"raw":"-record #window{id :: window_id(),\n name =\n not_loaded ::\n binary() | not_loaded | unavailable,\n width =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n height =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n pane_count =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n layout =\n not_loaded ::\n binary() | not_loaded | unavailable,\n origin = none :: none | reference(),\n snapshot_id = none :: none | reference(),\n model_version = 2 :: pos_integer(),\n observation = none :: none | observation()}.","params":[],"references":[{"start":22,"end":31,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":116,"end":122,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":235,"end":250,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":388,"end":403,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":545,"end":560,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":698,"end":704,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":775,"end":784,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":833,"end":842,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":883,"end":894,"target":"t:erlang:pos_integer/0"},{"start":943,"end":954,"target":"t:tmux_model:observation/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","source":{"line":60,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-window"},{"id":"#tmux_model:window_link{}","publicId":"#tmux_model:window_link{}","qualifiedName":"#tmux_model:window_link{}","name":"#window_link{}","namespace":"tmux_model","parent":"tmux_model","kind":"struct","modifiers":[],"signatures":[{"raw":"-record #window_link{session_id :: session_id(),\n window_id :: window_id(),\n index :: non_neg_integer(),\n active =\n not_loaded ::\n boolean() |\n not_loaded | unavailable,\n origin = none :: none | reference(),\n snapshot_id =\n none :: none | reference(),\n model_version = 2 :: pos_integer(),\n observation =\n none :: none | observation()}.","params":[],"references":[{"start":35,"end":45,"target":"t:tmux_model:session_id/0"},{"start":83,"end":92,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":126,"end":141,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":243,"end":250,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":355,"end":364,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":443,"end":452,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":498,"end":509,"target":"t:erlang:pos_integer/0"},{"start":588,"end":599,"target":"t:tmux_model:observation/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","source":{"line":73,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-window_link"},{"id":"#tmux_model:pane{}","publicId":"#tmux_model:pane{}","qualifiedName":"#tmux_model:pane{}","name":"#pane{}","namespace":"tmux_model","parent":"tmux_model","kind":"struct","modifiers":[],"signatures":[{"raw":"-record #pane{id :: pane_id(),\n window_id =\n not_loaded ::\n window_id() |\n not_loaded | unavailable,\n index =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n active =\n not_loaded ::\n boolean() | not_loaded | unavailable,\n current_command =\n not_loaded ::\n binary() | not_loaded | unavailable,\n current_path =\n not_loaded ::\n binary() | not_loaded | unavailable,\n width =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n height =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n pid =\n not_loaded ::\n pos_integer() |\n none | not_loaded | unavailable,\n title =\n not_loaded ::\n binary() | not_loaded | unavailable,\n dead =\n not_loaded ::\n boolean() | not_loaded | unavailable,\n exit_status =\n not_loaded ::\n integer() |\n none | not_loaded | unavailable,\n origin = none :: none | reference(),\n snapshot_id = none :: none | reference(),\n model_version = 2 :: pos_integer(),\n observation = none :: none | observation()}.","params":[],"references":[{"start":20,"end":27,"target":"t:tmux_model:pane_id/0"},{"start":111,"end":120,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":249,"end":264,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":394,"end":401,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":518,"end":524,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":638,"end":644,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":751,"end":766,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":896,"end":911,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":1038,"end":1049,"target":"t:erlang:pos_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":1185,"end":1191,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":1297,"end":1304,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":1417,"end":1424,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":1522,"end":1531,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":1578,"end":1587,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":1626,"end":1637,"target":"t:erlang:pos_integer/0"},{"start":1684,"end":1695,"target":"t:tmux_model:observation/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","source":{"line":84,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_model-pane"},{"id":"tmux_operation","publicId":"tmux_operation","qualifiedName":"tmux_operation","name":"tmux_operation","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Own a command independently of an individual wait.","body":"`start/3` submits a validated command through the endpoint's\nbounded admission. The initiating process owns it. `await/2`\ntiming out abandons only that wait; `cancel/1` or owner death\nretires the client and may leave an unknown tmux outcome. The endpoint\nacknowledges `transfer/2` after monitoring the new owner and\nbefore replying to the old owner. The new process does not perform a\nhandshake. Retired results expire after 60 seconds or earlier when the\nendpoint exceeds 64 retained results or 4 MiB of retained stdout/stderr\n(oldest evicted first). Closing the endpoint clears its operation results\nimmediately. Each operation accepts at most 16 concurrent waiters; excess\nwaits return too_many_waiters. `await_started/2` returns\nlifecycle status once the operation leaves queued; dispatch authorization does\nnot establish a tmux aftereffect.\n\nSee `t:completed/0` and `t:failure/0` for\ncommand outcomes and `t:state/0` for lifecycle status. The [job\nguide](jobs.md) shows the complete workflow. Bounded OTP Logger reports\ncorrelate outcomes by operation and endpoint generation; see\n[runtime diagnostics](diagnostics.md) for levels, fields and data boundaries."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_operation"},{"id":"tmux_operation:await/2","publicId":"tmux_operation:await/2","qualifiedName":"tmux_operation:await/2","name":"await/2","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"await(Operation, Timeout)\n-spec await(t(), timeout()) ->\n {ok, completed()} | {error, failure()}.","references":[{"start":38,"end":39,"target":"t:tmux_operation:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:timeout/0","project":"Erlang/OTP"},"start":43,"end":50,"target":"t:erlang:timeout/0"},{"start":77,"end":86,"target":"t:tmux_operation:completed/0"},{"start":100,"end":107,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Operation","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_operation:t/0"}]},{"name":"Timeout","type":"timeout()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:timeout/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:timeout/0"}]}],"returns":"{ok, completed()} | {error, failure()}","returnsReferences":[{"start":5,"end":14,"target":"t:tmux_operation:completed/0"},{"start":28,"end":35,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Wait for a retained result for at most Timeout. An await_timeout removes only this waiter; the operation continues and its handle remains usable. Additional waiters do not become owners. Results preserve outcome and cleanup certainty."},"source":{"line":89,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_operation-await-2"},{"id":"tmux_operation:await_started/2","publicId":"tmux_operation:await_started/2","qualifiedName":"tmux_operation:await_started/2","name":"await_started/2","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"await_started(Operation, Timeout)\n-spec await_started(t(), timeout()) ->\n {ok, state()} | {error, failure()}.","references":[{"start":54,"end":55,"target":"t:tmux_operation:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:timeout/0","project":"Erlang/OTP"},"start":59,"end":66,"target":"t:erlang:timeout/0"},{"start":101,"end":106,"target":"t:tmux_operation:state/0"},{"start":120,"end":127,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Operation","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_operation:t/0"}]},{"name":"Timeout","type":"timeout()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:timeout/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:timeout/0"}]}],"returns":"{ok, state()} | {error, failure()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_operation:state/0"},{"start":24,"end":31,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Wait until the operation leaves queued, returning its lifecycle state even if it has already failed or retired. Inspect outcome and cleanup; call `await/2` for final command data. Authorization is not proof of a tmux aftereffect. A timeout abandons this wait without cancelling the operation."},"source":{"line":98,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_operation-await_started-2"},{"id":"tmux_operation:cancel/1","publicId":"tmux_operation:cancel/1","qualifiedName":"tmux_operation:cancel/1","name":"cancel/1","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"cancel(Operation)\n-spec cancel(t()) ->\n {ok,\n cancelled_before_send | cancel_requested |\n already_completed} |\n {error, map()}.","references":[{"start":31,"end":32,"target":"t:tmux_operation:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":182,"end":185,"target":"t:erlang:map/0"}],"params":[{"name":"Operation","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_operation:t/0"}]}],"returns":"{ok,\n cancelled_before_send | cancel_requested |\n already_completed} |\n {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":109,"end":112,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Request cancellation using this handle. Any holder can cancel; only the owner can transfer ownership. Queued work can be cancelled before submission; possibly sent work retires its client and can retain an unknown tmux outcome. Use `await/2` for the result and cleanup proof. Never infer rollback or automatically retry a mutation from cancellation alone. already_completed means a response exists; it does not establish complete cleanup."},"source":{"line":117,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_operation-cancel-1"},{"id":"tmux_operation:start/3","publicId":"tmux_operation:start/3","qualifiedName":"tmux_operation:start/3","name":"start/3","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"start(Server, Command, Options)\n-spec start(tmux_server:t(),\n tmux_command:t(),\n tmux_server:command_options()) ->\n {ok, t()} | {error, failure()}.","references":[{"start":44,"end":57,"target":"t:tmux_server:t/0"},{"start":73,"end":87,"target":"t:tmux_command:t/0"},{"start":103,"end":130,"target":"t:tmux_server:command_options/0"},{"start":157,"end":158,"target":"t:tmux_operation:t/0"},{"start":172,"end":179,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Command","type":"tmux_command:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_command:t/0"}]},{"name":"Options","type":"tmux_server:command_options()","typeReferences":[{"start":0,"end":27,"target":"t:tmux_server:command_options/0"}]}],"returns":"{ok, t()} | {error, failure()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_operation:t/0"},{"start":20,"end":27,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Submit a validated command under the endpoint's admission limits and return an operation handle. The initiating process owns it. Submission is non-blocking with respect to command completion; the handle does not prove that tmux has executed the command."},"source":{"line":77,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_operation-start-3"},{"id":"tmux_operation:status/1","publicId":"tmux_operation:status/1","qualifiedName":"tmux_operation:status/1","name":"status/1","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"status(Operation)\n-spec status(t()) -> {ok, state()} | {error, failure()}.","references":[{"start":31,"end":32,"target":"t:tmux_operation:t/0"},{"start":44,"end":49,"target":"t:tmux_operation:state/0"},{"start":63,"end":70,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Operation","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_operation:t/0"}]}],"returns":"{ok, state()} | {error, failure()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_operation:state/0"},{"start":24,"end":31,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read the retained lifecycle state without starting a tmux command. Expired handles return operation_expired. Status is observation of the operation, not evidence that a possibly sent mutation was cancelled."},"source":{"line":106,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_operation-status-1"},{"id":"tmux_operation:transfer/2","publicId":"tmux_operation:transfer/2","qualifiedName":"tmux_operation:transfer/2","name":"transfer/2","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"transfer/2\n-spec transfer(t(), pid()) -> ok | {error, map()}.","references":[{"start":26,"end":27,"target":"t:tmux_operation:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pid/0","project":"Erlang/OTP"},"start":31,"end":34,"target":"t:erlang:pid/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":54,"end":57,"target":"t:erlang:map/0"}],"params":[{"name":"Operation","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_operation:t/0"}]},{"name":"Owner","type":"pid()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pid/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:pid/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Transfer ownership to a live process on this Erlang node. The endpoint installs its new owner monitor before releasing the previous monitor and returns after the swap. The new process performs no handshake. Waiters and ownership remain separate; endpoint ownership does not change.","body":"An `await_timeout` abandons the reply, not the queued ownership change. The\ntransfer may complete later. Use `status/1` to read the current owner before\nrelying on ownership; a timeout does not prove that the old owner remains."},"source":{"line":130,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_operation-transfer-2"},{"id":"t:tmux_operation:cleanup/0","publicId":"t:tmux_operation:cleanup/0","qualifiedName":"tmux_operation:cleanup/0","name":"cleanup/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type cleanup() :: complete | incomplete | unverified.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"complete proves owned client retirement; incomplete or unverified does not."},"source":{"line":36,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_operation-cleanup-0"},{"id":"t:tmux_operation:completed/0","publicId":"t:tmux_operation:completed/0","qualifiedName":"tmux_operation:completed/0","name":"completed/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type completed() ::\n #{stdout := binary(),\n stderr := binary(),\n exit_status := 0,\n stdin_delivered := non_neg_integer(),\n outcome := success,\n cleanup := complete}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":43,"end":49,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":75,"end":81,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":146,"end":161,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A successful command result. stdout and stderr are separate byte strings; exit_status is zero. stdin_delivered counts bytes accepted by the client pipe, not bytes consumed by tmux. success does not prove a background aftereffect."},"source":{"line":42,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_operation-completed-0"},{"id":"t:tmux_operation:failure/0","publicId":"t:tmux_operation:failure/0","qualifiedName":"tmux_operation:failure/0","name":"failure/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type failure() ::\n #{code := atom(),\n outcome => outcome(),\n cleanup => cleanup(),\n stdout => binary(),\n stderr => binary(),\n stdin_delivered => non_neg_integer(),\n exit_status => integer(),\n submitted => boolean(),\n atom() => term()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":39,"end":43,"target":"t:erlang:atom/0"},{"start":70,"end":77,"target":"t:tmux_operation:outcome/0"},{"start":104,"end":111,"target":"t:tmux_operation:cleanup/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":137,"end":143,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":169,"end":175,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":210,"end":225,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":256,"end":263,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":292,"end":299,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":315,"end":319,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":325,"end":329,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A tagged error detail with a stable code and optional certainty/output data. Validation, admission and wait errors may contain only code. Command failures retain available stdout/stderr, stdin_delivered and exit_status. Other keys provide code-specific context. Never infer missing certainty fields.","body":"Common codes are busy, invalid_operation_options, command_error, deadline,\ncancelled, stale_server, cleanup_incomplete, await_timeout and\noperation_expired. command_error means a nonzero client exit; it does not roll\nback a mutation. await_timeout abandons only this wait. operation_expired\ncannot reconstruct a previous result or establish its remote outcome."},"source":{"line":56,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_operation-failure-0"},{"id":"t:tmux_operation:outcome/0","publicId":"t:tmux_operation:outcome/0","qualifiedName":"tmux_operation:outcome/0","name":"outcome/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type outcome() ::\n success | error | not_started |\n cancelled_before_send | unknown.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Command certainty, separate from resource cleanup. unknown must not trigger an automatic mutation retry."},"source":{"line":34,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_operation-outcome-0"},{"id":"t:tmux_operation:state/0","publicId":"t:tmux_operation:state/0","qualifiedName":"tmux_operation:state/0","name":"state/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type state() ::\n #{phase := queued | sent | responded | retired,\n stage :=\n pending | waiting | preflight | command,\n owner := pid(),\n outcome := pending | outcome(),\n cleanup := pending | cleanup()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pid/0","project":"Erlang/OTP"},"start":174,"end":177,"target":"t:erlang:pid/0"},{"start":214,"end":221,"target":"t:tmux_operation:outcome/0"},{"start":258,"end":265,"target":"t:tmux_operation:cleanup/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Observed lifecycle state, without command output. queued includes admission and identity preflight; sent means dispatch authorization, not a proven aftereffect. responded can retain incomplete cleanup; retired releases operation resources. pending certainty means no result yet. The owner is the initiating or transferred process; holding a waiter handle does not change it."},"source":{"line":66,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_operation-state-0"},{"id":"t:tmux_operation:t/0","publicId":"t:tmux_operation:t/0","qualifiedName":"tmux_operation:t/0","name":"t/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A generation-bound operation handle. Possessing a waiter handle does not transfer ownership."},"source":{"line":31,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_operation-t-0"},{"id":"tmux_option","publicId":"tmux_option","qualifiedName":"tmux_option","name":"tmux_option","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Read and change explicit tmux option tables through registered references.","body":"Session, physical window and pane records from `m:tmux_model` select their\nlocal tables. Global tables use {server, Server}, {session_defaults, Server}\nor {window_defaults, Server}. Built-in canonical names and scopes are checked\nagainst pinned source metadata; tmux otherwise lets a name override the\nsupplied scope flags. `m:tmux_hook` owns hook registration and execution;\nhooks are rejected here. Prefixes and aliases are rejected.\n\n`get/3` requires an explicit options map. Local-only reads are the\ndefault; inherit = true follows tmux's table parents (pane -> window -> window\ndefaults, or session -> session defaults). Server options have no parent. A\nmissing local value or array entry returns none; an empty binary or empty\narray is a value. Arrays return maps of indexes to binary values, preserving\nsparse indexes. There is no hidden capture refresh or cache of option values.\n`get_many/3` reads the same scalar key from up to seven local rows through one\nbounded native sequence, retaining local-only semantics by default.\n\nValues are NUL-free binary tmux text bytes, including non-UTF-8 bytes. No\nshell or format expansion is applied by this API. tmux still interprets a\nbuilt-in option according to its type: formats, shell commands and command\noptions may execute later when tmux uses them. This API is for trusted\napplication code. Numeric and flag values are canonical binary text on reads,\nnot Erlang numbers.\n\nBuilt-in metadata covers every released version in the supported tmux\n3.3a–3.8 range, including exact patch letters. Tracking and unknown versions\nfail closed. User options beginning @ do not need a built-in\ncatalogue. The raw `tmux_command:raw/2` remains available for deliberate\nnewer-server integration. All mutations are one-shot I/O with observed\nidentity checks, not transactions. Timeouts can leave an unknown remote\noutcome; mutations are never retried here. See the [scoped options\nguide](options.md) for ownership and inheritance."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_option"},{"id":"tmux_option:catalogue/1","publicId":"tmux_option:catalogue/1","qualifiedName":"tmux_option:catalogue/1","name":"catalogue/1","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"catalogue(Version)\n-spec catalogue(tmux_version:t()) ->\n {ok, #{binary() => metadata()}} |\n {error, map()}.","references":[{"start":35,"end":49,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":82,"end":88,"target":"t:erlang:binary/0"},{"start":94,"end":102,"target":"t:tmux_option:metadata/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":136,"end":139,"target":"t:erlang:map/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]}],"returns":"{ok, #{binary() => metadata()}} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":7,"end":13,"target":"t:erlang:binary/0"},{"start":19,"end":27,"target":"t:tmux_option:metadata/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":42,"end":45,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return all canonical built-in option and hook metadata for one exact parsed version, without I/O. Catalogues cover every release from 3.3a through 3.8; historical 3.3 metadata remains available for source discovery. The generated reference records each release's source commit and file digests."},"source":{"line":89,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_option-catalogue-1"},{"id":"tmux_option:describe/2","publicId":"tmux_option:describe/2","qualifiedName":"tmux_option:describe/2","name":"describe/2","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"describe(Version, Name)\n-spec describe(tmux_version:t(), binary()) ->\n {ok, metadata()} | {error, map()}.","references":[{"start":39,"end":53,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":57,"end":63,"target":"t:erlang:binary/0"},{"start":93,"end":101,"target":"t:tmux_option:metadata/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":115,"end":118,"target":"t:erlang:map/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, metadata()} | {error, map()}","returnsReferences":[{"start":5,"end":13,"target":"t:tmux_option:metadata/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":27,"end":30,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return source metadata for a canonical built-in name and a parsed daemon version, without I/O. Unknown names, unavailable names, tracking builds and uncatalogued versions have distinct errors. The catalogue describes scopes and parser types; it does not qualify runtime behavior or authorize hook execution.","examples":[{"lang":"erlang","code":"1> {ok, V} = tmux_version:parse(<<\"tmux 3.3a\">>), ok.\nok\n2> {ok, M} = tmux_option:describe(V, <<\"exit-empty\">>), ok.\nok\n3> maps:get(scopes, M).\n[server]"}]},"source":{"line":73,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_option-describe-2"},{"id":"tmux_option:get/3","publicId":"tmux_option:get/3","qualifiedName":"tmux_option:get/3","name":"get/3","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"get(Scope, Key, Options)\n-spec get(scope(), key(), read_options()) ->\n {ok, value()} | none | {error, map()}.","references":[{"start":35,"end":40,"target":"t:tmux_option:scope/0"},{"start":44,"end":47,"target":"t:tmux_option:key/0"},{"start":51,"end":63,"target":"t:tmux_option:read_options/0"},{"start":88,"end":93,"target":"t:tmux_option:value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":114,"end":117,"target":"t:erlang:map/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_option:scope/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_option:key/0"}]},{"name":"Options","type":"read_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_option:read_options/0"}]}],"returns":"{ok, value()} | none | {error, map()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_option:value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":31,"end":34,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read one option or array, performing I/O after validation. Missing local values and array entries return none; known empty strings and arrays return {ok, Value}. inherit = true reads through tmux's parent tables. Unknown fields are rejected. Errors retain backend diagnostics; a missing target never becomes absence. Use `set/4` to write a value and `unset/2` to restore inheritance."},"source":{"line":105,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_option-get-3"},{"id":"tmux_option:get_many/3","publicId":"tmux_option:get_many/3","qualifiedName":"tmux_option:get_many/3","name":"get_many/3","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"get_many(Scopes, Name, Options)\n-spec get_many([tmux_model:session() |\n tmux_model:window() |\n tmux_model:pane(),\n ...],\n binary(),\n read_options()) ->\n {ok, [binary() | none]} | {error, map()}.","references":[{"start":48,"end":66,"target":"t:tmux_model:session/0"},{"start":87,"end":104,"target":"t:tmux_model:window/0"},{"start":125,"end":140,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":181,"end":187,"target":"t:erlang:binary/0"},{"start":206,"end":218,"target":"t:tmux_option:read_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":249,"end":255,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":277,"end":280,"target":"t:erlang:map/0"}],"params":[{"name":"Scopes","type":"[tmux_model:session() |\n tmux_model:window() |\n tmux_model:pane(),\n ...]","typeReferences":[{"start":1,"end":19,"target":"t:tmux_model:session/0"},{"start":35,"end":52,"target":"t:tmux_model:window/0"},{"start":68,"end":83,"target":"t:tmux_model:pane/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Options","type":"read_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_option:read_options/0"}]}],"returns":"{ok, [binary() | none]} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":6,"end":12,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":34,"end":37,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read one scalar option from one to seven local rows on the same registered endpoint. Performs one bounded native sequence after validating every scope. Results follow input order; each entry is binary text or none for a missing local value. `t:read_options/0` controls inheritance as in `get/3`.","body":"Names use ASCII letters, digits, dots, underscores and hyphens, with an\noptional leading @ for user options. Global tables, arrays, indexed keys,\nhooks and command options are unsupported. Use `get/3` for broader option\nreads and `tmux_hook:get/3` for hooks.\nInvalid scopes, unsupported keys and different owners fail before dispatch.\n\nEach read is bracketed by matching native target-ID observations. Unresolved\nor mismatched IDs reject the batch. The checks do not prove topology membership\nor completed destruction: older tmux may retain an unlinked pane through\nqueued references. The sequence provides interval observations and the same\nserver-incarnation guarantee as `get/3`. Ambient command configuration applies\nto both paths.\n\nStdout is bounded to 1 MiB and stderr to 64 KiB for the whole sequence, with\nthe endpoint's 2500 ms command deadline. Seven 32 KiB values fit even under\nthe qualified worst-case native quoting expansion. Larger external values\nmay exceed that aggregate output bound. Any command, framing or decoding\nfailure rejects the entire result, retaining native outcome and cleanup\nevidence. There is no partial-success result, hidden refresh or value cache."},"source":{"line":145,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_option-get_many-3"},{"id":"tmux_option:set/3","publicId":"tmux_option:set/3","qualifiedName":"tmux_option:set/3","name":"set/3","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"set(Scope, Key, Value)\n-spec set(scope(), key(), binary()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":33,"end":38,"target":"t:tmux_option:scope/0"},{"start":42,"end":45,"target":"t:tmux_option:key/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":49,"end":55,"target":"t:erlang:binary/0"},{"start":80,"end":104,"target":"t:tmux_operation:completed/0"},{"start":131,"end":153,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_option:scope/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_option:key/0"}]},{"name":"Value","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Set one scalar or indexed array entry with default write options. Performs I/O; see `set/4` for append, only-if-unset, parsing and unknown-outcome semantics."},"source":{"line":164,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_option-set-3"},{"id":"tmux_option:set/4","publicId":"tmux_option:set/4","qualifiedName":"tmux_option:set/4","name":"set/4","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"set(Scope, Key, Value, Options)\n-spec set(scope(), key(), binary(), write_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":42,"end":47,"target":"t:tmux_option:scope/0"},{"start":51,"end":54,"target":"t:tmux_option:key/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":58,"end":64,"target":"t:erlang:binary/0"},{"start":68,"end":81,"target":"t:tmux_option:write_options/0"},{"start":106,"end":130,"target":"t:tmux_operation:completed/0"},{"start":157,"end":179,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_option:scope/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_option:key/0"}]},{"name":"Value","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Options","type":"write_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_option:write_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Set a literal binary value, after scope/version/owner validation. Array writes require {Name, Index}; this avoids tmux's whole-array separator grammar. append uses tmux's type-specific -a semantics. only_if_unset checks the local table; already-set is a backend error, with no suppressed errors or compare-and-swap guarantee. Values must be supplied explicitly; an empty flag value retains tmux's native toggle behavior. A successful result proves command completion, not later effects of a stored command or format. Performs I/O; never retries."},"source":{"line":178,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_option-set-4"},{"id":"tmux_option:unset/2","publicId":"tmux_option:unset/2","qualifiedName":"tmux_option:unset/2","name":"unset/2","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"unset(Scope, Key)\n-spec unset(scope(), key()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":30,"end":35,"target":"t:tmux_option:scope/0"},{"start":39,"end":42,"target":"t:tmux_option:key/0"},{"start":69,"end":93,"target":"t:tmux_operation:completed/0"},{"start":122,"end":144,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_option:scope/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_option:key/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove a local option or one indexed entry. Removing a local option restores inheritance; removing an entry leaves a local array, possibly empty. Unsetting a global built-in resets tmux's default; user options are removed. Missing local values are a successful tmux no-op. No pane-wide -U action is implied. Performs I/O and returns the command result without refreshing captured rows."},"source":{"line":198,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_option-unset-2"},{"id":"t:tmux_option:key/0","publicId":"t:tmux_option:key/0","qualifiedName":"tmux_option:key/0","name":"key/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type key() :: binary() | {binary(), non_neg_integer()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":15,"end":21,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":37,"end":52,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Canonical binary name; arrays use a structured non-negative index, never bracket syntax."},"source":{"line":44,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_option-key-0"},{"id":"t:tmux_option:metadata/0","publicId":"t:tmux_option:metadata/0","qualifiedName":"tmux_option:metadata/0","name":"metadata/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type metadata() ::\n #{scopes := [server | session | window | pane],\n type :=\n choice | colour | command | flag | key |\n number | string,\n array := boolean(),\n hook := boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":209,"end":216,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":240,"end":247,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Source-derived scope, parser type, array and executable-hook metadata."},"source":{"line":46,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_option-metadata-0"},{"id":"t:tmux_option:read_options/0","publicId":"t:tmux_option:read_options/0","qualifiedName":"tmux_option:read_options/0","name":"read_options/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type read_options() :: #{inherit => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":37,"end":44,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Local-only unless inherit is true. Unknown options and non-Booleans are errors."},"source":{"line":50,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_option-read_options-0"},{"id":"t:tmux_option:scope/0","publicId":"t:tmux_option:scope/0","qualifiedName":"tmux_option:scope/0","name":"scope/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type scope() ::\n tmux_model:session() |\n tmux_model:window() |\n tmux_model:pane() |\n {server | session_defaults | window_defaults,\n tmux_server:t()}.","params":[],"references":[{"start":27,"end":45,"target":"t:tmux_model:session/0"},{"start":60,"end":77,"target":"t:tmux_model:window/0"},{"start":92,"end":107,"target":"t:tmux_model:pane/0"},{"start":179,"end":192,"target":"t:tmux_server:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A registered local entity or an explicitly selected global option table."},"source":{"line":41,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_option-scope-0"},{"id":"t:tmux_option:value/0","publicId":"t:tmux_option:value/0","qualifiedName":"tmux_option:value/0","name":"value/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type value() ::\n binary() | #{non_neg_integer() => binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":40,"end":55,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":61,"end":67,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Canonical tmux text bytes for a scalar/entry, or a sparse map for a whole array."},"source":{"line":54,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_option-value-0"},{"id":"t:tmux_option:write_options/0","publicId":"t:tmux_option:write_options/0","qualifiedName":"tmux_option:write_options/0","name":"write_options/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type write_options() ::\n #{append => boolean(),\n only_if_unset => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":47,"end":54,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":87,"end":94,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"append maps to -a; only_if_unset maps to -o and reports already-set errors. Both default false."},"source":{"line":52,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_option-write_options-0"},{"id":"tmux_pane","publicId":"tmux_pane","qualifiedName":"tmux_pane","name":"tmux_pane","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Create, observe and rearrange panes using registered physical IDs.","body":"`split/2` accepts a pane or a window; a window means its active pane\nat execution. Options (`t:split_options/0`) are direction\n(horizontal or vertical), size ({cells, N} or {percent, N}), before,\nfull_size, zoom, cwd, env, launch and detach. It defaults to a detached\nvertical split. `get/2` returns newly observed fields; existing rows\nremain unchanged. Reads span several commands and do not claim atomicity.\nLaunch and environment options follow `tmux_session:create/2`. An absent or\nzero tmux pane_pid is represented as none. A captured positive PID is an\nobservation, not a guarantee that the process remains alive.\n\nA successful split followed by a failed observation retains the completed\nmutation and command result in its error. `kill/1` returns the\ncommand result. Detached or stale references cannot act. `resize_command/2`\nbuilds a reusable value without tmux I/O; the other calls perform I/O after\nvalidation.\n\n`send_text/2` sends up to 2,000 literal bytes, including NUL, in one\ncommand using tmux's hexadecimal key form. It adds no Enter key and never\nsplits a large input into partially applied commands. `send_keys/2`\naccepts up to 256 named keys, single UTF-8 characters, {function, 1..12} and\n{control, <>}. Named keys are enter, tab, escape, backspace, space,\nup, down, left, right, home, 'end', insert, delete, page_up, page_down and\nback_tab. Terminal modes still govern how input is consumed; command\ncompletion does not mean a program processed it.\n\n`capture/2` returns stdout bytes unchanged, including final\nnewlines. Options (`t:capture_options/0`) are start and 'end' (line\nintegers or all), join_lines, escape_sequences, escape_control,\nretain_trailing_spaces, alternate, pending and quiet. Defaults are tmux's\ncurrent-screen capture without escapes, joined wraps or padding. The\nendpoint's output limit applies; an oversized capture returns an error.\n\nUse `join/3`, `move/3` and `swap/3` to rearrange existing panes without\nrespawning their processes. `break/4` takes an explicit source window link:\nbreaking a window's only pane moves that membership, while breaking one of\nseveral panes creates a new physical window. The [topology guide](panes.md)\nshows the distinction. Use `get/2` or a new snapshot for updated parents and\nindexes; actions leave captured values unchanged.\n\n`pipe/3` connects a tmux-owned shell process to pane output, input or both.\nIt protects the shell text from tmux hash/strftime expansion; shell quoting\nremains the caller's responsibility. `stop_pipe/1` closes that native pipe.\nThese actions do not create an Erlang output subscription or transfer process\nownership to the endpoint. Use an application acknowledgement for consumer\nreadiness, delivered bytes and job completion."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane"},{"id":"tmux_pane:break/4","publicId":"tmux_pane:break/4","qualifiedName":"tmux_pane:break/4","name":"break/4","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"break(Pane, SourceLink, Session, Options)\n-spec break(tmux_model:pane(),\n tmux_model:window_link(),\n tmux_model:session(),\n break_options()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":54,"end":69,"target":"t:tmux_model:pane/0"},{"start":85,"end":107,"target":"t:tmux_model:window_link/0"},{"start":123,"end":141,"target":"t:tmux_model:session/0"},{"start":157,"end":170,"target":"t:tmux_pane:break_options/0"},{"start":197,"end":221,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":250,"end":253,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"SourceLink","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Options","type":"break_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_pane:break_options/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Break a physical pane through its explicit source membership into a destination session/index. Source, link and session must have the same registered owner. The source link's expected window and the pane's observed parent are checked before dispatch. The source selector also includes the stable pane ID, never its positional index. Preflight and action are not atomic.","body":"With multiple panes, tmux creates a new physical window. With only one pane,\nit moves the selected source membership, preserving the existing window and\nits other links. Moving the final membership out can remove the source session.\nPane IDs and processes remain; indexes and option inheritance can change.\nname is a literal UTF-8 argument, subject to native name cleaning.\nAn occupied destination index is refused. detach defaults true; false selects\nthe destination membership. Session groups retain native synchronization.\n\nReturns the command result consistently for both cases. Use `get/2` or\n`tmux_window_link:get/3` for fresh observations. Even an eventual native error\ncan unzoom a window; this is not a transaction and is never retried."},"source":{"line":211,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-break-4"},{"id":"tmux_pane:capture/2","publicId":"tmux_pane:capture/2","qualifiedName":"tmux_pane:capture/2","name":"capture/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"capture(Pane, Options)\n-spec capture(tmux_model:pane(), capture_options()) ->\n {ok, binary()} | {error, map()}.","references":[{"start":37,"end":52,"target":"t:tmux_model:pane/0"},{"start":56,"end":71,"target":"t:tmux_pane:capture_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":100,"end":106,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":120,"end":123,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"capture_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_pane:capture_options/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture terminal bytes, preserving final newlines. Options select line range, joined wraps, escapes, alternate screen and padding; defaults follow tmux current-screen capture. Performs I/O and returns an explicit output-limit error instead of silently truncating."},"source":{"line":414,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-capture-2"},{"id":"tmux_pane:get/2","publicId":"tmux_pane:get/2","qualifiedName":"tmux_pane:get/2","name":"get/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"get(Server, Id)\n-spec get(tmux_server:t(), tmux_model:pane_id()) ->\n {ok, tmux_model:pane()} | {error, map()}.","references":[{"start":26,"end":39,"target":"t:tmux_server:t/0"},{"start":43,"end":61,"target":"t:tmux_model:pane_id/0"},{"start":86,"end":101,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":115,"end":118,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Id","type":"tmux_model:pane_id()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:pane_id/0"}]}],"returns":"{ok, tmux_model:pane()} | {error, map()}","returnsReferences":[{"start":5,"end":20,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":34,"end":37,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read fresh fields for a physical pane ID. Performs I/O and returns target_gone for a vanished pane. A captured PID remains an observation, not a live-process guarantee."},"source":{"line":127,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-get-2"},{"id":"tmux_pane:join/3","publicId":"tmux_pane:join/3","qualifiedName":"tmux_pane:join/3","name":"join/3","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"join(Source, Destination, Options)\n-spec join(tmux_model:pane(),\n tmux_model:pane(),\n join_options()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":46,"end":61,"target":"t:tmux_model:pane/0"},{"start":76,"end":91,"target":"t:tmux_model:pane/0"},{"start":106,"end":118,"target":"t:tmux_pane:join_options/0"},{"start":144,"end":168,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":196,"end":199,"target":"t:erlang:map/0"}],"params":[{"name":"Source","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Destination","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"join_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_pane:join_options/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Move a source pane into a split beside the destination pane. Both physical IDs must belong to the same registered owner and must differ. Geometry follows `t:join_options/0`. Existing processes and pane IDs survive; dimensions, indexes and inherited window options can change. Removing a window's last pane destroys that physical window and its links, and can remove sessions.","body":"Default detach true avoids selecting the resolved destination session; false\nuses tmux's resolved session context for the destination pane. Shared physical\nwindows affect all their memberships. Returns the command result without\nrefreshing either row. Use `get/2` for current fields. No retry is performed."},"source":{"line":236,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-join-3"},{"id":"tmux_pane:kill/1","publicId":"tmux_pane:kill/1","qualifiedName":"tmux_pane:kill/1","name":"kill/1","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"kill(Pane)\n-spec kill(tmux_model:pane()) ->\n {ok, map()} | {error, map()}.","references":[{"start":22,"end":37,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":63,"end":66,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":80,"end":83,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Destroy this registered pane. Performs I/O after validating its origin and stable ID; it never falls back to a positional target."},"source":{"line":134,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-kill-1"},{"id":"tmux_pane:move/3","publicId":"tmux_pane:move/3","qualifiedName":"tmux_pane:move/3","name":"move/3","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"move(Source, Destination, Options)\n-spec move(tmux_model:pane(),\n tmux_model:pane(),\n join_options()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":46,"end":61,"target":"t:tmux_model:pane/0"},{"start":76,"end":91,"target":"t:tmux_model:pane/0"},{"start":106,"end":118,"target":"t:tmux_pane:join_options/0"},{"start":144,"end":168,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":196,"end":199,"target":"t:erlang:map/0"}],"params":[{"name":"Source","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Destination","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"join_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_pane:join_options/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Rearrange a source pane beside the destination, including within one window. Uses native move-pane, whose placement and lifetime behavior follow `join/3`. Both calls use explicit physical IDs and leave captured rows unchanged."},"source":{"line":245,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-move-3"},{"id":"tmux_pane:pipe/3","publicId":"tmux_pane:pipe/3","qualifiedName":"tmux_pane:pipe/3","name":"pipe/3","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"pipe/3\n-spec pipe(tmux_model:pane(),\n pipe_command(),\n pipe_options()) ->\n {ok, map()} | {error, map()}.","references":[{"start":18,"end":33,"target":"t:tmux_model:pane/0"},{"start":48,"end":60,"target":"t:tmux_pane:pipe_command/0"},{"start":75,"end":87,"target":"t:tmux_pane:pipe_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":113,"end":116,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":130,"end":133,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Command","type":"pipe_command()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_pane:pipe_command/0"}]},{"name":"Options","type":"pipe_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_pane:pipe_options/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Connect a shell process to this registered physical pane, performing I/O. An explicit nonempty `#{shell => Command}` is required (`t:pipe_command/0`). tmux hash formats and strftime directives are escaped so the shell receives the supplied text. This does not quote values interpolated into shell code; the caller owns that quoting. Executable argv is not accepted by this shell-only native command. Encoding follows `tmux_command:literal_format/2` in time mode. A percent-bearing command above its native 8191-byte intermediate limit returns `format_limit` before dispatch, preserving any existing pipe.","body":"`direction` (`t:pipe_options/0`) is `output` (default: pane output to child\nstdin), `input` (child stdout to pane input) or `both`. `toggle` defaults false,\nreplacing any existing pipe. True maps to native `-o`: close an existing pipe without\nstarting another, or open one when none exists. A stopped pipe and replacement\ncan discard pending output. Await consumer acknowledgements before closing\nif delivered bytes matter. This is a live PTY byte stream, not rendered\ncapture text or replay of terminal history; terminal modes affect its bytes.\n\nThe child is started by tmux through `/bin/sh -c`. Its stderr is discarded;\nunused directions are routed to the native null device. No pane cwd or\nenvironment copying is promised. A successful command result does not prove\nexec success, readiness, delivery or child exit. The process is tmux-owned;\n`tmux_server:close/1` preserves the borrowed pane and its pipe. This is not an\nErlang subscription with library flow control. Use `stop_pipe/1` to close the\npipe; stopping is not process cancellation or a wait for job completion."},"source":{"line":165,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-pipe-3"},{"id":"tmux_pane:resize/2","publicId":"tmux_pane:resize/2","qualifiedName":"tmux_pane:resize/2","name":"resize/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"resize(Pane, Options)\n-spec resize(tmux_model:pane(), resize_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":35,"end":50,"target":"t:tmux_model:pane/0"},{"start":54,"end":68,"target":"t:tmux_pane:resize_options/0"},{"start":96,"end":120,"target":"t:tmux_operation:completed/0"},{"start":150,"end":172,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"resize_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_pane:resize_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Request an absolute width, height or both for this registered physical pane. Performs I/O after validating dimensions and origin. tmux can clamp the request to its layout constraints and can resize neighboring panes. Resizing a tiled pane unzooms its window. Use `get/2` for actual dimensions; the input row is unchanged. The accepted library range is not a promise that every server accepts every dimension: tmux versions can impose tighter limits and return a command error.","body":"An empty request is rejected before dispatch:","examples":[{"lang":"erlang","code":"1> tmux_pane:resize(invalid_row, #{}).\n{error,#{code => empty_resize}}"}]},"source":{"line":317,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-resize-2"},{"id":"tmux_pane:resize_command/2","publicId":"tmux_pane:resize_command/2","qualifiedName":"tmux_pane:resize_command/2","name":"resize_command/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"resize_command(Pane, Options)\n-spec resize_command(tmux_model:pane(), resize_options()) ->\n {ok, tmux_command:t()} |\n {error, map()}.","references":[{"start":51,"end":66,"target":"t:tmux_model:pane/0"},{"start":70,"end":84,"target":"t:tmux_pane:resize_options/0"},{"start":120,"end":134,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":172,"end":175,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"resize_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_pane:resize_options/0"}]}],"returns":"{ok, tmux_command:t()} | {error, map()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":33,"end":36,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Build a resize command without tmux I/O. Uses the dimensions and validation rules of `resize/2`, preserving the row's captured origin and stable pane ID. Endpoint liveness and native layout constraints are checked during execution. Submit through `tmux_server:command/3` or `tmux_operation:start/3`.","examples":[{"lang":"erlang","code":"1> tmux_pane:resize_command(invalid_row, #{}).\n{error,#{code => empty_resize}}"}]},"source":{"line":335,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-resize_command-2"},{"id":"tmux_pane:respawn/2","publicId":"tmux_pane:respawn/2","qualifiedName":"tmux_pane:respawn/2","name":"respawn/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"respawn(Pane, Options)\n-spec respawn(tmux_model:pane(), respawn_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":37,"end":52,"target":"t:tmux_model:pane/0"},{"start":56,"end":71,"target":"t:tmux_pane:respawn_options/0"},{"start":100,"end":124,"target":"t:tmux_operation:completed/0"},{"start":155,"end":177,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"respawn_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_pane:respawn_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Respawn this registered physical pane, keeping its pane ID. force defaults false and a running pane normally returns command_error. force = true lets tmux close its existing PTY before spawning again. This acknowledges the tmux command, not former-job termination or successful application initialization. The old PTY can already be closed if a later spawn step fails.","body":"launch defaults to previous, reusing tmux's saved argv or shell. An explicit\nargv or shell map replaces that command. default_shell is invalid here because\nabsent respawn arguments mean saved-command reuse. Omitted cwd retains the\nsaved launch directory, rather than the program's current directory. env\naugments the session environment tmux resolves for this physical pane; a\ncaptured membership does not pin that context. Prior per-spawn overrides are\nnot automatically reapplied. Other launch rules follow\n`tmux_session:create/2`.\n\nPerforms I/O after validation. Existing rows retain their observations; use\n`get/2` and an application readiness condition to inspect the new process. An\nuncertain result is not permission to replay this mutation automatically.\n\nUnsupported launch modes fail before dispatch:","examples":[{"lang":"erlang","code":"1> tmux_pane:respawn(invalid_row, #{launch => default_shell}).\n{error,#{code => invalid_launch}}"}]},"source":{"line":373,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-respawn-2"},{"id":"tmux_pane:send_keys/2","publicId":"tmux_pane:send_keys/2","qualifiedName":"tmux_pane:send_keys/2","name":"send_keys/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"send_keys(Pane, Keys)\n-spec send_keys(tmux_model:pane(), [key()]) ->\n {ok, map()} | {error, map()}.","references":[{"start":38,"end":53,"target":"t:tmux_model:pane/0"},{"start":58,"end":61,"target":"t:tmux_pane:key/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":93,"end":96,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":110,"end":113,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Keys","type":"[key()]","typeReferences":[{"start":1,"end":4,"target":"t:tmux_pane:key/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Send at most 256 validated key tokens. Named keys, single UTF-8 characters, function keys and control-letter tuples are supported. Performs I/O; terminal modes determine the resulting input bytes. Use `send_text/2` for arbitrary bytes."},"source":{"line":401,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-send_keys-2"},{"id":"tmux_pane:send_text/2","publicId":"tmux_pane:send_text/2","qualifiedName":"tmux_pane:send_text/2","name":"send_text/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"send_text/2\n-spec send_text(tmux_model:pane(), binary()) ->\n {ok, map()} | {error, map()}.","references":[{"start":28,"end":43,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":47,"end":53,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":84,"end":87,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":101,"end":104,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Bytes","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Send at most 2,000 literal bytes as hexadecimal tmux keys. Adds no Enter key and does not invoke a shell. Performs I/O in one command; oversized input is rejected before partial submission. Completion does not prove that a terminal program processed the input."},"source":{"line":388,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-send_text-2"},{"id":"tmux_pane:split/2","publicId":"tmux_pane:split/2","qualifiedName":"tmux_pane:split/2","name":"split/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"split(Row, Options)\n-spec split(tmux_model:pane() | tmux_model:window(),\n split_options()) ->\n {ok, tmux_model:pane()} | {error, map()}.","references":[{"start":32,"end":47,"target":"t:tmux_model:pane/0"},{"start":52,"end":69,"target":"t:tmux_model:window/0"},{"start":85,"end":98,"target":"t:tmux_pane:split_options/0"},{"start":125,"end":140,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":154,"end":157,"target":"t:erlang:map/0"}],"params":[{"name":"Row","type":"tmux_model:pane() | tmux_model:window()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"},{"start":20,"end":37,"target":"t:tmux_model:window/0"}]},{"name":"Options","type":"split_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_pane:split_options/0"}]}],"returns":"{ok, tmux_model:pane()} | {error, map()}","returnsReferences":[{"start":5,"end":20,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":34,"end":37,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Split a pane, or the supplied window's active pane, and observe the new pane. Defaults to a detached vertical split. Options and launch semantics are described in the module docs. Performs I/O; a post-creation read error retains the completed mutation rather than pretending that no pane was created."},"source":{"line":109,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-split-2"},{"id":"tmux_pane:stop_pipe/1","publicId":"tmux_pane:stop_pipe/1","qualifiedName":"tmux_pane:stop_pipe/1","name":"stop_pipe/1","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"stop_pipe(Pane)\n-spec stop_pipe(tmux_model:pane()) ->\n {ok, map()} | {error, map()}.","references":[{"start":32,"end":47,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":78,"end":81,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":95,"end":98,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Close this registered pane's native pipe, performing I/O. On a live pane, closing an already closed pipe succeeds. An exited pane can produce a native command error; a vanished ID returns `target_gone`.","body":"Closing can discard pending bytes. It neither kills nor waits for an arbitrary\nshell job started by `pipe/3`; applications must verify consumption and\nprocess completion themselves. The endpoint does not own that shell process."},"source":{"line":188,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-stop_pipe-1"},{"id":"tmux_pane:swap/3","publicId":"tmux_pane:swap/3","qualifiedName":"tmux_pane:swap/3","name":"swap/3","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"swap(Source, Destination, Options)\n-spec swap(tmux_model:pane(),\n tmux_model:pane(),\n swap_options()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":46,"end":61,"target":"t:tmux_model:pane/0"},{"start":76,"end":91,"target":"t:tmux_model:pane/0"},{"start":106,"end":118,"target":"t:tmux_pane:swap_options/0"},{"start":144,"end":168,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":196,"end":199,"target":"t:erlang:map/0"}],"params":[{"name":"Source","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Destination","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"swap_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_pane:swap_options/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Exchange two panes' layout positions within or across physical windows. Preserves their IDs and processes; parent windows, dimensions, indexes and inherited options can change. Both rows require the same registered owner. detach defaults true; active positions can still receive different panes. zoom maps to native -Z. Identical IDs do not exchange panes, but native zoom handling still runs; the default can unzoom even a same-pane swap. Returns the command result; `get/2` observes the resulting values explicitly."},"source":{"line":258,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_pane-swap-3"},{"id":"t:tmux_pane:break_options/0","publicId":"t:tmux_pane:break_options/0","qualifiedName":"tmux_pane:break_options/0","name":"break_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type break_options() ::\n #{index := tmux_window_link:index(),\n name => binary(),\n detach => boolean()}.","params":[],"references":[{"start":46,"end":68,"target":"t:tmux_window_link:index/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":92,"end":98,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":124,"end":131,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Break placement: explicit destination index, optional literal window name. detach defaults true."},"source":{"line":66,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_pane-break_options-0"},{"id":"t:tmux_pane:capture_options/0","publicId":"t:tmux_pane:capture_options/0","qualifiedName":"tmux_pane:capture_options/0","name":"capture_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type capture_options() ::\n #{start => coordinate(),\n 'end' => coordinate(),\n join_lines => boolean(),\n escape_sequences => boolean(),\n escape_control => boolean(),\n retain_trailing_spaces => boolean(),\n alternate => boolean(),\n pending => boolean(),\n quiet => boolean()}.","params":[],"references":[{"start":48,"end":58,"target":"t:tmux_pane:coordinate/0"},{"start":83,"end":93,"target":"t:tmux_pane:coordinate/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":123,"end":130,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":166,"end":173,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":207,"end":214,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":256,"end":263,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":292,"end":299,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":326,"end":333,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":358,"end":365,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture range and rendering flags. Byte output and its final newline are preserved."},"source":{"line":93,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_pane-capture_options-0"},{"id":"t:tmux_pane:coordinate/0","publicId":"t:tmux_pane:coordinate/0","qualifiedName":"tmux_pane:coordinate/0","name":"coordinate/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type coordinate() :: -2147483648..32767 | all.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A capture line coordinate, or all for tmux's full available range."},"source":{"line":91,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_pane-coordinate-0"},{"id":"t:tmux_pane:join_options/0","publicId":"t:tmux_pane:join_options/0","qualifiedName":"tmux_pane:join_options/0","name":"join_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type join_options() ::\n #{direction => horizontal | vertical,\n size =>\n {cells, 1..2147483647} | {percent, 1..100},\n detach => boolean(),\n before => boolean(),\n full_size => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":174,"end":181,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":207,"end":214,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":243,"end":250,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Join/move geometry: detach true, vertical split by default. before and full_size follow tmux layout rules."},"source":{"line":72,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_pane-join_options-0"},{"id":"t:tmux_pane:key/0","publicId":"t:tmux_pane:key/0","qualifiedName":"tmux_pane:key/0","name":"key/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type key() ::\n binary() |\n enter | tab | escape | backspace | space | up |\n down | left | right | home | 'end' | insert |\n delete | page_up | page_down | back_tab |\n {function, 1..12} |\n {control, binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":25,"end":31,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":252,"end":258,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated named key, single UTF-8 character, function key or control-letter key."},"source":{"line":97,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_pane-key-0"},{"id":"t:tmux_pane:pipe_command/0","publicId":"t:tmux_pane:pipe_command/0","qualifiedName":"tmux_pane:pipe_command/0","name":"pipe_command/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type pipe_command() :: #{shell := binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":35,"end":41,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Explicit shell code: a nonempty NUL-free binary, with no tmux format or strftime expansion."},"source":{"line":59,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_pane-pipe_command-0"},{"id":"t:tmux_pane:pipe_options/0","publicId":"t:tmux_pane:pipe_options/0","qualifiedName":"tmux_pane:pipe_options/0","name":"pipe_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type pipe_options() ::\n #{direction => output | input | both,\n toggle => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":94,"end":101,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Pipe direction defaults to output. toggle defaults false; true closes an existing pipe instead of replacing it."},"source":{"line":61,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_pane-pipe_options-0"},{"id":"t:tmux_pane:resize_options/0","publicId":"t:tmux_pane:resize_options/0","qualifiedName":"tmux_pane:resize_options/0","name":"resize_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type resize_options() ::\n #{width := 1..65535, height => 1..65535} |\n #{width => 1..65535, height := 1..65535}.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Requested absolute pane dimensions in cells. Supply at least one dimension; tmux can clamp it to fit the layout."},"source":{"line":85,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_pane-resize_options-0"},{"id":"t:tmux_pane:respawn_options/0","publicId":"t:tmux_pane:respawn_options/0","qualifiedName":"tmux_pane:respawn_options/0","name":"respawn_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type respawn_options() ::\n #{force => boolean(),\n launch => tmux_command:respawn_spec(),\n cwd => binary(),\n env => #{binary() => binary()}}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":48,"end":55,"target":"t:erlang:boolean/0"},{"start":81,"end":106,"target":"t:tmux_command:respawn_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":129,"end":135,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":160,"end":166,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":172,"end":178,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Respawn options. Defaults: force false, launch previous, saved cwd. Environment augments tmux's resolved session environment for this spawn."},"source":{"line":88,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_pane-respawn_options-0"},{"id":"t:tmux_pane:split_options/0","publicId":"t:tmux_pane:split_options/0","qualifiedName":"tmux_pane:split_options/0","name":"split_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type split_options() ::\n #{direction => horizontal | vertical,\n size =>\n {cells, 1..2147483647} | {percent, 1..100},\n before => boolean(),\n full_size => boolean(),\n zoom => boolean(),\n cwd => binary(),\n env => #{binary() => binary()},\n launch => tmux_command:launch_spec(),\n detach => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":175,"end":182,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":211,"end":218,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":242,"end":249,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":272,"end":278,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":303,"end":309,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":315,"end":321,"target":"t:erlang:binary/0"},{"start":348,"end":372,"target":"t:tmux_command:launch_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":398,"end":405,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Split geometry, placement and explicit launch options. Defaults to a detached vertical split."},"source":{"line":80,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_pane-split_options-0"},{"id":"t:tmux_pane:swap_options/0","publicId":"t:tmux_pane:swap_options/0","qualifiedName":"tmux_pane:swap_options/0","name":"swap_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type swap_options() ::\n #{detach => boolean(), zoom => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":46,"end":53,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":65,"end":72,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Swap controls: detach defaults true; zoom maps to tmux -Z to retain zoom."},"source":{"line":78,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_pane-swap_options-0"},{"id":"tmux_query","publicId":"tmux_query","qualifiedName":"tmux_query","name":"tmux_query","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Build and execute explicit queries over the tmux graph.","body":"Use `fetch/1` to execute a query. Constructors,\n`where/2`, `limit/2`, `pushdown/2` and\n`explain/1` perform no tmux I/O. Criteria are validated when added,\nand repeated conditions conjoin. Fetching returns an ordered `m:tmux_select`\nselection backed by a complete `m:tmux_snapshot` graph. By default the full\ncaptured view is filtered locally. Enable native candidate exclusion with\n`pushdown/2`: it can add a scan without reducing complete-graph hydration. The\ncandidate is a necessary condition; the full filter still runs before the limit.\n\nCaptures span commands and are not atomic. Candidate IDs excluded at one\nobservation cannot be recovered by later local filtering. Disabling\n`pushdown/2` evaluates the complete captured view without an\nearlier candidate exclusion. Numeric candidate fields come from the restricted\nscalar codec and must agree with the capture's scalar observations. Text and\nrelationships remain local.\n\nCaptures emit bounded OTP Logger reports with their snapshot ID and endpoint\ngeneration. See [runtime diagnostics](diagnostics.md) for observation cost,\nrejection reports and configuration.","examples":[{"lang":"erlang","code":"1> Q0 = tmux_query:panes(unopened), ok.\nok\n2> Q = tmux_query:where(#{width => #{gte => 120}}, Q0), ok.\nok\n3> maps:get(format, maps:get(candidate, tmux_query:explain(Q))).\n<<\"1\">>\n4> Pushed = tmux_query:pushdown(true, Q), ok.\nok\n5> maps:get(format, maps:get(candidate, tmux_query:explain(Pushed))).\n<<\"#{e|>=|:#{pane_width},120}\">>"}]},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_query"},{"id":"tmux_query:explain/1","publicId":"tmux_query:explain/1","qualifiedName":"tmux_query:explain/1","name":"explain/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"explain/1\n-spec explain(t()) -> plan().","references":[{"start":24,"end":25,"target":"t:tmux_query:t/0"},{"start":32,"end":36,"target":"t:tmux_query:plan/0"}],"params":[{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"returns":"plan()","returnsReferences":[{"start":0,"end":4,"target":"t:tmux_query:plan/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Inspect command templates, necessary candidate conditions, full residual, hydration, required fields, ordering and temporal assumptions. Performs no I/O and does not contact the endpoint to claim dynamic capabilities."},"source":{"line":191,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_query-explain-1"},{"id":"tmux_query:fetch/1","publicId":"tmux_query:fetch/1","qualifiedName":"tmux_query:fetch/1","name":"fetch/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"fetch(Query)\n-spec fetch(t()) -> {ok, tmux_select:t()} | {error, map()}.","references":[{"start":25,"end":26,"target":"t:tmux_query:t/0"},{"start":38,"end":51,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":65,"end":68,"target":"t:erlang:map/0"}],"params":[{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"returns":"{ok, tmux_select:t()} | {error, map()}","returnsReferences":[{"start":5,"end":18,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":32,"end":35,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Execute with default capture bounds and no retry. Returns an ordered selection whose complete graph remains locally readable. See `fetch/2` for resource limits, requested retries and operational errors."},"source":{"line":215,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_query-fetch-1"},{"id":"tmux_query:fetch/2","publicId":"tmux_query:fetch/2","qualifiedName":"tmux_query:fetch/2","name":"fetch/2","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"fetch/2\n-spec fetch(t(), fetch_options()) ->\n {ok, tmux_select:t()} | {error, map()}.","references":[{"start":20,"end":21,"target":"t:tmux_query:t/0"},{"start":25,"end":38,"target":"t:tmux_query:fetch_options/0"},{"start":65,"end":78,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":92,"end":95,"target":"t:erlang:map/0"}],"params":[{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]},{"name":"Options","type":"fetch_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_query:fetch_options/0"}]}],"returns":"{ok, tmux_select:t()} | {error, map()}","returnsReferences":[{"start":5,"end":18,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":32,"end":35,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Execute the planned observation, full local predicate and final limit.","body":"Capture options are those of `tmux_server:snapshot/2`. retry is 0 (default) or\n1 and retries only inconsistent_capture, within the original capture deadline.\nThe retry is a new read-only capture. No mutations are retried. Invalid\ncapture requests return tagged errors, including unsupported consistency.","examples":[{"lang":"erlang","code":"1> tmux_query:fetch(tmux_query:panes(unopened), #{retry => 2}).\n{error,#{code => invalid_query_options}}"}]},"source":{"line":231,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_query-fetch-2"},{"id":"tmux_query:limit/2","publicId":"tmux_query:limit/2","qualifiedName":"tmux_query:limit/2","name":"limit/2","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"limit/2\n-spec limit(0..65536, t()) -> t().","references":[{"start":30,"end":31,"target":"t:tmux_query:t/0"},{"start":38,"end":39,"target":"t:tmux_query:t/0"}],"params":[{"name":"Count","type":"0..65536","typeReferences":[]},{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Set a final result limit from 0 through 65536, applied after residual filtering and identity handling. It is not a candidate-fetch limit. Performs no I/O; invalid counts raise bad_query_limit."},"source":{"line":172,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_query-limit-2"},{"id":"tmux_query:panes/1","publicId":"tmux_query:panes/1","qualifiedName":"tmux_query:panes/1","name":"panes/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"panes(Server)\n-spec panes(tmux_server:t()) -> t().","references":[{"start":26,"end":39,"target":"t:tmux_server:t/0"},{"start":46,"end":47,"target":"t:tmux_query:t/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Describe a future server-wide physical pane query. Performs no I/O; `fetch/1` is the execution boundary."},"source":{"line":128,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_query-panes-1"},{"id":"tmux_query:pushdown/2","publicId":"tmux_query:pushdown/2","qualifiedName":"tmux_query:pushdown/2","name":"pushdown/2","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"pushdown(Enabled, Query)\n-spec pushdown(boolean(), t()) -> t().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":40,"end":47,"target":"t:erlang:boolean/0"},{"start":51,"end":52,"target":"t:tmux_query:t/0"},{"start":59,"end":60,"target":"t:tmux_query:t/0"}],"params":[{"name":"Enabled","type":"boolean()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:boolean/0"}]},{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Enable or disable native candidate exclusion, returning a new query. The default is disabled: evaluate the complete captured view locally. Enabling it can add a candidate scan without reducing hydration; neither mode promises an atomic graph. Performs no I/O."},"source":{"line":183,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_query-pushdown-2"},{"id":"tmux_query:sessions/1","publicId":"tmux_query:sessions/1","qualifiedName":"tmux_query:sessions/1","name":"sessions/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"sessions(Server)\n-spec sessions(tmux_server:t()) -> t().","references":[{"start":32,"end":45,"target":"t:tmux_server:t/0"},{"start":52,"end":53,"target":"t:tmux_query:t/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Describe a future server-wide session query without executing tmux."},"source":{"line":144,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_query-sessions-1"},{"id":"tmux_query:where/2","publicId":"tmux_query:where/2","qualifiedName":"tmux_query:where/2","name":"where/2","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"where/2\n-spec where(map() | tmux_filter:t(), t()) -> t().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"},{"start":28,"end":41,"target":"t:tmux_filter:t/0"},{"start":45,"end":46,"target":"t:tmux_query:t/0"},{"start":53,"end":54,"target":"t:tmux_query:t/0"}],"params":[{"name":"Criteria","type":"map() | tmux_filter:t()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"},{"start":8,"end":21,"target":"t:tmux_filter:t/0"}]},{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate trusted criteria for this entity and conjoin them with prior conditions. Successive calls share the same normalized resource limits as one flat conjunction. Each relationship quantifier retains its own scope. Returns a new immutable query; malformed criteria raise bad_filter. Performs no I/O."},"source":{"line":153,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_query-where-2"},{"id":"tmux_query:window_links/1","publicId":"tmux_query:window_links/1","qualifiedName":"tmux_query:window_links/1","name":"window_links/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"window_links(Server)\n-spec window_links(tmux_server:t()) -> t().","references":[{"start":40,"end":53,"target":"t:tmux_server:t/0"},{"start":60,"end":61,"target":"t:tmux_query:t/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Describe a future query over session-relative window memberships. Repeated physical windows retain distinct membership identity. Performs no I/O."},"source":{"line":139,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_query-window_links-1"},{"id":"tmux_query:windows/1","publicId":"tmux_query:windows/1","qualifiedName":"tmux_query:windows/1","name":"windows/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"windows(Server)\n-spec windows(tmux_server:t()) -> t().","references":[{"start":30,"end":43,"target":"t:tmux_server:t/0"},{"start":50,"end":51,"target":"t:tmux_query:t/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Describe a future query over unique physical windows. Performs no I/O."},"source":{"line":133,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_query-windows-1"},{"id":"t:tmux_query:candidate/0","publicId":"t:tmux_query:candidate/0","qualifiedName":"tmux_query:candidate/0","name":"candidate/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type candidate() ::\n #{format := binary(),\n exact := boolean(),\n local_only := [local_reason()],\n numeric_range => {0, 9007199254740991}}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":43,"end":49,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":74,"end":81,"target":"t:erlang:boolean/0"},{"start":112,"end":124,"target":"t:tmux_query:local_reason/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Native necessary condition. format is a rendered tmux expression; exact means the translation covers the whole predicate for one observed state. A true fallback can admit every row. numeric_range describes qualified integer conversion, and is omitted for disabled/oversized fallback plans."},"source":{"line":65,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_query-candidate-0"},{"id":"t:tmux_query:command_plan/0","publicId":"t:tmux_query:command_plan/0","qualifiedName":"tmux_query:command_plan/0","name":"command_plan/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type command_plan() ::\n #{initial_spine := [source_command()],\n candidate := [source_command()],\n hydration := [source_command()],\n isolated_hydration := [source_command()],\n final_spine := [source_command()],\n empty_server := skip_window_and_pane_scans}.","params":[],"references":[{"start":54,"end":68,"target":"t:tmux_query:source_command/0"},{"start":99,"end":113,"target":"t:tmux_query:source_command/0"},{"start":144,"end":158,"target":"t:tmux_query:source_command/0"},{"start":198,"end":212,"target":"t:tmux_query:source_command/0"},{"start":245,"end":259,"target":"t:tmux_query:source_command/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture phases: initial identity/scalar scans, optional candidate scans, complete text/byte hydration and final identity/scalar scans. hydration gives the default batched templates; isolated_hydration describes the explicit isolated option and unqualified-field fallback. An empty server skips window/pane scans. Execution still validates capture bounds and can fail."},"source":{"line":92,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_query-command_plan-0"},{"id":"t:tmux_query:fetch_options/0","publicId":"t:tmux_query:fetch_options/0","qualifiedName":"tmux_query:fetch_options/0","name":"fetch_options/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type fetch_options() ::\n #{deadline_ms => 1..600000,\n max_rows => 1..65536,\n max_bytes => 1..67108864,\n hydration => tmux_server:hydration(),\n consistency => observed | atomic,\n retry => 0 | 1}.","params":[],"references":[{"start":160,"end":181,"target":"t:tmux_server:hydration/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture bounds plus an explicitly requested single inconsistent-capture retry; default retry is zero."},"source":{"line":48,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_query-fetch_options-0"},{"id":"t:tmux_query:local_reason/0","publicId":"t:tmux_query:local_reason/0","qualifiedName":"tmux_query:local_reason/0","name":"local_reason/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type local_reason() ::\n #{reason :=\n disabled | format_limit | inexact_negation |\n unqualified_scalar_codec |\n complete_relationship_required,\n field => binary(),\n relation => binary(),\n operator => tmux_schema:operator()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":219,"end":225,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":253,"end":259,"target":"t:erlang:binary/0"},{"start":287,"end":307,"target":"t:tmux_schema:operator/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Why part of a predicate stays local. field and relation contain stable schema IDs, not Erlang names or tmux formats. An unsupported leaf may broaden the native condition; it never removes the full local predicate."},"source":{"line":56,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_query-local_reason-0"},{"id":"t:tmux_query:plan/0","publicId":"t:tmux_query:plan/0","qualifiedName":"tmux_query:plan/0","name":"plan/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type plan() ::\n #{entity := tmux_schema:entity(),\n pushdown := boolean(),\n candidate := candidate(),\n residual := tmux_filter:wire_document(),\n required := [tmux_snapshot:requirement()],\n limit := infinity | 0..65536,\n commands := command_plan(),\n hydration := complete_graph,\n ordering := session_index_window | numeric_id,\n deduplication := membership | physical_id,\n capabilities :=\n #{minimum_tmux := binary(),\n transport := one_shot},\n consistency := observed,\n atomic := false,\n candidate_scalars :=\n same_row_checked_against_spine,\n text_and_relations := later_observations,\n temporal_limit :=\n excluded_rows_cannot_be_recovered}.","params":[],"references":[{"start":38,"end":56,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":84,"end":91,"target":"t:erlang:boolean/0"},{"start":120,"end":129,"target":"t:tmux_query:candidate/0"},{"start":157,"end":182,"target":"t:tmux_filter:wire_document/0"},{"start":211,"end":236,"target":"t:tmux_snapshot:requirement/0"},{"start":307,"end":319,"target":"t:tmux_query:command_plan/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":540,"end":546,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Pure explanation of a query. pushdown reports whether candidate exclusion is enabled (disabled by default). residual is the full portable predicate, required lists coverage requirements, and limit applies after residual evaluation. ordering and deduplication name the identity policy, not arbitrary map order. capabilities describes the planner baseline without probing a live endpoint.","body":"Capture spans commands. Candidate scalar values are checked against the first\nscan; text and relationships are later observations. Excluded rows cannot be\nrecovered after state changes. Even an exact candidate is not an atomic query."},"source":{"line":107,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_query-plan-0"},{"id":"t:tmux_query:source_command/0","publicId":"t:tmux_query:source_command/0","qualifiedName":"tmux_query:source_command/0","name":"source_command/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type source_command() ::\n #{entity := tmux_schema:entity(),\n command := binary(),\n format := binary(),\n transport := one_shot,\n codec := scalar_spine,\n kind := tmux_schema:entity(),\n args := [binary()],\n filter => binary()} |\n #{entity := tmux_schema:entity(),\n fields := [atom()],\n command := binary(),\n format := binary(),\n transport := one_shot,\n codec := escaped_columns_v1,\n args := [binary()]} |\n #{entity := tmux_schema:entity(),\n field := atom(),\n command := binary(),\n format := binary(),\n transport := one_shot,\n codec := id_prefixed_quoted_field,\n target := observed_id}.","params":[],"references":[{"start":48,"end":66,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":93,"end":99,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":125,"end":131,"target":"t:erlang:binary/0"},{"start":225,"end":243,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":268,"end":274,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":301,"end":307,"target":"t:erlang:binary/0"},{"start":335,"end":353,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":380,"end":384,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":412,"end":418,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":444,"end":450,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":551,"end":557,"target":"t:erlang:binary/0"},{"start":586,"end":604,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":629,"end":633,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":660,"end":666,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":692,"end":698,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Diagnostic command template, not executable argv. Scan templates carry args; text/byte hydration escapes each field once before column framing. Unqualified schema fields use isolated target = observed_id templates, resolved only while capturing. codec states how returned data is framed, including the version-specific print layer. This value grants no atomicity or persistent-connection guarantee."},"source":{"line":75,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_query-source_command-0"},{"id":"t:tmux_query:t/0","publicId":"t:tmux_query:t/0","qualifiedName":"tmux_query:t/0","name":"t/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"An immutable description of future tmux reads. Only fetch executes it."},"source":{"line":121,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_query-t-0"},{"id":"tmux_schema","publicId":"tmux_schema","qualifiedName":"tmux_schema","name":"tmux_schema","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Validate schema-defined observations and normalize scalar values.","body":"Field names come from the generated registry, never record reflection or\npayload-created atoms. Text is validated UTF-8; byte fields preserve arbitrary\nbinaries. Integer normalization uses the shared exact JSON integer range.\n`m:tmux_model` validates rows and `m:tmux_filter` validates criteria through\nthis schema. The [field reference](fields.md) lists fields and relationships."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_schema"},{"id":"tmux_schema:field/2","publicId":"tmux_schema:field/2","qualifiedName":"tmux_schema:field/2","name":"field/2","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"field(Entity, Field)\n-spec field(entity(), atom()) ->\n {ok, field_metadata()} |\n {error, error_detail()}.","references":[{"start":33,"end":39,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":43,"end":47,"target":"t:erlang:atom/0"},{"start":74,"end":88,"target":"t:tmux_schema:field_metadata/0"},{"start":117,"end":129,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Entity","type":"entity()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_schema:entity/0"}]},{"name":"Field","type":"atom()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:atom/0"}]}],"returns":"{ok, field_metadata()} | {error, error_detail()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_schema:field_metadata/0"},{"start":33,"end":45,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Look up one permitted field by its Erlang atom name. Unknown names return a tagged error; this does not turn input strings into atoms."},"source":{"line":78,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_schema-field-2"},{"id":"tmux_schema:fields/1","publicId":"tmux_schema:fields/1","qualifiedName":"tmux_schema:fields/1","name":"fields/1","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"fields(Entity)\n-spec fields(entity()) ->\n {ok, #{atom() => field_metadata()}} |\n {error, error_detail()}.","references":[{"start":28,"end":34,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":64,"end":68,"target":"t:erlang:atom/0"},{"start":74,"end":88,"target":"t:tmux_schema:field_metadata/0"},{"start":119,"end":131,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Entity","type":"entity()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_schema:entity/0"}]}],"returns":"{ok, #{atom() => field_metadata()}} |\n {error, error_detail()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":7,"end":11,"target":"t:erlang:atom/0"},{"start":17,"end":31,"target":"t:tmux_schema:field_metadata/0"},{"start":56,"end":68,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return generated field metadata for a known entity, or a tagged unknown_entity error. Field names, wire names and stable IDs are allowlisted; this is not reflection over arbitrary record fields."},"source":{"line":56,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_schema-fields-1"},{"id":"tmux_schema:normalize/2","publicId":"tmux_schema:normalize/2","qualifiedName":"tmux_schema:normalize/2","name":"normalize/2","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"normalize/2\n-spec normalize(entity(), map()) ->\n {ok, map()} | {error, error_detail()}.","references":[{"start":28,"end":34,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":38,"end":41,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":72,"end":75,"target":"t:erlang:map/0"},{"start":89,"end":101,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Entity","type":"entity()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_schema:entity/0"}]},{"name":"Input","type":"map()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"}]}],"returns":"{ok, map()} | {error, error_detail()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"start":22,"end":34,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate a domain-field map and normalize its scalar observations, retaining not_loaded/unavailable distinctly and deriving schema-defined values. Performs no I/O; constructors and action boundaries still validate records."},"source":{"line":93,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_schema-normalize-2"},{"id":"tmux_schema:operators/1","publicId":"tmux_schema:operators/1","qualifiedName":"tmux_schema:operators/1","name":"operators/1","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"operators/1\n-spec operators(#{type := value_type(),\n nullable := boolean(),\n atom() => term()}) ->\n [operator()].","references":[{"start":38,"end":48,"target":"t:tmux_schema:value_type/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":82,"end":89,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":111,"end":115,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":121,"end":125,"target":"t:erlang:term/0"},{"start":153,"end":161,"target":"t:tmux_schema:operator/0"}],"params":[{"name":"Argument1","type":"#{type := value_type(),\n nullable := boolean(),\n atom() => term()}","typeReferences":[{"start":10,"end":20,"target":"t:tmux_schema:value_type/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":48,"end":55,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":71,"end":75,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":81,"end":85,"target":"t:erlang:term/0"}]}],"returns":"[operator()]","returnsReferences":[{"start":1,"end":9,"target":"t:tmux_schema:operator/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the permitted scalar operators for this field type and nullability. The generated field reference uses this same validator. Performs no I/O."},"source":{"line":149,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_schema-operators-1"},{"id":"tmux_schema:relations/1","publicId":"tmux_schema:relations/1","qualifiedName":"tmux_schema:relations/1","name":"relations/1","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"relations(Entity)\n-spec relations(entity()) ->\n {ok, #{atom() => relation_metadata()}} |\n {error, error_detail()}.","references":[{"start":34,"end":40,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":73,"end":77,"target":"t:erlang:atom/0"},{"start":83,"end":100,"target":"t:tmux_schema:relation_metadata/0"},{"start":134,"end":146,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Entity","type":"entity()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_schema:entity/0"}]}],"returns":"{ok, #{atom() => relation_metadata()}} |\n {error, error_detail()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":7,"end":11,"target":"t:erlang:atom/0"},{"start":17,"end":34,"target":"t:tmux_schema:relation_metadata/0"},{"start":59,"end":71,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return generated relationship metadata, including target entities and one/many cardinality. Performs no I/O."},"source":{"line":67,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_schema-relations-1"},{"id":"tmux_schema:value/2","publicId":"tmux_schema:value/2","qualifiedName":"tmux_schema:value/2","name":"value/2","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"value/2\n-spec value(map(), term()) ->\n {ok, term()} | {error, error_detail()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":27,"end":31,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":58,"end":62,"target":"t:erlang:term/0"},{"start":76,"end":88,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Argument1","type":"map()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"}]},{"name":"Argument2","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]}],"returns":"{ok, term()} | {error, error_detail()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":5,"end":9,"target":"t:erlang:term/0"},{"start":23,"end":35,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate and normalize one value against generated field metadata. Integral JSON numbers obey the exact shared integer range and field bounds; text is validated UTF-8, while bytes remain arbitrary binaries. Performs no I/O."},"source":{"line":109,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_schema-value-2"},{"id":"t:tmux_schema:entity/0","publicId":"t:tmux_schema:entity/0","qualifiedName":"tmux_schema:entity/0","name":"entity/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type entity() :: session | window | window_link | pane.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"The built-in tmux graph entities; window_link represents a session membership."},"source":{"line":18,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_schema-entity-0"},{"id":"t:tmux_schema:error_detail/0","publicId":"t:tmux_schema:error_detail/0","qualifiedName":"tmux_schema:error_detail/0","name":"error_detail/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type error_detail() ::\n #{code := atom(),\n path := [term()],\n atom() => term()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":44,"end":48,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":73,"end":77,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":94,"end":98,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":104,"end":108,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Structured boundary validation errors with a code and input path."},"source":{"line":22,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_schema-error_detail-0"},{"id":"t:tmux_schema:field_metadata/0","publicId":"t:tmux_schema:field_metadata/0","qualifiedName":"tmux_schema:field_metadata/0","name":"field_metadata/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type field_metadata() ::\n #{type := value_type(),\n wire := binary(),\n stable := binary(),\n required := boolean(),\n nullable := boolean(),\n format => binary(),\n capture_codec => escaped_columns_v1,\n minimum => integer()}.","params":[],"references":[{"start":46,"end":56,"target":"t:tmux_schema:value_type/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":80,"end":86,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":112,"end":118,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":146,"end":153,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":181,"end":188,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":214,"end":220,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":296,"end":303,"target":"t:erlang:integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Generated field contract. stable is a versioned portable identity; wire is the JSON key. required controls construction and nullable permits known absence. format is present only for directly observed tmux fields; derived fields omit it. capture_codec identifies an admitted batched source encoding; its absence selects isolated reads for that entity. minimum tightens an integer field's lower bound. Field names themselves are the keys returned by `fields/1`, not this map's wire or stable values."},"source":{"line":35,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_schema-field_metadata-0"},{"id":"t:tmux_schema:operator/0","publicId":"t:tmux_schema:operator/0","qualifiedName":"tmux_schema:operator/0","name":"operator/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type operator() ::\n equals | 'not' | in | not_in | lt | lte | gt |\n gte | contains | starts_with | ends_with | regex |\n present.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validated scalar operators. The field's type and nullability restrict this set."},"source":{"line":46,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_schema-operator-0"},{"id":"t:tmux_schema:relation_metadata/0","publicId":"t:tmux_schema:relation_metadata/0","qualifiedName":"tmux_schema:relation_metadata/0","name":"relation_metadata/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type relation_metadata() ::\n #{kind := one | many,\n target := entity(),\n wire := binary(),\n stable := binary()}.","params":[],"references":[{"start":83,"end":89,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":113,"end":119,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":145,"end":151,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Generated relationship contract: kind is one or many; target names the related entity. wire and stable have the same roles as in `t:field_metadata/0`. Completeness belongs to snapshot coverage, not this static schema."},"source":{"line":43,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_schema-relation_metadata-0"},{"id":"t:tmux_schema:value_type/0","publicId":"t:tmux_schema:value_type/0","qualifiedName":"tmux_schema:value_type/0","name":"value_type/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type value_type() ::\n session_id | window_id | pane_id | boolean |\n uint | integer | text | bytes.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Scalar categories used by normalization and operator validation; IDs remain binaries."},"source":{"line":24,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_schema-value_type-0"},{"id":"tmux_scope","publicId":"tmux_scope","qualifiedName":"tmux_scope","name":"tmux_scope","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Run synchronous work and cleanup while preserving both outcomes.","body":"Use `run/2` around a resource whose handle remains in the caller's scope.\nUse `run_or_error/2` for nested scopes or fail-fast programs that need the\ncallback's value directly and raise when cleanup fails.\n`tmux_server:with_server/2` and `tmux_server:with_owned/2` also acquire their\nresources and add recovery handles when cleanup fails. This module owns no\nprocess, timeout or retry policy; the supplied functions own those contracts."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_scope.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_scope"},{"id":"tmux_scope:run/2","publicId":"tmux_scope:run/2","qualifiedName":"tmux_scope:run/2","name":"run/2","namespace":"tmux_scope","parent":"tmux_scope","kind":"function","modifiers":[],"signatures":[{"raw":"run(Function, Cleanup)\n-spec run(fun(() -> Value),\n fun(() -> ok | {error, term()})) ->\n {ok, Value} | {error, failure()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":84,"end":88,"target":"t:erlang:term/0"},{"start":132,"end":139,"target":"t:tmux_scope:failure/0"}],"params":[{"name":"Function","type":"fun(() -> Value)","typeReferences":[]},{"name":"Cleanup","type":"fun(() -> ok | {error, term()})","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":23,"end":27,"target":"t:erlang:term/0"}]}],"returns":"{ok, Value} | {error, failure()}","returnsReferences":[{"start":22,"end":29,"target":"t:tmux_scope:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Run a callback, then attempt cleanup once, synchronously in the calling process. This function performs only the I/O supplied by those functions. The callback has no library duration timer. Abrupt uncatchable caller death remains subject to each resource's existing ownership policy.","body":"Only ok proves cleanup success. Normalize resource-specific successful replies\ninside the cleanup function. With successful cleanup, return {ok, Value} or\nre-raise the original callback exception with its reason and stack. A callback\nreturning an error tuple is an ordinary value. Cleanup failure instead returns\n{error, Failure} with `t:failure/0`, preserving both outcomes. An unexpected\ncleanup return is recorded as invalid_cleanup_result.\n\nHandle an inner scope's error explicitly when nesting scopes. Otherwise it is\nan ordinary outer callback value. Keep resource handles for recovery; this\nfunction does not infer ownership or retry cleanup.","examples":[{"lang":"erlang","code":"1> tmux_scope:run(fun() -> done end, fun() -> ok end).\n{ok,done}\n2> tmux_scope:run(fun() -> done end, fun() -> {error, enoent} end).\n{error,#{code => scope_cleanup_failed,\n primary => {ok,done},cleanup => {error,enoent}}}\n3> Work = fun() -> error(build_failed) end, ok.\nok\n4> {error, F} = tmux_scope:run(Work, fun() -> {error, busy} end), ok.\nok\n5> {exception, error, build_failed, [_ | _]} = maps:get(primary, F), ok.\nok\n6> maps:get(cleanup, F).\n{error,busy}"}]},"source":{"line":61,"file":"apps/libtmux_erlang/src/tmux_scope.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_scope-run-2"},{"id":"tmux_scope:run_or_error/2","publicId":"tmux_scope:run_or_error/2","qualifiedName":"tmux_scope:run_or_error/2","name":"run_or_error/2","namespace":"tmux_scope","parent":"tmux_scope","kind":"function","modifiers":[],"signatures":[{"raw":"run_or_error(Function, Cleanup)\n-spec run_or_error(fun(() -> Value),\n fun(() -> ok | {error, term()})) ->\n Value.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":111,"end":115,"target":"t:erlang:term/0"}],"params":[{"name":"Function","type":"fun(() -> Value)","typeReferences":[]},{"name":"Cleanup","type":"fun(() -> ok | {error, term()})","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":23,"end":27,"target":"t:erlang:term/0"}]}],"returns":"Value","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Run work and cleanup with `run/2`, returning the callback value directly. Raises {scope_cleanup_failed, Failure} if cleanup fails, retaining both outcomes in `t:failure/0`. With successful cleanup, callback exceptions retain their original reason and stack. Nested raising scopes propagate an inner failure through the outer scope while still attempting outer cleanup."},"source":{"line":84,"file":"apps/libtmux_erlang/src/tmux_scope.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_scope-run_or_error-2"},{"id":"t:tmux_scope:exception/0","publicId":"t:tmux_scope:exception/0","qualifiedName":"tmux_scope:exception/0","name":"exception/0","namespace":"tmux_scope","parent":"tmux_scope","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type exception() ::\n {exception,\n error | exit | throw,\n term(),\n erlang:stacktrace()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":87,"end":91,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:stacktrace/0","project":"Erlang/OTP"},"start":106,"end":123,"target":"t:erlang:stacktrace/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"The original exception class, reason and stack, retained as evidence."},"source":{"line":16,"file":"apps/libtmux_erlang/src/tmux_scope.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_scope-exception-0"},{"id":"t:tmux_scope:failure/0","publicId":"t:tmux_scope:failure/0","qualifiedName":"tmux_scope:failure/0","name":"failure/0","namespace":"tmux_scope","parent":"tmux_scope","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type failure() ::\n #{code := scope_cleanup_failed,\n primary := {ok, term()} | exception(),\n cleanup := {error, term()} | exception(),\n atom() => term()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":89,"end":93,"target":"t:erlang:term/0"},{"start":99,"end":108,"target":"t:tmux_scope:exception/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":143,"end":147,"target":"t:erlang:term/0"},{"start":153,"end":162,"target":"t:tmux_scope:exception/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":178,"end":182,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":188,"end":192,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Both outcomes when cleanup failed. primary contains the callback's ordinary return or exception; cleanup contains its separate error or exception. Resource-specific wrappers may add recovery handles to this map."},"source":{"line":22,"file":"apps/libtmux_erlang/src/tmux_scope.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_scope-failure-0"},{"id":"tmux_select","publicId":"tmux_select","qualifiedName":"tmux_select","name":"tmux_select","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Filter ordered captured rows without tmux I/O.","body":"Use `panes/1`, `windows/1`,\n`window_links/1` or `sessions/1` with a\n`m:tmux_snapshot` to retain graph coverage. `from_list/2`\npreserves supplied order, duplicates and row origins; it establishes only\nfields present in every row and loads no relationships. Filtering and\n`take/2` retain the original coverage even if no rows remain.\n\n`where/2` accepts map criteria or a `t:tmux_filter:t/0` portable\nfilter. `filter/2` accepts a unary Boolean function, whose\nexceptions propagate. Cardinality criteria validate the whole expression and\nits coverage before stopping at sufficient evidence. Selections are opaque\nvalues; use `to_list/1` for functions in `m:lists`.\n\nA snapshot-backed selection retains the complete captured graph, including\nrows removed by filtering. After relationship evaluation, store the result of\n`to_list/1` and release other snapshot and selection references to allow that\ncontext to be collected. Row extraction preserves the supplied field binaries;\ncaller-created subbinaries can still retain their backing allocation."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select"},{"id":"tmux_select:count/1","publicId":"tmux_select:count/1","qualifiedName":"tmux_select:count/1","name":"count/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"count(Selection)\n-spec count(t()) -> non_neg_integer().","references":[{"start":29,"end":30,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":37,"end":52,"target":"t:erlang:non_neg_integer/0"}],"params":[{"name":"Selection","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"non_neg_integer()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":0,"end":15,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the current materialized row count without I/O."},"source":{"line":290,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-count-1"},{"id":"tmux_select:count/2","publicId":"tmux_select:count/2","qualifiedName":"tmux_select:count/2","name":"count/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"count/2\n-spec count(criteria(), t()) -> non_neg_integer().","references":[{"start":20,"end":28,"target":"t:tmux_select:criteria/0"},{"start":32,"end":33,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":40,"end":55,"target":"t:erlang:non_neg_integer/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"non_neg_integer()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":0,"end":15,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the exact local match count after full criteria and coverage validation. Performs no I/O."},"source":{"line":296,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-count-2"},{"id":"tmux_select:exists/1","publicId":"tmux_select:exists/1","qualifiedName":"tmux_select:exists/1","name":"exists/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"exists/1\n-spec exists(t()) -> boolean().","references":[{"start":22,"end":23,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":30,"end":37,"target":"t:erlang:boolean/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"boolean()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return whether this materialized selection is nonempty, without I/O."},"source":{"line":279,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-exists-1"},{"id":"tmux_select:exists/2","publicId":"tmux_select:exists/2","qualifiedName":"tmux_select:exists/2","name":"exists/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"exists(Criteria, Selection)\n-spec exists(criteria(), t()) -> boolean().","references":[{"start":41,"end":49,"target":"t:tmux_select:criteria/0"},{"start":53,"end":54,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":61,"end":68,"target":"t:erlang:boolean/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"boolean()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate all criteria/coverage first, then stop at the first local match. Performs no I/O; an empty selection does not bypass validation."},"source":{"line":285,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-exists-2"},{"id":"tmux_select:filter/2","publicId":"tmux_select:filter/2","qualifiedName":"tmux_select:filter/2","name":"filter/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"filter/2\n-spec filter(fun((Row) -> boolean()), t(Row)) -> t(Row)\n when Row :: tmux_model:row().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":35,"end":42,"target":"t:erlang:boolean/0"},{"start":47,"end":48,"target":"t:tmux_select:t/1"},{"start":58,"end":59,"target":"t:tmux_select:t/1"},{"start":93,"end":107,"target":"t:tmux_model:row/0"}],"params":[{"name":"Predicate","type":"fun((Row) -> boolean())","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":13,"end":20,"target":"t:erlang:boolean/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"t(Row)","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Apply an ordinary unary Boolean function locally, preserving row order and context. Non-Booleans and callback failures propagate; they are not false matches. This is executable application code, not portable filter data."},"source":{"line":142,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-filter-2"},{"id":"tmux_select:first/1","publicId":"tmux_select:first/1","qualifiedName":"tmux_select:first/1","name":"first/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"first/1\n-spec first(t(Row)) -> {ok, Row} | none\n when Row :: tmux_model:row().","references":[{"start":20,"end":21,"target":"t:tmux_select:t/1"},{"start":75,"end":89,"target":"t:tmux_model:row/0"}],"params":[{"name":"Argument1","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row} | none","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the first current row or none. Additional matches are allowed. Performs no I/O."},"source":{"line":219,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-first-1"},{"id":"tmux_select:first/2","publicId":"tmux_select:first/2","qualifiedName":"tmux_select:first/2","name":"first/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"first(Criteria, Selection)\n-spec first(criteria(), t(Row)) -> {ok, Row} | none\n when Row :: tmux_model:row().","references":[{"start":39,"end":47,"target":"t:tmux_select:criteria/0"},{"start":51,"end":52,"target":"t:tmux_select:t/1"},{"start":106,"end":120,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row} | none","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate criteria and coverage, then stop at the first local match. Returns none when no row matches; performs no I/O."},"source":{"line":226,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-first-2"},{"id":"tmux_select:fold/3","publicId":"tmux_select:fold/3","qualifiedName":"tmux_select:fold/3","name":"fold/3","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"fold/3\n-spec fold(fun((Row, Acc) -> Acc), Acc, t(Row)) -> Acc\n when Row :: tmux_model:row().","references":[{"start":47,"end":48,"target":"t:tmux_select:t/1"},{"start":88,"end":102,"target":"t:tmux_model:row/0"}],"params":[{"name":"Function","type":"fun((Row, Acc) -> Acc)","typeReferences":[]},{"name":"Accumulator","type":"Acc","typeReferences":[]},{"name":"Argument3","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"Acc","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Fold over current rows in order without I/O, using the function, accumulator, selection argument order. Arbitrary results are ordinary Erlang values."},"source":{"line":179,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-fold-3"},{"id":"tmux_select:from_list/2","publicId":"tmux_select:from_list/2","qualifiedName":"tmux_select:from_list/2","name":"from_list/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"from_list(Entity, Rows)\n-spec from_list(tmux_schema:entity(), [Row]) -> t(Row)\n when Row :: tmux_model:row().","references":[{"start":40,"end":58,"target":"t:tmux_schema:entity/0"},{"start":72,"end":73,"target":"t:tmux_select:t/1"},{"start":110,"end":124,"target":"t:tmux_model:row/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Rows","type":"[Row]","typeReferences":[]}],"returns":"t(Row)","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate an ordinary list without rebinding, reordering or deduplicating it.","examples":[{"lang":"erlang","code":"1> {ok, P} = tmux_model:pane(#{id => <<\"%1\">>, width => 120}), ok.\nok\n2> S = tmux_select:from_list(pane, [P, P]), ok.\nok\n3> tmux_select:size(tmux_select:where(#{width => #{gte => 120}}, S)).\n2\n4> tmux_select:one(S).\n{error,{multiple_matches,#{at_least => 2}}}"}]},"source":{"line":99,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-from_list-2"},{"id":"tmux_select:matching/2","publicId":"tmux_select:matching/2","qualifiedName":"tmux_select:matching/2","name":"matching/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"matching/2\n-spec matching({module(), term()}, t(Row)) ->\n {ok, t(Row)} | {error, term()}\n when Row :: tmux_model:row().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:module/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:module/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":37,"end":41,"target":"t:erlang:term/0"},{"start":46,"end":47,"target":"t:tmux_select:t/1"},{"start":80,"end":81,"target":"t:tmux_select:t/1"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":98,"end":102,"target":"t:erlang:term/0"},{"start":136,"end":150,"target":"t:tmux_model:row/0"}],"params":[{"name":"Argument1","type":"{module(), term()}","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:module/0","project":"Erlang/OTP"},"start":1,"end":7,"target":"t:erlang:module/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":11,"end":15,"target":"t:erlang:term/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, t(Row)} | {error, term()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_select:t/1"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":23,"end":27,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Prepare a trusted behaviour once, then apply its Boolean predicate.","body":"Uses `c:tmux_matcher:prepare/2`; preparation failure returns {error, Detail}.\nExceptions in either callback propagate. A matcher requires a captured\nsnapshot; a `from_list/2` selection returns matcher_requires_snapshot. The\napplication chooses Module."},"source":{"line":154,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-matching-2"},{"id":"tmux_select:one/1","publicId":"tmux_select:one/1","qualifiedName":"tmux_select:one/1","name":"one/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one/1\n-spec one(t(Row)) -> {ok, Row} | cardinality_error()\n when Row :: tmux_model:row().","references":[{"start":16,"end":17,"target":"t:tmux_select:t/1"},{"start":39,"end":56,"target":"t:tmux_select:cardinality_error/0"},{"start":84,"end":98,"target":"t:tmux_model:row/0"}],"params":[{"name":"Argument1","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row} | cardinality_error()","returnsReferences":[{"start":12,"end":29,"target":"t:tmux_select:cardinality_error/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the sole current row or a no_match/multiple_matches error. Ambiguity reports at_least = 2 rather than computing a needless exact count."},"source":{"line":233,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-one-1"},{"id":"tmux_select:one/2","publicId":"tmux_select:one/2","qualifiedName":"tmux_select:one/2","name":"one/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one(Criteria, Selection)\n-spec one(criteria(), t(Row)) ->\n {ok, Row} | cardinality_error()\n when Row :: tmux_model:row().","references":[{"start":35,"end":43,"target":"t:tmux_select:criteria/0"},{"start":47,"end":48,"target":"t:tmux_select:t/1"},{"start":83,"end":100,"target":"t:tmux_select:cardinality_error/0"},{"start":128,"end":142,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row} | cardinality_error()","returnsReferences":[{"start":12,"end":29,"target":"t:tmux_select:cardinality_error/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate criteria and coverage, then stop after enough local matches to establish cardinality. Returns a tagged cardinality result; performs no I/O."},"source":{"line":241,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-one-2"},{"id":"tmux_select:one_or_error/1","publicId":"tmux_select:one_or_error/1","qualifiedName":"tmux_select:one_or_error/1","name":"one_or_error/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one_or_error(Selection)\n-spec one_or_error(t(Row)) -> Row\n when Row :: tmux_model:row().","references":[{"start":43,"end":44,"target":"t:tmux_select:t/1"},{"start":92,"end":106,"target":"t:tmux_model:row/0"}],"params":[{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"Row","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the sole row directly, raising on zero or multiple matches. Use `one/1` for tagged cardinality errors."},"source":{"line":262,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-one_or_error-1"},{"id":"tmux_select:one_or_error/2","publicId":"tmux_select:one_or_error/2","qualifiedName":"tmux_select:one_or_error/2","name":"one_or_error/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one_or_error(Criteria, Selection)\n-spec one_or_error(criteria(), t(Row)) -> Row\n when Row :: tmux_model:row().","references":[{"start":53,"end":61,"target":"t:tmux_select:criteria/0"},{"start":65,"end":66,"target":"t:tmux_select:t/1"},{"start":114,"end":128,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"Row","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Filter locally with complete validation, then return the sole row directly. Raises on zero or multiple matches; performs no I/O."},"source":{"line":273,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-one_or_error-2"},{"id":"tmux_select:one_or_none/1","publicId":"tmux_select:one_or_none/1","qualifiedName":"tmux_select:one_or_none/1","name":"one_or_none/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one_or_none(Selection)\n-spec one_or_none(t(Row)) ->\n {ok, Row | none} | cardinality_error()\n when Row :: tmux_model:row().","references":[{"start":41,"end":42,"target":"t:tmux_select:t/1"},{"start":92,"end":109,"target":"t:tmux_select:cardinality_error/0"},{"start":145,"end":159,"target":"t:tmux_model:row/0"}],"params":[{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row | none} | cardinality_error()","returnsReferences":[{"start":19,"end":36,"target":"t:tmux_select:cardinality_error/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the sole current row, {ok, none} on absence, or a multiple-match error. Performs no I/O."},"source":{"line":248,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-one_or_none-1"},{"id":"tmux_select:one_or_none/2","publicId":"tmux_select:one_or_none/2","qualifiedName":"tmux_select:one_or_none/2","name":"one_or_none/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one_or_none(Criteria, Selection)\n-spec one_or_none(criteria(), t(Row)) ->\n {ok, Row | none} | cardinality_error()\n when Row :: tmux_model:row().","references":[{"start":51,"end":59,"target":"t:tmux_select:criteria/0"},{"start":63,"end":64,"target":"t:tmux_select:t/1"},{"start":114,"end":131,"target":"t:tmux_select:cardinality_error/0"},{"start":167,"end":181,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row | none} | cardinality_error()","returnsReferences":[{"start":19,"end":36,"target":"t:tmux_select:cardinality_error/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate local criteria and return one row or known absence. A second match is an explicit ambiguity error; performs no I/O."},"source":{"line":255,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-one_or_none-2"},{"id":"tmux_select:panes/1","publicId":"tmux_select:panes/1","qualifiedName":"tmux_select:panes/1","name":"panes/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"panes(Snapshot)\n-spec panes(tmux_snapshot:t()) -> t(tmux_model:pane()).","references":[{"start":28,"end":43,"target":"t:tmux_snapshot:t/0"},{"start":50,"end":51,"target":"t:tmux_select:t/1"},{"start":52,"end":67,"target":"t:tmux_model:pane/0"}],"params":[{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"t(tmux_model:pane())","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"},{"start":2,"end":17,"target":"t:tmux_model:pane/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select captured physical panes while retaining snapshot graph and coverage. Performs no I/O and preserves the snapshot's deterministic order."},"source":{"line":64,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-panes-1"},{"id":"tmux_select:sessions/1","publicId":"tmux_select:sessions/1","qualifiedName":"tmux_select:sessions/1","name":"sessions/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"sessions(Snapshot)\n-spec sessions(tmux_snapshot:t()) ->\n t(tmux_model:session()).","references":[{"start":34,"end":49,"target":"t:tmux_snapshot:t/0"},{"start":74,"end":75,"target":"t:tmux_select:t/1"},{"start":76,"end":94,"target":"t:tmux_model:session/0"}],"params":[{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"t(tmux_model:session())","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"},{"start":2,"end":20,"target":"t:tmux_model:session/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select captured sessions with their relationship and coverage context. Performs no I/O."},"source":{"line":82,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-sessions-1"},{"id":"tmux_select:size/1","publicId":"tmux_select:size/1","qualifiedName":"tmux_select:size/1","name":"size/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"size/1\n-spec size(t()) -> non_neg_integer().","references":[{"start":18,"end":19,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":26,"end":41,"target":"t:erlang:non_neg_integer/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"non_neg_integer()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":0,"end":15,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the cached number of materialized rows in this selection without traversing tmux or re-evaluating criteria."},"source":{"line":192,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-size-1"},{"id":"tmux_select:summary/1","publicId":"tmux_select:summary/1","qualifiedName":"tmux_select:summary/1","name":"summary/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"summary/1\n-spec summary(t()) -> summary().","references":[{"start":24,"end":25,"target":"t:tmux_select:t/0"},{"start":32,"end":39,"target":"t:tmux_select:summary/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"summary()","returnsReferences":[{"start":0,"end":7,"target":"t:tmux_select:summary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return a compact Erlang diagnostic map with entity, size, capture identity, interval and coverage. Fetched queries include candidate/attempt information. Opaque snapshot references make this a diagnostic value, not a wire format."},"source":{"line":200,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-summary-1"},{"id":"tmux_select:take/2","publicId":"tmux_select:take/2","qualifiedName":"tmux_select:take/2","name":"take/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"take/2\n-spec take(non_neg_integer(), t(Row)) -> t(Row)\n when Row :: tmux_model:row().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":18,"end":33,"target":"t:erlang:non_neg_integer/0"},{"start":37,"end":38,"target":"t:tmux_select:t/1"},{"start":48,"end":49,"target":"t:tmux_select:t/1"},{"start":81,"end":95,"target":"t:tmux_model:row/0"}],"params":[{"name":"Count","type":"non_neg_integer()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":0,"end":15,"target":"t:erlang:non_neg_integer/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"t(Row)","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Keep the first N rows and retain the original observation and coverage. Performs no I/O; taking a subset cannot establish missing field coverage."},"source":{"line":185,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-take-2"},{"id":"tmux_select:to_list/1","publicId":"tmux_select:to_list/1","qualifiedName":"tmux_select:to_list/1","name":"to_list/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"to_list/1\n-spec to_list(t(Row)) -> [Row] when Row :: tmux_model:row().","references":[{"start":24,"end":25,"target":"t:tmux_select:t/1"},{"start":53,"end":67,"target":"t:tmux_model:row/0"}],"params":[{"name":"Argument1","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"[Row]","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the current ordered rows as an ordinary Erlang list without I/O. Use list functions or comprehensions for transformations to other value types. Returns the stored rows without copying their binary fields. Keeping only the list allows the selection's snapshot context to be collected; other references can still keep that context alive."},"source":{"line":173,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-to_list-1"},{"id":"tmux_select:try_where/2","publicId":"tmux_select:try_where/2","qualifiedName":"tmux_select:try_where/2","name":"try_where/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"try_where/2\n-spec try_where(criteria(), t(Row)) ->\n {ok, t(Row)} | {error, map()}\n when Row :: tmux_model:row().","references":[{"start":28,"end":36,"target":"t:tmux_select:criteria/0"},{"start":40,"end":41,"target":"t:tmux_select:t/1"},{"start":75,"end":76,"target":"t:tmux_select:t/1"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":93,"end":96,"target":"t:erlang:map/0"},{"start":131,"end":145,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, t(Row)} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_select:t/1"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":23,"end":26,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Apply the same local criteria and coverage checks as `where/2`, returning tagged validation or evaluation errors. It does not catch arbitrary application callback exceptions and never performs tmux I/O."},"source":{"line":129,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-try_where-2"},{"id":"tmux_select:where/2","publicId":"tmux_select:where/2","qualifiedName":"tmux_select:where/2","name":"where/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"where(Criteria, Selection)\n-spec where(criteria(), t(Row)) -> t(Row)\n when Row :: tmux_model:row().","references":[{"start":39,"end":47,"target":"t:tmux_select:criteria/0"},{"start":51,"end":52,"target":"t:tmux_select:t/1"},{"start":62,"end":63,"target":"t:tmux_select:t/1"},{"start":96,"end":110,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"t(Row)","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate portable criteria and coverage, then preserve matching rows in order. Performs no I/O. Malformed trusted criteria raise bad_filter; missing coverage and runtime evaluation failures remain distinct exceptions. Use `try_where/2` for tagged library errors."},"source":{"line":117,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-where-2"},{"id":"tmux_select:window_links/1","publicId":"tmux_select:window_links/1","qualifiedName":"tmux_select:window_links/1","name":"window_links/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"window_links(Snapshot)\n-spec window_links(tmux_snapshot:t()) ->\n t(tmux_model:window_link()).","references":[{"start":42,"end":57,"target":"t:tmux_snapshot:t/0"},{"start":86,"end":87,"target":"t:tmux_select:t/1"},{"start":88,"end":110,"target":"t:tmux_model:window_link/0"}],"params":[{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"t(tmux_model:window_link())","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"},{"start":2,"end":24,"target":"t:tmux_model:window_link/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select all captured session memberships, retaining repeated physical windows and session-relative indexes. Performs no I/O."},"source":{"line":76,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-window_links-1"},{"id":"tmux_select:windows/1","publicId":"tmux_select:windows/1","qualifiedName":"tmux_select:windows/1","name":"windows/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"windows(Snapshot)\n-spec windows(tmux_snapshot:t()) -> t(tmux_model:window()).","references":[{"start":32,"end":47,"target":"t:tmux_snapshot:t/0"},{"start":54,"end":55,"target":"t:tmux_select:t/1"},{"start":56,"end":73,"target":"t:tmux_model:window/0"}],"params":[{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"t(tmux_model:window())","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"},{"start":2,"end":19,"target":"t:tmux_model:window/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select unique captured physical windows with their complete graph context. Performs no I/O; session memberships remain separate window-link rows."},"source":{"line":70,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_select-windows-1"},{"id":"t:tmux_select:cardinality_error/0","publicId":"t:tmux_select:cardinality_error/0","qualifiedName":"tmux_select:cardinality_error/0","name":"cardinality_error/0","namespace":"tmux_select","parent":"tmux_select","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type cardinality_error() ::\n {error,\n no_match | {multiple_matches, #{at_least := 2}}}.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"supporting","source":{"line":47,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_select-cardinality_error-0"},{"id":"t:tmux_select:criteria/0","publicId":"t:tmux_select:criteria/0","qualifiedName":"tmux_select:criteria/0","name":"criteria/0","namespace":"tmux_select","parent":"tmux_select","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type criteria() :: map() | tmux_filter:t().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"},{"start":28,"end":41,"target":"t:tmux_filter:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"supporting","source":{"line":46,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_select-criteria-0"},{"id":"t:tmux_select:summary/0","publicId":"t:tmux_select:summary/0","qualifiedName":"tmux_select:summary/0","name":"summary/0","namespace":"tmux_select","parent":"tmux_select","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type summary() ::\n #{entity := tmux_schema:entity(),\n size := non_neg_integer(),\n snapshot_id := reference() | none,\n coverage := tmux_snapshot:entity_coverage(),\n capture_started => integer(),\n capture_finished => integer(),\n time_unit => microsecond,\n query => tmux_snapshot:query_metadata()}.","params":[],"references":[{"start":41,"end":59,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":83,"end":98,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":129,"end":138,"target":"t:erlang:reference/0"},{"start":173,"end":202,"target":"t:tmux_snapshot:entity_coverage/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":237,"end":244,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":280,"end":287,"target":"t:erlang:integer/0"},{"start":350,"end":378,"target":"t:tmux_snapshot:query_metadata/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Compact local inspection. size counts current materialized rows; coverage still describes the original captured context after filtering or take. snapshot_id is none for a list-backed selection. Capture bounds and query diagnostics are included only when that source metadata exists."},"source":{"line":54,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_select-summary-0"},{"id":"t:tmux_select:t/0","publicId":"t:tmux_select:t/0","qualifiedName":"tmux_select:t/0","name":"t/0","namespace":"tmux_select","parent":"tmux_select","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type t() :: t(tmux_model:row()).","params":[],"references":[{"start":13,"end":14,"target":"t:tmux_select:t/1"},{"start":15,"end":29,"target":"t:tmux_model:row/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A selection over schema-defined native domain records."},"source":{"line":45,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_select-t-0"},{"id":"t:tmux_select:t/1","publicId":"t:tmux_select:t/1","qualifiedName":"tmux_select:t/1","name":"t/1","namespace":"tmux_select","parent":"tmux_select","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t(Row).","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Ordered captured rows with observation and coverage context, not an extensible list protocol. The parameter describes the intended row type. OTP 29 Dialyzer can widen generic return variables to their declared bounds; it does not prove every entity relationship through `one/1` or `to_list/1`. Runtime schema, coverage and action checks remain necessary."},"source":{"line":41,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_select-t-1"},{"id":"tmux_server","publicId":"tmux_server","qualifiedName":"tmux_server","name":"tmux_server","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Open tmux endpoints and execute explicit command values.","body":"`open/1` validates an absolute socket path and the\nexecutable/server versions. It never creates a tmux server or attaches a\ncontrol client. Each command rechecks the observed Linux process incarnation\nbefore dispatch. Replacement between that observation and a later client\nconnection remains possible; same_connection requests are rejected until\npersistent dispatch qualifies.\n\n`start_owned/1` creates a separate private daemon and returns an ownership\ntoken for `stop_owned/1`. The [ownership guide](ownership.md) explains caller\ndeath, application shutdown and namespace cleanup.\n\nUse `with_server/2` or `with_owned/2` for a callback scope. They attempt cleanup\nafter its return or exception and preserve both outcomes if cleanup fails.\n\nThe calling process owns the endpoint. `close/1` cancels queued\nwork, retires its one-shot clients and preserves the borrowed server. Cleanup\nfailure remains explicit and keeps the supervised owner alive. Successful close is\nidempotent during the 60-second handle retention period. Separate\n`m:tmux_control` attachments receive an invalidation notice and begin their\nown retirement. Close those attachments explicitly to prove their native\ncleanup. Command results preserve stdout, stderr and status; cancellation\nafter dispatch cannot undo\nremote effects. Clients explicitly select tmux's UTF-8 mode so Unicode and the\nidentity probe's tab do not depend on the caller's locale. Command-specific\nescaping still applies to raw command output.\n\nUse `snapshot/1` to capture a graph for `m:tmux_snapshot` and\n`m:tmux_select`. Use `m:tmux_operation` for non-blocking submission and\nexplicit waits; the [job guide](jobs.md) explains ownership and cleanup."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server"},{"id":"tmux_server:bind/2","publicId":"tmux_server:bind/2","qualifiedName":"tmux_server:bind/2","name":"bind/2","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"bind(Server, Row)\n-spec bind(t(), tmux_model:row()) ->\n {ok, tmux_model:row()} | {error, map()}.","references":[{"start":29,"end":30,"target":"t:tmux_server:t/0"},{"start":34,"end":48,"target":"t:tmux_model:row/0"},{"start":74,"end":88,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":102,"end":105,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]},{"name":"Row","type":"tmux_model:row()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_model:row/0"}]}],"returns":"{ok, tmux_model:row()} | {error, map()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":33,"end":36,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Explicitly read current fields from this server and register the new value. For sessions, physical windows and panes, the read uses the stable ID and discards the supplied field observations. This explicit call accepts an edited target; ordinary actions require its captured target association to match and reject mismatches before dispatch. The returned row carries a new private observation association; see `m:tmux_model`. It provides no atomic identity check. Window-link binding checks its session/index and expected physical window. A replaced or missing membership returns stale_link. This observed preflight does not make a later action atomic.","body":"Invalid rows are rejected before I/O:","examples":[{"lang":"erlang","code":"1> tmux_server:bind(invalid_server, invalid_row).\n{error,#{code => invalid_row,path => []}}"}]},"source":{"line":350,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-bind-2"},{"id":"tmux_server:close/1","publicId":"tmux_server:close/1","qualifiedName":"tmux_server:close/1","name":"close/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"close(Server)\n-spec close(t()) -> ok | {error, map()}.","references":[{"start":26,"end":27,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":47,"end":50,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Retire this endpoint's operations and one-shot clients, preserving the borrowed tmux server. Returns ok only after their cleanup completes; incomplete cleanup remains an explicit error. Closing an already closed retained handle is idempotent. The initiator controls endpoint lifetime. Separate control attachments are invalidated and asked to retire; use `tmux_control:close/1` before this call to verify those clients' cleanup too."},"source":{"line":267,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-close-1"},{"id":"tmux_server:command/3","publicId":"tmux_server:command/3","qualifiedName":"tmux_server:command/3","name":"command/3","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"command(Server, Command, Options)\n-spec command(t(), tmux_command:t(), command_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":48,"end":49,"target":"t:tmux_server:t/0"},{"start":53,"end":67,"target":"t:tmux_command:t/0"},{"start":71,"end":86,"target":"t:tmux_server:command_options/0"},{"start":115,"end":139,"target":"t:tmux_operation:completed/0"},{"start":170,"end":192,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]},{"name":"Command","type":"tmux_command:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_command:t/0"}]},{"name":"Options","type":"command_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_server:command_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Execute one validated command and await its result. Performs I/O. The result preserves stdout, stderr, exit status and cleanup certainty. Use `tmux_operation:start/3` to submit without blocking this caller. A timeout or cancellation cannot reverse effects that may already have reached tmux. Values from domain command builders keep their captured endpoint origin. Another endpoint returns different_owner with submitted = false before any native preflight or execution. Raw commands do not carry that origin."},"source":{"line":252,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-command-3"},{"id":"tmux_server:open/1","publicId":"tmux_server:open/1","qualifiedName":"tmux_server:open/1","name":"open/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"open(Options)\n-spec open(open_options()) -> {ok, t()} | {error, map()}.","references":[{"start":25,"end":37,"target":"t:tmux_server:open_options/0"},{"start":49,"end":50,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":64,"end":67,"target":"t:erlang:map/0"}],"params":[{"name":"Options","type":"open_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_server:open_options/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Open a borrowed socket endpoint and start its supervised library owner. The caller owns that handle. This probes the executable, daemon version and observed Linux process incarnation; it never starts a tmux server or attaches a control client. Pass an absolute socket_path and optionally an executable."},"source":{"line":114,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-open-1"},{"id":"tmux_server:origin/1","publicId":"tmux_server:origin/1","qualifiedName":"tmux_server:origin/1","name":"origin/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"origin(Server)\n-spec origin(t()) -> {ok, reference()} | {error, map()}.","references":[{"start":28,"end":29,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":41,"end":50,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":64,"end":67,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, reference()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":5,"end":14,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":28,"end":31,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the registered opaque origin for this open endpoint. The token provides library provenance and generation checks, not authorization against trusted Erlang code. It is not a portable identifier."},"source":{"line":282,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-origin-1"},{"id":"tmux_server:snapshot/1","publicId":"tmux_server:snapshot/1","qualifiedName":"tmux_server:snapshot/1","name":"snapshot/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"snapshot(Server)\n-spec snapshot(t()) ->\n {ok, tmux_snapshot:t()} | {error, map()}.","references":[{"start":32,"end":33,"target":"t:tmux_server:t/0"},{"start":63,"end":78,"target":"t:tmux_snapshot:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":92,"end":95,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, tmux_snapshot:t()} | {error, map()}","returnsReferences":[{"start":5,"end":20,"target":"t:tmux_snapshot:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":34,"end":37,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture a complete immutable graph with default capture limits. Performs I/O. See `snapshot/2` for bounds, consistency and conflict errors."},"source":{"line":297,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-snapshot-1"},{"id":"tmux_server:snapshot/2","publicId":"tmux_server:snapshot/2","qualifiedName":"tmux_server:snapshot/2","name":"snapshot/2","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"snapshot(Server, Options)\n-spec snapshot(t(), capture_options()) ->\n {ok, tmux_snapshot:t()} | {error, map()}.","references":[{"start":41,"end":42,"target":"t:tmux_server:t/0"},{"start":46,"end":61,"target":"t:tmux_server:capture_options/0"},{"start":91,"end":106,"target":"t:tmux_snapshot:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":120,"end":123,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]},{"name":"Options","type":"capture_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_server:capture_options/0"}]}],"returns":"{ok, tmux_snapshot:t()} | {error, map()}","returnsReferences":[{"start":5,"end":20,"target":"t:tmux_snapshot:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":34,"end":37,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture the server's sessions, physical windows, window links and panes.","body":"This performs explicit I/O and records each command's observation interval.\nIdentity scans bracket field reads; detected topology or value disagreements\nreturn inconsistent_capture. Changes between reads can remain undetected,\nincluding changes followed by a reversal. Atomic capture is unsupported.\n\nOptions are consistency (observed only), deadline_ms (default 2500, maximum\n600000), max_rows (4096, maximum 65536 raw observations per scan and aggregate\nspine) and max_bytes (8 MiB, maximum 64 MiB total stdout across capture\ncommands). Repeated memberships count before deduplication. The\n`t:hydration/0` strategy defaults to batched. Each command is limited to 1 MiB;\nisolated hydration distributes larger entity output across individual fields.\nThese are data limits, not a VM heap limit. Capturing performs no retry. Local\nreads of the resulting value do no I/O. `tmux_snapshot:metadata/1` records the\nstrategy and actual source calls.\n\nUnsupported consistency is rejected before contacting a server:","examples":[{"lang":"erlang","code":"1> tmux_server:snapshot(invalid_server, #{consistency => atomic}).\n{error,#{code => unsupported_consistency}}"}]},"source":{"line":325,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-snapshot-2"},{"id":"tmux_server:start_owned/1","publicId":"tmux_server:start_owned/1","qualifiedName":"tmux_server:start_owned/1","name":"start_owned/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"start_owned(Options)\n-spec start_owned(owned_options()) ->\n {ok, t(), ownership()} |\n {error, map()}.","references":[{"start":39,"end":52,"target":"t:tmux_server:owned_options/0"},{"start":85,"end":86,"target":"t:tmux_server:t/0"},{"start":90,"end":99,"target":"t:tmux_server:ownership/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":134,"end":137,"target":"t:erlang:map/0"}],"params":[{"name":"Options","type":"owned_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:owned_options/0"}]}],"returns":"{ok, t(), ownership()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_server:t/0"},{"start":10,"end":19,"target":"t:tmux_server:ownership/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":33,"end":36,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Start an empty owned daemon in a fresh private Linux socket directory. Performs I/O and waits for bounded startup; no session or attached observer is created. Returns an ordinary endpoint and a separate `t:ownership/0` token. The caller owns the daemon lifetime: caller death or `stop_owned/1` retires its helper tree. `close/1` only closes the endpoint and preserves the daemon.","body":"The daemon starts without a user config, with `exit-empty` disabled. One idle,\nunattached bootstrap client keeps the owned helper tree alive. Startup includes\nreadiness and endpoint incarnation binding, not just executable launch.\nIncomplete cleanup remains explicit; it is never permission to kill by path.\nAn incomplete startup error includes an ownership token and captured resources\nfor `stop_owned/1` recovery. The token does not serialize across VM lifetimes."},"source":{"line":142,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-start_owned-1"},{"id":"tmux_server:status/1","publicId":"tmux_server:status/1","qualifiedName":"tmux_server:status/1","name":"status/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"status(Server)\n-spec status(t()) ->\n {ok, state()} |\n {error, tmux_operation:failure()}.","references":[{"start":28,"end":29,"target":"t:tmux_server:t/0"},{"start":57,"end":62,"target":"t:tmux_server:state/0"},{"start":92,"end":114,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, state()} | {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_server:state/0"},{"start":24,"end":46,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read the endpoint owner's lifecycle and resource summary. This contacts the library owner, not tmux, and does not refresh captured rows."},"source":{"line":274,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-status-1"},{"id":"tmux_server:stop_owned/1","publicId":"tmux_server:stop_owned/1","qualifiedName":"tmux_server:stop_owned/1","name":"stop_owned/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"stop_owned(Ownership)\n-spec stop_owned(ownership()) -> ok | {error, map()}.","references":[{"start":39,"end":48,"target":"t:tmux_server:ownership/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":68,"end":71,"target":"t:erlang:map/0"}],"params":[{"name":"Ownership","type":"ownership()","typeReferences":[{"start":0,"end":9,"target":"t:tmux_server:ownership/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Stop the daemon and endpoint associated with a `t:ownership/0` token. Performs I/O and returns ok only after endpoint/client/helper retirement and namespace cleanup are proved. It never sends kill-server to a socket path.","body":"A replaced socket/directory or unexpected directory contents are preserved and\nreturn `cleanup_incomplete` with process and namespace details. A supervised\ntombstone retains uncertain cleanup; call again to inspect/retry after external\nrepair. Filesystem identity checks are observations, not atomic reservations\nagainst another trusted process replacing a path during unlink.\n\nSuccessful stop is idempotent during the 60-second token retention period.\nAfter token expiry or application shutdown, returns `ownership_expired`.\nStop explicitly before application shutdown when the caller needs a verified\ncleanup result. OTP application shutdown itself does not prove native cleanup.\nIncomplete shutdown writes a private recovery report outside the owned socket\ndirectory and logs its location or write failure; no automatic recovery runs."},"source":{"line":163,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-stop_owned-1"},{"id":"tmux_server:version/1","publicId":"tmux_server:version/1","qualifiedName":"tmux_server:version/1","name":"version/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"version(Server)\n-spec version(t()) ->\n {ok, tmux_version:t()} | {error, map()}.","references":[{"start":30,"end":31,"target":"t:tmux_server:t/0"},{"start":60,"end":74,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":88,"end":91,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, tmux_version:t()} | {error, map()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":33,"end":36,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the daemon version observed when the endpoint opened. This reads owner state and does not execute a fresh version command or qualify another tmux release."},"source":{"line":290,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-version-1"},{"id":"tmux_server:with_owned/2","publicId":"tmux_server:with_owned/2","qualifiedName":"tmux_server:with_owned/2","name":"with_owned/2","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"with_owned(Options, Function)\n-spec with_owned(owned_options(), fun((t()) -> Value)) ->\n {ok, Value} |\n {error, scope_failure() | map()}.","references":[{"start":47,"end":60,"target":"t:tmux_server:owned_options/0"},{"start":69,"end":70,"target":"t:tmux_server:t/0"},{"start":150,"end":163,"target":"t:tmux_server:scope_failure/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":168,"end":171,"target":"t:erlang:map/0"}],"params":[{"name":"Options","type":"owned_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:owned_options/0"}]},{"name":"Function","type":"fun((t()) -> Value)","typeReferences":[{"start":5,"end":6,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, Value} | {error, scope_failure() | map()}","returnsReferences":[{"start":22,"end":35,"target":"t:tmux_server:scope_failure/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":40,"end":43,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Start an owned daemon, run a callback in the calling process, then stop it. Performs `start_owned/1` and token-based `stop_owned/1` around the callback. With successful cleanup, returns {ok, Value} or re-raises the original callback exception. A returned error tuple is an ordinary callback value. Startup failure passes through without invoking the callback.","body":"Cleanup failure returns `t:scope_failure/0`, including both server and ownership\nhandles for inspection and an explicit stop retry. It preserves the callback\noutcome and cleanup evidence separately; it never claims timeout is retirement.\nSee `with_server/2` for callback and separately allocated resource obligations."},"source":{"line":204,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-with_owned-2"},{"id":"tmux_server:with_server/2","publicId":"tmux_server:with_server/2","qualifiedName":"tmux_server:with_server/2","name":"with_server/2","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"with_server(Options, Function)\n-spec with_server(open_options(), fun((t()) -> Value)) ->\n {ok, Value} |\n {error, scope_failure() | map()}.","references":[{"start":49,"end":61,"target":"t:tmux_server:open_options/0"},{"start":70,"end":71,"target":"t:tmux_server:t/0"},{"start":153,"end":166,"target":"t:tmux_server:scope_failure/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":171,"end":174,"target":"t:erlang:map/0"}],"params":[{"name":"Options","type":"open_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_server:open_options/0"}]},{"name":"Function","type":"fun((t()) -> Value)","typeReferences":[{"start":5,"end":6,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, Value} | {error, scope_failure() | map()}","returnsReferences":[{"start":22,"end":35,"target":"t:tmux_server:scope_failure/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":40,"end":43,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Open a borrowed endpoint, run a callback in the calling process, then close it. Performs the same I/O as `open/1` and `close/1`; the borrowed daemon survives. Startup failure passes through without invoking the callback.","body":"With successful cleanup, returns {ok, Value} for any callback return value,\nincluding a returned error tuple. Callback error, throw and exit exceptions\nare re-raised with their original reason and stack. If cleanup fails, returns\n{error, Failure} with `t:scope_failure/0`, preserving both outcomes and the\nendpoint for explicit recovery. It attempts cleanup once; a timeout does not\nprove retirement. Existing supervised cleanup ownership remains in force.\n\nThe callback must retire separately created resources such as `m:tmux_control`\nattachments. This scope closes its endpoint, not every resource the callback\nmay allocate. Use `with_owned/2` when the scope should own the daemon too."},"source":{"line":183,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_server-with_server-2"},{"id":"t:tmux_server:capture_options/0","publicId":"t:tmux_server:capture_options/0","qualifiedName":"tmux_server:capture_options/0","name":"capture_options/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type capture_options() ::\n #{deadline_ms => 1..600000,\n max_rows => 1..65536,\n max_bytes => 1..67108864,\n hydration => hydration(),\n consistency => observed | atomic}.","params":[],"references":[{"start":162,"end":171,"target":"t:tmux_server:hydration/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture bounds, hydration strategy and consistency request. Atomic capture is unsupported."},"source":{"line":85,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_server-capture_options-0"},{"id":"t:tmux_server:command_options/0","publicId":"t:tmux_server:command_options/0","qualifiedName":"tmux_server:command_options/0","name":"command_options/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type command_options() ::\n #{deadline_ms => 1..600000,\n max_stdout => 0..1048576,\n max_stderr => 0..65536,\n stdin => binary(),\n identity => observed | same_connection}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":160,"end":166,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Command options: deadline_ms defaults to 2500, max_stdout to 1 MiB, max_stderr to 64 KiB, stdin to an empty binary and identity to observed. The deadline includes admission, preflight and execution. stdin is limited to 256 KiB; stdin plus the rendered argument reservation must also fit 256 KiB. Each endpoint admits at most 64 operations and 256 KiB of command payload; exhaustion returns busy. same_connection is recognized but unsupported."},"source":{"line":74,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_server-command_options-0"},{"id":"t:tmux_server:hydration/0","publicId":"t:tmux_server:hydration/0","qualifiedName":"tmux_server:hydration/0","name":"hydration/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type hydration() :: batched | isolated.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture text/bytes with one framed scan per entity (batched, the default), or one field per physical row (isolated). Both retain complete graph coverage and interval semantics. Each command has the same 1 MiB stdout bound; isolated can distribute large entity output across commands at greater source cost. See `snapshot/2` and `tmux_query:explain/1`."},"source":{"line":83,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_server-hydration-0"},{"id":"t:tmux_server:open_options/0","publicId":"t:tmux_server:open_options/0","qualifiedName":"tmux_server:open_options/0","name":"open_options/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type open_options() ::\n #{socket_path := binary(),\n executable => binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":51,"end":57,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":87,"end":93,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"An explicit absolute socket endpoint and optional absolute tmux executable path."},"source":{"line":58,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_server-open_options-0"},{"id":"t:tmux_server:owned_options/0","publicId":"t:tmux_server:owned_options/0","qualifiedName":"tmux_server:owned_options/0","name":"owned_options/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type owned_options() ::\n #{executable => binary(),\n startup_timeout_ms => 1..600000}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":51,"end":57,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Owned startup options. The finite startup budget defaults to 2500 milliseconds."},"source":{"line":60,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_server-owned_options-0"},{"id":"t:tmux_server:ownership/0","publicId":"t:tmux_server:ownership/0","qualifiedName":"tmux_server:ownership/0","name":"ownership/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque ownership().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Opaque ownership token for `stop_owned/1`. An ordinary endpoint or row origin does not convey this token. Trusted code can pass it to another process."},"source":{"line":65,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_server-ownership-0"},{"id":"t:tmux_server:scope_failure/0","publicId":"t:tmux_server:scope_failure/0","qualifiedName":"tmux_server:scope_failure/0","name":"scope_failure/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type scope_failure() ::\n #{code := scope_cleanup_failed,\n primary :=\n {ok, term()} |\n {exception,\n error | exit | throw,\n term(),\n erlang:stacktrace()},\n cleanup :=\n {error, map()} |\n {exception,\n error | exit | throw,\n term(),\n erlang:stacktrace()},\n server := t(),\n ownership => ownership()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":111,"end":115,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":205,"end":209,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:stacktrace/0","project":"Erlang/OTP"},"start":230,"end":247,"target":"t:erlang:stacktrace/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":299,"end":302,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":392,"end":396,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:stacktrace/0","project":"Erlang/OTP"},"start":417,"end":434,"target":"t:erlang:stacktrace/0"},{"start":461,"end":462,"target":"t:tmux_server:t/0"},{"start":491,"end":500,"target":"t:tmux_server:ownership/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Both callback and cleanup evidence when a scope cannot prove retirement. primary is the callback value or its exception class, reason and original stack. cleanup preserves the operational error or a separate cleanup exception. server permits `close/1` reconciliation; owned scopes also include ownership for `stop_owned/1`. Retain these handles until cleanup is resolved."},"source":{"line":53,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_server-scope_failure-0"},{"id":"t:tmux_server:state/0","publicId":"t:tmux_server:state/0","qualifiedName":"tmux_server:state/0","name":"state/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type state() ::\n #{phase := open | closing | closed,\n generation := reference(),\n owner := pid(),\n operations := non_neg_integer(),\n command_bytes := non_neg_integer(),\n active_bytes := non_neg_integer(),\n retained_results := non_neg_integer(),\n result_bytes := non_neg_integer()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":89,"end":98,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pid/0","project":"Erlang/OTP"},"start":123,"end":126,"target":"t:erlang:pid/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":156,"end":171,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":204,"end":219,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":251,"end":266,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":302,"end":317,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":349,"end":364,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Endpoint resource summary. owner is the supervised endpoint process, not its initiating caller. operations and command_bytes count active admission leases; active_bytes reserves output capacity. Retired results are bounded separately by retained_results and result_bytes. These are accounting limits, not VM heap measurements. generation identifies this endpoint handle's lifetime."},"source":{"line":94,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_server-state-0"},{"id":"t:tmux_server:t/0","publicId":"t:tmux_server:t/0","qualifiedName":"tmux_server:t/0","name":"t/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A supervised borrowed-endpoint handle bound to an owner generation and admission state."},"source":{"line":103,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_server-t-0"},{"id":"tmux_session","publicId":"tmux_session","qualifiedName":"tmux_session","name":"tmux_session","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Create and observe sessions, or act on a session's registered stable ID.","body":"`create/2` accepts name, window_name, width, height, cwd, env,\nlaunch and detach. Creation defaults to detached with tmux's configured\nshell/command. launch is default_shell, an argv map, or an explicit shell map.\nenv augments tmux's inherited environment. tmux supplies PATH, SHELL, PWD and\nTMUX_PANE after that merge, so those entries may be replaced. Names and cwd\nare literal format values; tmux's stored name rules still apply. Creation\nnever adopts an existing session by name.\n\nAn empty shell command can exit immediately and remove its session. It does\nnot request the empty-pane behavior of split-window. Use a running program\nwhen later operations require the session to remain alive.\n\n`create/2` and `get/2` explicitly read the\nnew/current row through several one-shot commands. These reads are not atomic.\nIf creation succeeds but observation fails, the error retains mutation =\ncompleted and the original command result. `rename/2` and\n`kill/1` return command results without refreshing the input\nrecord. Detached rows require `tmux_server:bind/2` before actions.\n`rename_command/2` builds a reusable value without tmux I/O; the other calls\nperform I/O after validation.\n\n`select/2` switches one explicitly named attached client to a session. It\nnever attaches a client or infers the current client. Use\n`tmux_window_link:select/1` to select a session's window membership instead."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_session"},{"id":"tmux_session:create/2","publicId":"tmux_session:create/2","qualifiedName":"tmux_session:create/2","name":"create/2","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"create(Server, Options)\n-spec create(tmux_server:t(), create_options()) ->\n {ok, tmux_model:session()} | {error, map()}.","references":[{"start":37,"end":50,"target":"t:tmux_server:t/0"},{"start":54,"end":68,"target":"t:tmux_session:create_options/0"},{"start":96,"end":114,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":128,"end":131,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Options","type":"create_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_session:create_options/0"}]}],"returns":"{ok, tmux_model:session()} | {error, map()}","returnsReferences":[{"start":5,"end":23,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":37,"end":40,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Create a detached session by default and explicitly observe the returned row. Options include name, window_name, dimensions, cwd, env and launch. Performs I/O; an observation failure after successful creation retains mutation = completed and the original command result. Existing names are not adopted."},"source":{"line":48,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_session-create-2"},{"id":"tmux_session:get/2","publicId":"tmux_session:get/2","qualifiedName":"tmux_session:get/2","name":"get/2","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"get(Server, Id)\n-spec get(tmux_server:t(), tmux_model:session_id()) ->\n {ok, tmux_model:session()} | {error, map()}.","references":[{"start":26,"end":39,"target":"t:tmux_server:t/0"},{"start":43,"end":64,"target":"t:tmux_model:session_id/0"},{"start":89,"end":107,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":121,"end":124,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Id","type":"tmux_model:session_id()","typeReferences":[{"start":0,"end":21,"target":"t:tmux_model:session_id/0"}]}],"returns":"{ok, tmux_model:session()} | {error, map()}","returnsReferences":[{"start":5,"end":23,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":37,"end":40,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read fresh session fields through explicit one-shot commands. The session ID is stable within the observed server incarnation. Returns target_gone when tmux no longer has that session; it never refreshes an existing record."},"source":{"line":64,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_session-get-2"},{"id":"tmux_session:kill/1","publicId":"tmux_session:kill/1","qualifiedName":"tmux_session:kill/1","name":"kill/1","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"kill(Session)\n-spec kill(tmux_model:session()) ->\n {ok, map()} | {error, map()}.","references":[{"start":25,"end":43,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":69,"end":72,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":86,"end":89,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Destroy this registered session. Performs I/O and returns the command result; this is a destructive session action, not endpoint cleanup. References must belong to a live registered owner."},"source":{"line":170,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_session-kill-1"},{"id":"tmux_session:rename/2","publicId":"tmux_session:rename/2","qualifiedName":"tmux_session:rename/2","name":"rename/2","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"rename(Session, Name)\n-spec rename(tmux_model:session(), binary()) ->\n {ok, map()} | {error, map()}.","references":[{"start":35,"end":53,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":57,"end":63,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":91,"end":94,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":108,"end":111,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Rename the registered session using a literal name and return the command result. Performs I/O. Previously captured records keep their old names; detached or stale references fail validation before the action."},"source":{"line":72,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_session-rename-2"},{"id":"tmux_session:rename_command/2","publicId":"tmux_session:rename_command/2","qualifiedName":"tmux_session:rename_command/2","name":"rename_command/2","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"rename_command(Session, Name)\n-spec rename_command(tmux_model:session(), binary()) ->\n {ok, tmux_command:t()} |\n {error, map()}.","references":[{"start":51,"end":69,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":73,"end":79,"target":"t:erlang:binary/0"},{"start":115,"end":129,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":167,"end":170,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_command:t()} | {error, map()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":33,"end":36,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Build a literal rename command without tmux I/O. Validates the row and keeps its captured origin; endpoint liveness is checked during execution. Submit the value to `tmux_server:command/3` or `tmux_operation:start/3` with its original endpoint. Existing session records retain their captured name.","body":"Detached rows require `tmux_server:bind/2` first. Building a command does not\nexecute it or make a repeated mutation safe.","examples":[{"lang":"erlang","code":"1> tmux_session:rename_command(invalid_row, <<\"work\">>).\n{error,#{code => invalid_row,path => []}}"}]},"source":{"line":93,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_session-rename_command-2"},{"id":"tmux_session:select/2","publicId":"tmux_session:select/2","qualifiedName":"tmux_session:select/2","name":"select/2","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"select(Session, Client)\n-spec select(tmux_model:session(), binary()) ->\n {ok, map()} | {error, map()}.","references":[{"start":37,"end":55,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":59,"end":65,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":93,"end":96,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":110,"end":113,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Client","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Switch an explicitly named attached client to this registered session, preserving the session environment. Performs I/O. See `select/3` for client lookup, environment updates and disconnection races.","body":"An empty client name cannot select an implicit current client:","examples":[{"lang":"erlang","code":"1> tmux_session:select(invalid_session, <<>>).\n{error,#{code => invalid_client,path => [client]}}"}]},"source":{"line":113,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_session-select-2"},{"id":"tmux_session:select/3","publicId":"tmux_session:select/3","qualifiedName":"tmux_session:select/3","name":"select/3","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"select(Session, Client, Options)\n-spec select(tmux_model:session(),\n binary(),\n select_options()) ->\n {ok, map()} | {error, map()}.","references":[{"start":46,"end":64,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":81,"end":87,"target":"t:erlang:binary/0"},{"start":104,"end":118,"target":"t:tmux_session:select_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":146,"end":149,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":163,"end":166,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Client","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Options","type":"select_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_session:select_options/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Switch one attached client, selected by its literal native client name or TTY path, to the session's registered stable ID. Performs I/O and returns the command result; existing rows remain captured values. Obtain the name from the caller's own client context, such as tmux's `client_name` format. There is no default client and this call never attaches one.","body":"`update_environment` defaults to false (`switch-client -E`). When true, tmux\nupdates the destination session environment using its `update-environment`\noption and that client's environment; listed variables absent from the client\ncan be marked for removal. Running pane processes retain their environment.\n\nNames are nonempty NUL-free binaries of at most 32 KiB. Trailing-colon aliases\nare rejected. Native lookup matches an exact name or TTY path, including its\n`/dev/`-relative alias; there is no prefix or pattern matching. A disconnected\nname returns `client_not_found`. Names and TTY paths can be reused by a later\nconnection; this API does not identify a client incarnation atomically. A\nmissing destination returns `target_gone`. See `tmux_server:bind/2` for detached\nsession rows and `tmux_window_link:select/1` for window selection."},"source":{"line":137,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_session-select-3"},{"id":"t:tmux_session:create_options/0","publicId":"t:tmux_session:create_options/0","qualifiedName":"tmux_session:create_options/0","name":"create_options/0","namespace":"tmux_session","parent":"tmux_session","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type create_options() ::\n #{name => binary(),\n window_name => binary(),\n width => 1..65535,\n height => 1..65535,\n cwd => binary(),\n env => #{binary() => binary()},\n launch => tmux_command:launch_spec(),\n detach => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":46,"end":52,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":83,"end":89,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":175,"end":181,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":206,"end":212,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":218,"end":224,"target":"t:erlang:binary/0"},{"start":251,"end":275,"target":"t:tmux_command:launch_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":301,"end":308,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Session creation options. Launch defaults to the configured shell; creation defaults to detached."},"source":{"line":34,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_session-create_options-0"},{"id":"t:tmux_session:select_options/0","publicId":"t:tmux_session:select_options/0","qualifiedName":"tmux_session:select_options/0","name":"select_options/0","namespace":"tmux_session","parent":"tmux_session","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type select_options() ::\n #{update_environment => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":60,"end":67,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Session selection options. update_environment defaults to false, preserving the destination environment."},"source":{"line":39,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_session-select_options-0"},{"id":"tmux_snapshot","publicId":"tmux_snapshot","qualifiedName":"tmux_snapshot","name":"tmux_snapshot","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Read an immutable captured graph without performing tmux I/O.","body":"Server-wide lists use numeric ID order. Window links retain every membership,\nincluding multiple indexes for the same window in one session. Session windows\nare unique in first-link order; panes within a window use pane index order.\n`related/3` accepts a row from this snapshot and returns a\ntagged result. A row from another observation cannot silently select a\nrelationship in this one.\n\n`metadata/1` records source calls, the capture interval,\nendpoint generation and the observed server incarnation. Captures span\ncommands and are not atomic. Values remain readable after their endpoint\ncloses; actions still validate the row's registered origin. Coverage\ndistinguishes unloaded data from an empty collection and unavailable fields\nfrom known absence. See the [graph guide](graph.md) for physical windows and\nsession memberships."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_snapshot"},{"id":"tmux_snapshot:coverage/1","publicId":"tmux_snapshot:coverage/1","qualifiedName":"tmux_snapshot:coverage/1","name":"coverage/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"coverage/1\n-spec coverage(t()) -> coverage().","references":[{"start":26,"end":27,"target":"t:tmux_snapshot:t/0"},{"start":34,"end":42,"target":"t:tmux_snapshot:coverage/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"coverage()","returnsReferences":[{"start":0,"end":8,"target":"t:tmux_snapshot:coverage/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return per-collection, field and relationship coverage. Loaded values, known absence, not_loaded and unavailable capabilities have distinct meanings. Performs no I/O."},"source":{"line":181,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_snapshot-coverage-1"},{"id":"tmux_snapshot:get/3","publicId":"tmux_snapshot:get/3","qualifiedName":"tmux_snapshot:get/3","name":"get/3","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"get/3\n-spec get(tmux_schema:entity(), term(), t()) ->\n {ok, tmux_model:row()} | none | {error, map()}.","references":[{"start":16,"end":34,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":38,"end":42,"target":"t:erlang:term/0"},{"start":46,"end":47,"target":"t:tmux_snapshot:t/0"},{"start":72,"end":86,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":107,"end":110,"target":"t:erlang:map/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Key","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]},{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"{ok, tmux_model:row()} | none | {error, map()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":40,"end":43,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Look up a row in this capture by ID, or a session/index/window tuple for a window link. Returns none for a known missing identity and a tagged coverage error for an unloaded collection. Performs no I/O."},"source":{"line":132,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_snapshot-get-3"},{"id":"tmux_snapshot:metadata/1","publicId":"tmux_snapshot:metadata/1","qualifiedName":"tmux_snapshot:metadata/1","name":"metadata/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"metadata/1\n-spec metadata(t()) -> metadata().","references":[{"start":26,"end":27,"target":"t:tmux_snapshot:t/0"},{"start":34,"end":42,"target":"t:tmux_snapshot:metadata/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"metadata()","returnsReferences":[{"start":0,"end":8,"target":"t:tmux_snapshot:metadata/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return capture identity, server generation, source calls, capabilities and read interval metadata. Does not refresh the graph or imply atomic capture."},"source":{"line":174,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_snapshot-metadata-1"},{"id":"tmux_snapshot:panes/1","publicId":"tmux_snapshot:panes/1","qualifiedName":"tmux_snapshot:panes/1","name":"panes/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"panes(Snapshot)\n-spec panes(t()) -> [tmux_model:pane()].","references":[{"start":28,"end":29,"target":"t:tmux_snapshot:t/0"},{"start":37,"end":52,"target":"t:tmux_model:pane/0"}],"params":[{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"[tmux_model:pane()]","returnsReferences":[{"start":1,"end":16,"target":"t:tmux_model:pane/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return unique captured physical panes in numeric ID order without I/O. `related/3` orders panes within a window by pane index."},"source":{"line":111,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_snapshot-panes-1"},{"id":"tmux_snapshot:related/3","publicId":"tmux_snapshot:related/3","qualifiedName":"tmux_snapshot:related/3","name":"related/3","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"related/3\n-spec related(atom(), tmux_model:row(), t()) ->\n {ok,\n [tmux_model:row()] |\n tmux_model:row() |\n none} |\n {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":24,"end":28,"target":"t:erlang:atom/0"},{"start":32,"end":46,"target":"t:tmux_model:row/0"},{"start":50,"end":51,"target":"t:tmux_snapshot:t/0"},{"start":99,"end":113,"target":"t:tmux_model:row/0"},{"start":137,"end":151,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":207,"end":210,"target":"t:erlang:map/0"}],"params":[{"name":"Relation","type":"atom()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:atom/0"}]},{"name":"Row","type":"tmux_model:row()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_model:row/0"}]},{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"{ok,\n [tmux_model:row()] | tmux_model:row() | none} |\n {error, map()}","returnsReferences":[{"start":17,"end":31,"target":"t:tmux_model:row/0"},{"start":37,"end":51,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":82,"end":85,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Traverse a complete captured relationship without I/O. To-many relations return lists; to-one relations return a row or known absence. The input row must belong to this snapshot. Unloaded relations and mismatched rows return tagged errors."},"source":{"line":149,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_snapshot-related-3"},{"id":"tmux_snapshot:require/2","publicId":"tmux_snapshot:require/2","qualifiedName":"tmux_snapshot:require/2","name":"require/2","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"require/2\n-spec require([requirement()], t()) -> ok | {error, map()}.","references":[{"start":25,"end":36,"target":"t:tmux_snapshot:requirement/0"},{"start":41,"end":42,"target":"t:tmux_snapshot:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":62,"end":65,"target":"t:erlang:map/0"}],"params":[{"name":"Requirements","type":"[requirement()]","typeReferences":[{"start":1,"end":12,"target":"t:tmux_snapshot:requirement/0"}]},{"name":"Argument2","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Check every declared collection/field/relationship requirement before local evaluation. Returns an incomplete_snapshot error with missing requirements when the capture cannot answer faithfully. Performs no I/O, even on empty data."},"source":{"line":190,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_snapshot-require-2"},{"id":"tmux_snapshot:rows/2","publicId":"tmux_snapshot:rows/2","qualifiedName":"tmux_snapshot:rows/2","name":"rows/2","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"rows/2\n-spec rows(tmux_schema:entity(), t()) -> [tmux_model:row()].","references":[{"start":18,"end":36,"target":"t:tmux_schema:entity/0"},{"start":40,"end":41,"target":"t:tmux_snapshot:t/0"},{"start":49,"end":63,"target":"t:tmux_model:row/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"[tmux_model:row()]","returnsReferences":[{"start":1,"end":15,"target":"t:tmux_model:row/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return a captured collection by schema entity. Performs no I/O. An unloaded collection raises incomplete_snapshot rather than appearing empty."},"source":{"line":118,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_snapshot-rows-2"},{"id":"tmux_snapshot:sessions/1","publicId":"tmux_snapshot:sessions/1","qualifiedName":"tmux_snapshot:sessions/1","name":"sessions/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"sessions(Snapshot)\n-spec sessions(t()) -> [tmux_model:session()].","references":[{"start":34,"end":35,"target":"t:tmux_snapshot:t/0"},{"start":43,"end":61,"target":"t:tmux_model:session/0"}],"params":[{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"[tmux_model:session()]","returnsReferences":[{"start":1,"end":19,"target":"t:tmux_model:session/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return captured sessions in numeric ID order. Performs no I/O and raises incomplete_snapshot when that collection was not captured."},"source":{"line":92,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_snapshot-sessions-1"},{"id":"tmux_snapshot:window_links/1","publicId":"tmux_snapshot:window_links/1","qualifiedName":"tmux_snapshot:window_links/1","name":"window_links/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"window_links(Snapshot)\n-spec window_links(t()) -> [tmux_model:window_link()].","references":[{"start":42,"end":43,"target":"t:tmux_snapshot:t/0"},{"start":51,"end":73,"target":"t:tmux_model:window_link/0"}],"params":[{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"[tmux_model:window_link()]","returnsReferences":[{"start":1,"end":23,"target":"t:tmux_model:window_link/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return every captured membership, ordered by numeric session ID, index and window ID. Multiple links to the same physical window are preserved. Performs no I/O; link identity belongs to this snapshot."},"source":{"line":105,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_snapshot-window_links-1"},{"id":"tmux_snapshot:windows/1","publicId":"tmux_snapshot:windows/1","qualifiedName":"tmux_snapshot:windows/1","name":"windows/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"windows(Snapshot)\n-spec windows(t()) -> [tmux_model:window()].","references":[{"start":32,"end":33,"target":"t:tmux_snapshot:t/0"},{"start":41,"end":58,"target":"t:tmux_model:window/0"}],"params":[{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"[tmux_model:window()]","returnsReferences":[{"start":1,"end":18,"target":"t:tmux_model:window/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return unique captured physical windows in numeric ID order. Performs no I/O. Use `window_links/1` for session-relative membership and indexes."},"source":{"line":98,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_snapshot-windows-1"},{"id":"t:tmux_snapshot:coverage/0","publicId":"t:tmux_snapshot:coverage/0","qualifiedName":"tmux_snapshot:coverage/0","name":"coverage/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type coverage() ::\n #{tmux_schema:entity() => entity_coverage()}.","params":[],"references":[{"start":32,"end":50,"target":"t:tmux_schema:entity/0"},{"start":56,"end":71,"target":"t:tmux_snapshot:entity_coverage/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Per-entity coverage. Use `require/2` to check requirements before evaluation."},"source":{"line":53,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_snapshot-coverage-0"},{"id":"t:tmux_snapshot:entity_coverage/0","publicId":"t:tmux_snapshot:entity_coverage/0","qualifiedName":"tmux_snapshot:entity_coverage/0","name":"entity_coverage/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type entity_coverage() ::\n #{collection := complete | not_loaded,\n fields :=\n #{atom() =>\n loaded | not_loaded | unavailable},\n relations :=\n #{atom() => complete | not_loaded}}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":116,"end":120,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":227,"end":231,"target":"t:erlang:atom/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Collection completeness, field availability and relationship completeness. A loaded field can hold a known value or known absence; inspect the row to distinguish them. not_loaded never means empty, and unavailable never means known absence. Completeness is relative to the captured source collection."},"source":{"line":49,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_snapshot-entity_coverage-0"},{"id":"t:tmux_snapshot:metadata/0","publicId":"t:tmux_snapshot:metadata/0","qualifiedName":"tmux_snapshot:metadata/0","name":"metadata/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type metadata() ::\n #{id := reference(),\n origin := reference(),\n model_version := 2,\n graph := complete | partial,\n generation => reference(),\n endpoint => #{socket_path := binary()},\n server_instance => tmux_identity:t(),\n tmux_version => tmux_version:t(),\n capture_started => integer(),\n capture_finished => integer(),\n time_unit => microsecond,\n source_calls => [source_call()],\n observed_bytes => non_neg_integer(),\n consistency => observed,\n hydration => tmux_server:hydration(),\n capabilities =>\n #{field_schema := 1,\n identity := observed,\n capture := observed},\n query => query_metadata(),\n atom() => term()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":38,"end":47,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":73,"end":82,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":185,"end":194,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":239,"end":245,"target":"t:erlang:binary/0"},{"start":281,"end":296,"target":"t:tmux_identity:t/0"},{"start":328,"end":342,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":377,"end":384,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":420,"end":427,"target":"t:erlang:integer/0"},{"start":498,"end":509,"target":"t:tmux_snapshot:source_call/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":544,"end":559,"target":"t:erlang:non_neg_integer/0"},{"start":625,"end":646,"target":"t:tmux_server:hydration/0"},{"start":816,"end":830,"target":"t:tmux_snapshot:query_metadata/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":846,"end":850,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":856,"end":860,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture identity and provenance. id identifies this snapshot, origin its registered endpoint and generation the endpoint lifetime. model_version names the row representation. graph describes relationship coverage, not atomicity.","body":"Live captures include endpoint, observed server_instance, tmux_version,\nmonotonic capture bounds in time_unit, source_calls, observed stdout bytes and\ncapabilities. Those fields can be absent in internally constructed partial\ncaptures. Query captures also include `t:query_metadata/0`. Opaque references\nand process identities are local values, not portable wire identifiers.\nhydration records the requested `t:tmux_server:hydration/0` strategy; source_calls\nshows which commands actually ran, including any schema-driven fallback."},"source":{"line":77,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_snapshot-metadata-0"},{"id":"t:tmux_snapshot:query_metadata/0","publicId":"t:tmux_snapshot:query_metadata/0","qualifiedName":"tmux_snapshot:query_metadata/0","name":"query_metadata/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type query_metadata() ::\n #{candidate_count := non_neg_integer(),\n pushed_down := boolean(),\n attempt := 1 | 2,\n consistency := observed}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":57,"end":72,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":103,"end":110,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Source-query capture diagnostics. candidate_count is the deduplicated candidate identity count before local residuals and limits. pushed_down records a nontrivial native condition in the plan, not proof that its command ran: empty collections can skip it. source_calls records actual capture commands. The flag does not mean the full predicate was translated. attempt starts at one and increases only for an explicitly requested retry."},"source":{"line":62,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_snapshot-query_metadata-0"},{"id":"t:tmux_snapshot:requirement/0","publicId":"t:tmux_snapshot:requirement/0","qualifiedName":"tmux_snapshot:requirement/0","name":"requirement/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type requirement() ::\n {collection, tmux_schema:entity()} |\n {field | relation, tmux_schema:entity(), atom()}.","params":[],"references":[{"start":46,"end":64,"target":"t:tmux_schema:entity/0"},{"start":99,"end":117,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":121,"end":125,"target":"t:erlang:atom/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A collection, field or complete relationship needed for faithful local evaluation."},"source":{"line":34,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_snapshot-requirement-0"},{"id":"t:tmux_snapshot:source_call/0","publicId":"t:tmux_snapshot:source_call/0","qualifiedName":"tmux_snapshot:source_call/0","name":"source_call/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type source_call() ::\n #{command := binary(),\n args := [binary()],\n started := integer(),\n finished := integer(),\n stdout_bytes := non_neg_integer()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":46,"end":52,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":77,"end":83,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":111,"end":118,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":146,"end":153,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":185,"end":200,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"One completed capture command and its stdout byte count. started and finished are local monotonic microseconds, not wall-clock timestamps. The interval includes identity preflight and command completion; it is not an atomic read."},"source":{"line":41,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_snapshot-source_call-0"},{"id":"t:tmux_snapshot:t/0","publicId":"t:tmux_snapshot:t/0","qualifiedName":"tmux_snapshot:t/0","name":"t/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"An immutable captured graph with identity, indexes, coverage and source intervals."},"source":{"line":28,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_snapshot-t-0"},{"id":"tmux_version","publicId":"tmux_version","qualifiedName":"tmux_version","name":"tmux_version","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Parse the output of tmux -V without invoking tmux.","body":"Support covers tmux 3.3a through 3.8, including intermediate releases. The\nminimum-version check includes the patch letter; numeric feature comparisons\nuse major/minor components. CI tests the endpoints of the supported range. Use\n`tmux_server:version/1` for the daemon version observed by an endpoint."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_version.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_version"},{"id":"tmux_version:at_least/2","publicId":"tmux_version:at_least/2","qualifiedName":"tmux_version:at_least/2","name":"at_least/2","namespace":"tmux_version","parent":"tmux_version","kind":"function","modifiers":[],"signatures":[{"raw":"at_least/2\n-spec at_least(t(),\n {non_neg_integer(), non_neg_integer()}) ->\n boolean().","references":[{"start":26,"end":27,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":47,"end":62,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":66,"end":81,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":107,"end":114,"target":"t:erlang:boolean/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_version:t/0"}]},{"name":"Argument2","type":"{non_neg_integer(), non_neg_integer()}","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":1,"end":16,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":20,"end":35,"target":"t:erlang:non_neg_integer/0"}]}],"returns":"boolean()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Compare numeric major/minor components with a required floor. Patch letters do not promote an older minor release. Performs no I/O."},"source":{"line":73,"file":"apps/libtmux_erlang/src/tmux_version.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_version-at_least-2"},{"id":"tmux_version:parse/1","publicId":"tmux_version:parse/1","qualifiedName":"tmux_version:parse/1","name":"parse/1","namespace":"tmux_version","parent":"tmux_version","kind":"function","modifiers":[],"signatures":[{"raw":"parse/1\n-spec parse(binary()) ->\n {ok, t()} |\n {error, {invalid_tmux_version, term()}}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":20,"end":26,"target":"t:erlang:binary/0"},{"start":53,"end":54,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":106,"end":110,"target":"t:erlang:term/0"}],"params":[{"name":"Raw","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, t()} |\n {error, {invalid_tmux_version, term()}}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":53,"end":57,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Parse bounded tmux -V output into numeric components and patch/tracking metadata. This is pure parsing, not a probe or compatibility qualification."},"source":{"line":25,"file":"apps/libtmux_erlang/src/tmux_version.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_version-parse-1"},{"id":"tmux_version:require/1","publicId":"tmux_version:require/1","qualifiedName":"tmux_version:require/1","name":"require/1","namespace":"tmux_version","parent":"tmux_version","kind":"function","modifiers":[],"signatures":[{"raw":"require(Raw)\n-spec require(binary()) ->\n {ok, t()} |\n {error,\n {invalid_tmux_version |\n unsupported_tmux_version,\n term()}}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:binary/0"},{"start":62,"end":63,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":200,"end":204,"target":"t:erlang:term/0"}],"params":[{"name":"Raw","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, t()} |\n {error,\n {invalid_tmux_version | unsupported_tmux_version,\n term()}}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":103,"end":107,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Reject a tmux release below the supported floor.","examples":[{"lang":"erlang","code":"1> {ok, Version} = tmux_version:require(<<\"tmux 3.3a\">>), ok.\nok\n2> tmux_version:at_least(Version, {3, 4}).\nfalse"}]},"source":{"line":58,"file":"apps/libtmux_erlang/src/tmux_version.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_version-require-1"},{"id":"t:tmux_version:t/0","publicId":"t:tmux_version:t/0","qualifiedName":"tmux_version:t/0","name":"t/0","namespace":"tmux_version","parent":"tmux_version","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type t() ::\n #{major := non_neg_integer(),\n minor := non_neg_integer(),\n patch := binary(),\n tracking := boolean(),\n raw := binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":34,"end":49,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":74,"end":89,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":114,"end":120,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":148,"end":155,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":178,"end":184,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Parsed numeric daemon version plus patch, tracking and original-output metadata."},"source":{"line":17,"file":"apps/libtmux_erlang/src/tmux_version.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_version-t-0"},{"id":"tmux_window","publicId":"tmux_window","qualifiedName":"tmux_window","name":"tmux_window","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Create physical windows in a session and act through their registered IDs.","body":"`create/2` accepts name, cwd, env, launch and detach, using the\nsession's next available index. It defaults to detached. `get/2`\nreads current fields; `rename/2` returns the command result and\nleaves previous records unchanged. Launch and environment options follow\n`tmux_session:create/2`. An empty shell command does not portably keep the\nwindow alive: older tmux releases execute it as a shell command. Use a running\nprogram when needed. Creation returns a fresh observed row or an error\nretaining a completed mutation and its result if the follow-up observation\nfails.\n\n`kill/1` destroys the physical window and all its links. Use\n`tmux_window_link:unlink/2` to remove one session membership. These calls\nperform I/O after validating their inputs. `select_layout/2`\nchanges the physical window's layout across all its session links; previously\nobserved pane geometry remains unchanged in captured values."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window"},{"id":"tmux_window:create/2","publicId":"tmux_window:create/2","qualifiedName":"tmux_window:create/2","name":"create/2","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"create(Session, Options)\n-spec create(tmux_model:session(), create_options()) ->\n {ok, tmux_model:window()} | {error, map()}.","references":[{"start":38,"end":56,"target":"t:tmux_model:session/0"},{"start":60,"end":74,"target":"t:tmux_window:create_options/0"},{"start":102,"end":119,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":133,"end":136,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Options","type":"create_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_window:create_options/0"}]}],"returns":"{ok, tmux_model:window()} | {error, map()}","returnsReferences":[{"start":5,"end":22,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":36,"end":39,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Create a physical window in the session's next free index and observe it. Defaults to detached. Launch, cwd and environment follow `tmux_session:create/2`. Performs I/O and retains completed-mutation details if observation fails."},"source":{"line":41,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window-create-2"},{"id":"tmux_window:get/2","publicId":"tmux_window:get/2","qualifiedName":"tmux_window:get/2","name":"get/2","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"get(Server, Id)\n-spec get(tmux_server:t(), tmux_model:window_id()) ->\n {ok, tmux_model:window()} | {error, map()}.","references":[{"start":26,"end":39,"target":"t:tmux_server:t/0"},{"start":43,"end":63,"target":"t:tmux_model:window_id/0"},{"start":88,"end":105,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":119,"end":122,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Id","type":"tmux_model:window_id()","typeReferences":[{"start":0,"end":20,"target":"t:tmux_model:window_id/0"}]}],"returns":"{ok, tmux_model:window()} | {error, map()}","returnsReferences":[{"start":5,"end":22,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":36,"end":39,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Explicitly read a physical window by stable ID. Returns a fresh record or target_gone. Physical windows do not have a universal session or window index."},"source":{"line":56,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window-get-2"},{"id":"tmux_window:kill/1","publicId":"tmux_window:kill/1","qualifiedName":"tmux_window:kill/1","name":"kill/1","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"kill(Window)\n-spec kill(tmux_model:window()) ->\n {ok, map()} | {error, map()}.","references":[{"start":24,"end":41,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":67,"end":70,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":84,"end":87,"target":"t:erlang:map/0"}],"params":[{"name":"Window","type":"tmux_model:window()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_model:window/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Destroy the physical window and all of its session links. This does not unlink only one membership. Performs I/O after origin and target validation."},"source":{"line":74,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window-kill-1"},{"id":"tmux_window:rename/2","publicId":"tmux_window:rename/2","qualifiedName":"tmux_window:rename/2","name":"rename/2","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"rename(Window, Name)\n-spec rename(tmux_model:window(), binary()) ->\n {ok, map()} | {error, map()}.","references":[{"start":34,"end":51,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":55,"end":61,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":89,"end":92,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":106,"end":109,"target":"t:erlang:map/0"}],"params":[{"name":"Window","type":"tmux_model:window()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_model:window/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Rename the registered physical window with a literal name. Performs I/O and returns the command result. Captured rows and snapshots remain unchanged."},"source":{"line":63,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window-rename-2"},{"id":"tmux_window:respawn/2","publicId":"tmux_window:respawn/2","qualifiedName":"tmux_window:respawn/2","name":"respawn/2","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"respawn(Window, Options)\n-spec respawn(tmux_model:window(), respawn_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":39,"end":56,"target":"t:tmux_model:window/0"},{"start":60,"end":75,"target":"t:tmux_window:respawn_options/0"},{"start":104,"end":128,"target":"t:tmux_operation:completed/0"},{"start":159,"end":181,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Window","type":"tmux_model:window()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_model:window/0"}]},{"name":"Options","type":"respawn_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_window:respawn_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Respawn a registered physical window across all its session links. tmux keeps the first pane's ID, removes the other panes and rebuilds a single-pane layout. force defaults false: a window with a running pane normally returns command_error. force = true permits closing existing PTYs. Command completion does not establish former-job termination or application readiness. Other panes can already be removed if a later spawn step fails. Respawn also selects this window in tmux's resolved session. For a window linked into several sessions, tmux chooses that context from the physical ID; this facade does not pin selection or environment to a captured membership.","body":"launch defaults to previous and reuses the retained pane's saved command.\nExplicit argv and shell maps, saved cwd and fresh-spawn environment rules\nfollow `tmux_pane:respawn/2`, using the resolved session's environment. This\nphysical-window mutation affects every link. Performs I/O after validation and\nreturns the command result without refreshing rows. Use `get/2` or a new\nsnapshot for current data."},"source":{"line":96,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window-respawn-2"},{"id":"tmux_window:select_layout/2","publicId":"tmux_window:select_layout/2","qualifiedName":"tmux_window:select_layout/2","name":"select_layout/2","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"select_layout(Window, Layout)\n-spec select_layout(tmux_model:window(), layout()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":50,"end":67,"target":"t:tmux_model:window/0"},{"start":71,"end":77,"target":"t:tmux_window:layout/0"},{"start":112,"end":136,"target":"t:tmux_operation:completed/0"},{"start":173,"end":195,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Window","type":"tmux_model:window()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_model:window/0"}]},{"name":"Layout","type":"layout()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_window:layout/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select a built-in arrangement or restore a literal serialized layout for this registered physical window. Binary names must exactly match one of the five built-ins; abbreviations and other names are rejected. Legacy serialized layouts need four hexadecimal checksum digits, a comma and nonempty data. This guard avoids a malformed-header crash in tmux 3.3 and 3.3a.","body":"Native JSON v2 layouts require a bounded JSON object with V = 2 and an L\nobject. They return unsupported_capability on tmux before 3.8 without\ndispatching a tmux command. This preserves `get/2` layout restoration on newer\nservers.\n\nExecution unzooms the window and changes it in every linked session. tmux\nvalidates serialized geometry; malformed geometry can return a command error.\nThe layout argument uses no shell or format expansion. Existing rows are not\nrefreshed; use `get/2` or a fresh snapshot to observe layout and pane\ngeometry.\n\nUnsupported atom names fail before dispatch:","examples":[{"lang":"erlang","code":"1> tmux_window:select_layout(invalid_row, unknown_layout).\n{error,#{code => invalid_layout,path => [layout]}}"}]},"source":{"line":131,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window-select_layout-2"},{"id":"t:tmux_window:create_options/0","publicId":"t:tmux_window:create_options/0","qualifiedName":"tmux_window:create_options/0","name":"create_options/0","namespace":"tmux_window","parent":"tmux_window","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type create_options() ::\n #{name => binary(),\n cwd => binary(),\n env => #{binary() => binary()},\n launch => tmux_command:launch_spec(),\n detach => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":46,"end":52,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":75,"end":81,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":106,"end":112,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":118,"end":124,"target":"t:erlang:binary/0"},{"start":151,"end":175,"target":"t:tmux_command:launch_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":201,"end":208,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Physical-window creation options; defaults to a detached window at the next free session index."},"source":{"line":25,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_window-create_options-0"},{"id":"t:tmux_window:layout/0","publicId":"t:tmux_window:layout/0","qualifiedName":"tmux_window:layout/0","name":"layout/0","namespace":"tmux_window","parent":"tmux_window","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type layout() ::\n even_horizontal | even_vertical |\n main_horizontal | main_vertical | tiled |\n binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":124,"end":130,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A built-in arrangement, its exact binary name, or a serialized layout. Native JSON v2 requires tmux 3.8."},"source":{"line":31,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_window-layout-0"},{"id":"t:tmux_window:respawn_options/0","publicId":"t:tmux_window:respawn_options/0","qualifiedName":"tmux_window:respawn_options/0","name":"respawn_options/0","namespace":"tmux_window","parent":"tmux_window","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type respawn_options() ::\n #{force => boolean(),\n launch => tmux_command:respawn_spec(),\n cwd => binary(),\n env => #{binary() => binary()}}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":48,"end":55,"target":"t:erlang:boolean/0"},{"start":81,"end":106,"target":"t:tmux_command:respawn_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":129,"end":135,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":160,"end":166,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":172,"end":178,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Physical-window respawn options. Defaults: force false, launch previous, saved cwd. A forced respawn removes other panes."},"source":{"line":28,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_window-respawn_options-0"},{"id":"tmux_window_link","publicId":"tmux_window_link","qualifiedName":"tmux_window_link","name":"tmux_window_link","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Act on a physical window's observed membership in a particular session.","body":"A window link is identified by session ID, window index and expected physical\nwindow ID. It has no stable tmux link ID. These calls check that the observed\nmembership still names the expected window before dispatching an action.\nMissing or replaced membership returns stale_link. A link that moves away and\nback to the same coordinates and physical window cannot be distinguished.\n\nThe preflight and action use separate one-shot commands. Concurrent changes\nafter preflight can still affect the action; this is not atomic\ncompare-and-act. All input rows must belong to the same registered owner.\nRe-read or explicitly bind rows when using another owner. Closed owners and\nknown restarts invalidate their rows. Every call performs explicit I/O after\nvalidating its arguments.\n\nUse `tmux_window:kill/1` to destroy a physical window across all memberships.\nUse `unlink/2` to remove one membership. Existing rows and\nsnapshots are never refreshed by actions; use `get/3` or a\nnew snapshot for current memberships."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window_link"},{"id":"tmux_window_link:get/3","publicId":"tmux_window_link:get/3","qualifiedName":"tmux_window_link:get/3","name":"get/3","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"get(Server, SessionId, Index)\n-spec get(tmux_server:t(),\n tmux_model:session_id(),\n index()) ->\n {ok, tmux_model:window_link()} |\n {error, map()}.","references":[{"start":40,"end":53,"target":"t:tmux_server:t/0"},{"start":67,"end":88,"target":"t:tmux_model:session_id/0"},{"start":102,"end":107,"target":"t:tmux_window_link:index/0"},{"start":132,"end":154,"target":"t:tmux_model:window_link/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":181,"end":184,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"SessionId","type":"tmux_model:session_id()","typeReferences":[{"start":0,"end":21,"target":"t:tmux_model:session_id/0"}]},{"name":"Index","type":"index()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_window_link:index/0"}]}],"returns":"{ok, tmux_model:window_link()} | {error, map()}","returnsReferences":[{"start":5,"end":27,"target":"t:tmux_model:window_link/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":41,"end":44,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read a current membership at the explicit session ID and index. The returned native row carries its registered owner and a new observation identity. Returns target_gone if the session or index is absent. This read does not make later actions atomic and does not refresh previously captured links.","body":"Invalid indexes are rejected before I/O:","examples":[{"lang":"erlang","code":"1> tmux_window_link:get(invalid_server, <<\"$0\">>, -1).\n{error,#{code => invalid_option,path => [index]}}"}]},"source":{"line":50,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window_link-get-3"},{"id":"tmux_window_link:link/3","publicId":"tmux_window_link:link/3","qualifiedName":"tmux_window_link:link/3","name":"link/3","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"link(Link, Session, Options)\n-spec link(tmux_model:window_link(),\n tmux_model:session(),\n placement_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":40,"end":62,"target":"t:tmux_model:window_link/0"},{"start":77,"end":95,"target":"t:tmux_model:session/0"},{"start":110,"end":127,"target":"t:tmux_window_link:placement_options/0"},{"start":153,"end":177,"target":"t:tmux_operation:completed/0"},{"start":205,"end":227,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Link","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Options","type":"placement_options()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_window_link:placement_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Add another membership of this link's physical window to the destination session and explicit index. Defaults to detached and refuses an occupied index. replace = true maps to tmux -k and can destroy the occupied window. Returns the command result; use `get/3` to observe the new membership. The source membership remains. Session groups and renumber-windows retain their tmux semantics. Performs I/O after owner and membership checks."},"source":{"line":87,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window_link-link-3"},{"id":"tmux_window_link:move/3","publicId":"tmux_window_link:move/3","qualifiedName":"tmux_window_link:move/3","name":"move/3","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"move(Link, Session, Options)\n-spec move(tmux_model:window_link(),\n tmux_model:session(),\n placement_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":40,"end":62,"target":"t:tmux_model:window_link/0"},{"start":77,"end":95,"target":"t:tmux_model:session/0"},{"start":110,"end":127,"target":"t:tmux_window_link:placement_options/0"},{"start":153,"end":177,"target":"t:tmux_operation:completed/0"},{"start":205,"end":227,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Link","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Options","type":"placement_options()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_window_link:placement_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Move this membership to the destination session and explicit index, leaving its physical window's other links intact. Placement options follow `link/3`. Moving the final window out of a session can destroy that session; automatic renumbering and session groups can change other memberships. Captured rows remain unchanged. Returns the command result after observed preflight."},"source":{"line":98,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window_link-move-3"},{"id":"tmux_window_link:select/1","publicId":"tmux_window_link:select/1","qualifiedName":"tmux_window_link:select/1","name":"select/1","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"select(Link)\n-spec select(tmux_model:window_link()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":26,"end":48,"target":"t:tmux_model:window_link/0"},{"start":76,"end":100,"target":"t:tmux_operation:completed/0"},{"start":130,"end":152,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Link","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select this membership as its session's current window after checking the expected physical window. Performs I/O and returns the command result."},"source":{"line":70,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window_link-select-1"},{"id":"tmux_window_link:swap/3","publicId":"tmux_window_link:swap/3","qualifiedName":"tmux_window_link:swap/3","name":"swap/3","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"swap(Source, Destination, Options)\n-spec swap(tmux_model:window_link(),\n tmux_model:window_link(),\n swap_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":46,"end":68,"target":"t:tmux_model:window_link/0"},{"start":83,"end":105,"target":"t:tmux_model:window_link/0"},{"start":120,"end":132,"target":"t:tmux_window_link:swap_options/0"},{"start":158,"end":182,"target":"t:tmux_operation:completed/0"},{"start":210,"end":232,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Source","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Destination","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Options","type":"swap_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_window_link:swap_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Swap the physical windows at two checked memberships. Other links to either window remain intact. detach maps to tmux -d and defaults true. tmux applies its session-selection and group-synchronization rules. Returns the command result; old rows still name their original expected windows and can become stale. Performs I/O, with the documented gap between preflight and action."},"source":{"line":109,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window_link-swap-3"},{"id":"tmux_window_link:unlink/2","publicId":"tmux_window_link:unlink/2","qualifiedName":"tmux_window_link:unlink/2","name":"unlink/2","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"unlink(Link, Options)\n-spec unlink(tmux_model:window_link(), unlink_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":35,"end":57,"target":"t:tmux_model:window_link/0"},{"start":61,"end":75,"target":"t:tmux_window_link:unlink_options/0"},{"start":103,"end":127,"target":"t:tmux_operation:completed/0"},{"start":157,"end":179,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Link","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Options","type":"unlink_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_window_link:unlink_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove one checked membership. force defaults false, retaining tmux's protection for windows linked to only one session. force = true permits removing the last link, destroying that physical window and possibly its session. Duplicate links within one session retain tmux's native protection rules. Performs I/O and returns the command result without refreshing rows."},"source":{"line":128,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"tmux_window_link-unlink-2"},{"id":"t:tmux_window_link:index/0","publicId":"t:tmux_window_link:index/0","qualifiedName":"tmux_window_link:index/0","name":"index/0","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type index() :: 0..2147483647.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"An explicit tmux window index; relative and next-free selectors are not accepted."},"source":{"line":27,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_window_link-index-0"},{"id":"t:tmux_window_link:placement_options/0","publicId":"t:tmux_window_link:placement_options/0","qualifiedName":"tmux_window_link:placement_options/0","name":"placement_options/0","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type placement_options() ::\n #{index := index(),\n detach => boolean(),\n replace => boolean()}.","params":[],"references":[{"start":50,"end":55,"target":"t:tmux_window_link:index/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":81,"end":88,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":115,"end":122,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Destination index is required. Defaults: detach true, replace false. Replacement may destroy the destination window."},"source":{"line":29,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_window_link-placement_options-0"},{"id":"t:tmux_window_link:swap_options/0","publicId":"t:tmux_window_link:swap_options/0","qualifiedName":"tmux_window_link:swap_options/0","name":"swap_options/0","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type swap_options() :: #{detach => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":36,"end":43,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Maps detach to tmux's -d flag, default true."},"source":{"line":31,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_window_link-swap_options-0"},{"id":"t:tmux_window_link:unlink_options/0","publicId":"t:tmux_window_link:unlink_options/0","qualifiedName":"tmux_window_link:unlink_options/0","name":"unlink_options/0","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type unlink_options() :: #{force => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":37,"end":44,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Force defaults false. Force permits unlinking the last membership and destroying its physical window."},"source":{"line":33,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","extractedRevision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64"},"slug":"t-tmux_window_link-unlink_options-0"}]} +{"port":"erlang","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractor":"@libtmux/api-model@0.0.1 (Erlang EEP-48 and abstract code v3)","nativeProvenance":{"files":[{"path":".tool-versions","sha256":"73a9c039345d63a5316d1818639cabf8f563af4752b3d25168aff80beae90a68"},{"path":"apps/libtmux_erlang/rebar.config","sha256":"7dde37bc878d42712eb562a96f7b2bef0f717d552c1fe115c3224cf7a39c59a2"},{"path":"apps/libtmux_erlang/src/libtmux_erlang.app.src","sha256":"c0dabd09a69c341798a2f66fe042d3e810a53b2a858fa4781c1273936c16b2db"},{"path":"apps/libtmux_erlang/src/libtmux_erlang_app.erl","sha256":"b649483a5e0bf6cc3a377aa06a381e6afe2b316f0c64590d13dc650520040328"},{"path":"apps/libtmux_erlang/src/tmux_admission.erl","sha256":"78330dddda6ae5854d2e72585523c6664293167d4b25273015494f8877029b4f"},{"path":"apps/libtmux_erlang/src/tmux_args.erl","sha256":"f054894dfd02179f09fe153afacf29dd9e8494ec381abd07ab92b56300ca10cd"},{"path":"apps/libtmux_erlang/src/tmux_buffer.erl","sha256":"c05edba9f3cfde487d699b5ed7e83b8353f0d7419db309a22d8a0f938572f996"},{"path":"apps/libtmux_erlang/src/tmux_buffer_codec.erl","sha256":"872d28160204881f0b11de18ae99704ca17a1e5914819abd3c1c30298427121e"},{"path":"apps/libtmux_erlang/src/tmux_capability.erl","sha256":"1514ac1583f5f870c067585f4509a1304147b2e4527a7026dfdac367c54c72c1"},{"path":"apps/libtmux_erlang/src/tmux_capability_data.erl","sha256":"e5a6f66ded73cb16e53d9f6bbbc0d6066088e58598b8e970b37e6bb3ea142e1e"},{"path":"apps/libtmux_erlang/src/tmux_command.erl","sha256":"4ef3e833cd4beeb62f8dc34994fd4071a0df675c3e2304b3e80fcd6d9579153c"},{"path":"apps/libtmux_erlang/src/tmux_control.erl","sha256":"0a5412aa42a2616a12a07310facd5bd2a669e2753949c3dc4966fac7aaeb0bdf"},{"path":"apps/libtmux_erlang/src/tmux_control_codec.erl","sha256":"a3395198fe0ebba49dc598f0e2503a14f2b00b2ccb36982c90513f851a6a5b48"},{"path":"apps/libtmux_erlang/src/tmux_error.erl","sha256":"ccb10f5a434672a20068759ee1b54ba6c6c503f0f876247aad7125c6b4c5ad82"},{"path":"apps/libtmux_erlang/src/tmux_filter.erl","sha256":"b582961447a700c38d348230a016918cf07cec169ab46d11b4c9a925857a142b"},{"path":"apps/libtmux_erlang/src/tmux_filter_eval.erl","sha256":"5e715cfa4110951771cbd7fe13eb2797a2ff2dd2d38ed5838b500524a3f7fbc2"},{"path":"apps/libtmux_erlang/src/tmux_hook.erl","sha256":"723c166ff42524679066011916463761ad5d4e9ccc6e9c901beb3cca6df53a3d"},{"path":"apps/libtmux_erlang/src/tmux_identity.erl","sha256":"31ab809d3c407e0214f6b952e4e24cc5289f3d4ee305f6fe0b9b1520f4af9d7d"},{"path":"apps/libtmux_erlang/src/tmux_json.erl","sha256":"2dce31dd87dae4e32c314de5c1ddefcee077cfef09a78cbcf6f660748573ddfc"},{"path":"apps/libtmux_erlang/src/tmux_key.erl","sha256":"00c7d3a141d377c115cf2a6d010312aa4c006d34355111ff51424b3c2b2a3e23"},{"path":"apps/libtmux_erlang/src/tmux_log.erl","sha256":"885dcb198a82a0ed13f8c766e63e3953e4e9134f5d4bd2f86e79f0e0de65783a"},{"path":"apps/libtmux_erlang/src/tmux_matcher.erl","sha256":"b599f732e73ad9c7701df6c9c65c9524645c988bb5ba2d0729b9004136d29c16"},{"path":"apps/libtmux_erlang/src/tmux_model.erl","sha256":"519cfeb36fa0ea3df6d742edc87ded1f9d4800fc4fe7c662f2e676e29a4ce0a9"},{"path":"apps/libtmux_erlang/src/tmux_observe.erl","sha256":"4e726b823568a66cdf0f3c34aeb6c0b55651522da9a6263d077a2926cd699da0"},{"path":"apps/libtmux_erlang/src/tmux_operation.erl","sha256":"f5d34e31af1ac17e267bff6529a454d095ff3c7c238d64d6bbb0002e54285c47"},{"path":"apps/libtmux_erlang/src/tmux_option.erl","sha256":"c1872d0d9f74f136d0fbb1a2b28232d4245a197f8fd84d78ae6bf4200fd0088a"},{"path":"apps/libtmux_erlang/src/tmux_option_batch.erl","sha256":"16b90a2b4e8bf168dd3d5bd56bfbb4a561cfd9ff8f43054917ce9500488b195b"},{"path":"apps/libtmux_erlang/src/tmux_option_codec.erl","sha256":"cd3dc1cc2d457cd711247c539f0fc0e3498303180751724ebae77462cede9b6d"},{"path":"apps/libtmux_erlang/src/tmux_option_data.erl","sha256":"8fe72d14d2ec8d6a9aef7ac8a46923f3c70f47f45b5c6fcd0b1754eae8ca0ae4"},{"path":"apps/libtmux_erlang/src/tmux_option_scope.erl","sha256":"7f6227cd1808bf8b27df12fafc3c35c073797efee7a4ed9f89e19bc2b498ed11"},{"path":"apps/libtmux_erlang/src/tmux_owned_server.erl","sha256":"17521c819d7aea427429dc18aafee101544a6f85c0772857d540d1dd887a44f3"},{"path":"apps/libtmux_erlang/src/tmux_pane.erl","sha256":"e71ac56dab19886495cae801a1a83d85123e519de1c10ba8eb4128c8ff33db48"},{"path":"apps/libtmux_erlang/src/tmux_query.erl","sha256":"687cc6d89f68815662d8154ed3326ed69dd5b665c4cc1fec10036022c52cb641"},{"path":"apps/libtmux_erlang/src/tmux_query_plan.erl","sha256":"98299c186428ccc70588cee87b65e89d172045b89d01d0c88996834454238a93"},{"path":"apps/libtmux_erlang/src/tmux_regex.erl","sha256":"c97133a505dfbf7a54b0b59645429a3a512482bec99dfc5cc8da0ef27664af44"},{"path":"apps/libtmux_erlang/src/tmux_registry.erl","sha256":"e0370601b396566bb24323a65e0fc2e6a1930c6298cbd125590009a4855d0740"},{"path":"apps/libtmux_erlang/src/tmux_schema.erl","sha256":"85ebfc0c7f53cf4e7952f9ec440395646d48d9100ad2ea191d9c053759625a65"},{"path":"apps/libtmux_erlang/src/tmux_schema_data.erl","sha256":"4cd255118e2b207d40507fa2a5b91af7555e41134986eff7c58ce2349a96560d"},{"path":"apps/libtmux_erlang/src/tmux_scope.erl","sha256":"02c1624a9618fb24022b13263e6de0ca14ca60e5ff7b773e1ecfdd742b2ea03b"},{"path":"apps/libtmux_erlang/src/tmux_select.erl","sha256":"49f16937a1edf0057364f54718907d48fa2442a6410c38218f984c456874968c"},{"path":"apps/libtmux_erlang/src/tmux_server.erl","sha256":"5327de8889504558db981c9bafbace54c5bac2e1a9a0512c7dc17f057b5c0c6a"},{"path":"apps/libtmux_erlang/src/tmux_session.erl","sha256":"150217b8d739092eded788198c86e0d82d6e7e81453ab8c3423c53ea8d4280d0"},{"path":"apps/libtmux_erlang/src/tmux_snapshot.erl","sha256":"570e30612017e0a80be44fcae0ad5aaf44968588244916efc93516751dc58f81"},{"path":"apps/libtmux_erlang/src/tmux_sup.erl","sha256":"d0769251b68e8118e8cb58d2cd974cbf59e8c72b5713e738d6b82df14cd400ee"},{"path":"apps/libtmux_erlang/src/tmux_target.erl","sha256":"107de5ba111b6ff3641c3e1ba2197b6a66808a654e031b0837ff2befaad67d5d"},{"path":"apps/libtmux_erlang/src/tmux_text_codec.erl","sha256":"22b3823103dd84df3e21d6b9e2362da9f74c062731253fbac0b555868be758db"},{"path":"apps/libtmux_erlang/src/tmux_transport.erl","sha256":"1be3ba6148a39b041720b1123f42fd1d9142993dff39e8b655b24db245f25b82"},{"path":"apps/libtmux_erlang/src/tmux_transport_codec.erl","sha256":"516f5d3d79f31702a7b27b09945e1f5b8b9cfce613ede4ac9edc817f941686df"},{"path":"apps/libtmux_erlang/src/tmux_version.erl","sha256":"c09c120c90ec42a7cc55772b13823e3169259c68f2330537f1e5cb19e087d283"},{"path":"apps/libtmux_erlang/src/tmux_window.erl","sha256":"8fd8325549b1756f76c3fceb36ccfcf15068ec9c0cfa6a290da8ae3067817a4e"},{"path":"apps/libtmux_erlang/src/tmux_window_link.erl","sha256":"3584235656fc15976074e964f5ab2042e7dc83ed0fa3748a28059da32dd7550c"},{"path":"apps/libtmux_erlang/test/tmux_admission_tests.erl","sha256":"90cd16fd73aaaa9ac32ac1ac2b6ccf16d879b5dee88950d42d44455ac33c92a3"},{"path":"apps/libtmux_erlang/test/tmux_buffer_tests.erl","sha256":"0f117487e30b8edc908393ed85f3837d92c3f4309b0f5e7233c3926822bc8fee"},{"path":"apps/libtmux_erlang/test/tmux_capability_tests.erl","sha256":"7062a4401ae2f6d42389780c200957d85613eb635721c294bd8916d851f4bbec"},{"path":"apps/libtmux_erlang/test/tmux_command_tests.erl","sha256":"d0c8e817342d2d2000a097ef248557f3f22c02b149ac068d6da6faf2719f8dfe"},{"path":"apps/libtmux_erlang/test/tmux_domain_tests.erl","sha256":"8df9b7ab8fcf08838cb83bf814e610a8d2fe042abb8c5a7861700d5243b8cc9f"},{"path":"apps/libtmux_erlang/test/tmux_error_tests.erl","sha256":"9561f706fe80150aac64481762a7be1ecd28f26d7b643cf194774691a1eda6e2"},{"path":"apps/libtmux_erlang/test/tmux_filter_fixture_tests.erl","sha256":"2042d790c9a8db07d0260aeb18a1658f1715299a7493d80c95f9ab6667f60f9c"},{"path":"apps/libtmux_erlang/test/tmux_filter_tests.erl","sha256":"297207998c206b10f71799cb9b642fb435b397e8e076f9c5780f5bae4bc2d82e"},{"path":"apps/libtmux_erlang/test/tmux_hook_tests.erl","sha256":"4f9bbdc801ab3d6e14609be8c0f2477bc00d530d9c829b719a8c98a7e3160482"},{"path":"apps/libtmux_erlang/test/tmux_identity_tests.erl","sha256":"fcf254ed09fc1111b65eb4a5dab2304ee013d8eae937cf590b496c3955453945"},{"path":"apps/libtmux_erlang/test/tmux_json_tests.erl","sha256":"55d60e58bd058a1882c1288880cca60596397702594791a7f4907f6bccdd6408"},{"path":"apps/libtmux_erlang/test/tmux_key_tests.erl","sha256":"d39af985776d7ed68e4b39f535b0513f2cda3b95d27ee7f438c64d7490e5f8f8"},{"path":"apps/libtmux_erlang/test/tmux_model_tests.erl","sha256":"ed7b34128ff3c55020a8b430814cd21d7fbd0af49d645d1caf640c9b12a1bde5"},{"path":"apps/libtmux_erlang/test/tmux_option_tests.erl","sha256":"35a8b9a53fe2545095255c04ef0e5d92e21ff09405e6204a73b5bbbbdb25bc07"},{"path":"apps/libtmux_erlang/test/tmux_query_tests.erl","sha256":"3f6a7b2d3dfbcb252b62e2559e2318c976541b763e507ddbf57133582e121cb9"},{"path":"apps/libtmux_erlang/test/tmux_regex_tests.erl","sha256":"53f60668b1c3cf9449ab59b5576e5d367902f374aa6d5a99e50dfa5d0c96a05c"},{"path":"apps/libtmux_erlang/test/tmux_registry_tests.erl","sha256":"1564e63d63be02e2ddc13e58a67a003eb77e3129b4f6d6585d6cb2ef26d8fbc4"},{"path":"apps/libtmux_erlang/test/tmux_scope_tests.erl","sha256":"575a142cc074ffcd51784bfba68bd81b8ab1fb53684e2c47fa912cbf9ae38f19"},{"path":"apps/libtmux_erlang/test/tmux_select_tests.erl","sha256":"130475107a7ade6e18b98987ae222ff4ea12ee9bdb40cf90fd40d37b13292f74"},{"path":"apps/libtmux_erlang/test/tmux_snapshot_tests.erl","sha256":"641dd3e523efdd7a313d5bc8109d13419bedc50f1565a2abbdb4226594a51f60"},{"path":"apps/libtmux_erlang/test/tmux_text_codec_tests.erl","sha256":"fd089f5e50f509390051325c009eeb9abc3aca4a5c046c3562d64061f2c77bd0"},{"path":"apps/libtmux_erlang/test/tmux_transport_codec_tests.erl","sha256":"8769931bdc39f25e927ead06b17b985d192be54610b799ced428d4fab5d351cf"},{"path":"apps/libtmux_erlang/test/tmux_version_tests.erl","sha256":"3867637a0194ef1eee541ad311d3b296436c0220e2323b504b17243a8a588bd1"},{"path":"examples/batch_demo.erl","sha256":"b3814f010e72a6394c713d07f90f02cf63859b3a45821b0fba39a93ab854f56e"},{"path":"examples/buffer_demo.erl","sha256":"d4579d644f0d68f5b864036351ad538c7b18f73469d33fa933da248b72028f50"},{"path":"examples/command_demo.erl","sha256":"c9af9f446d73710ade39ee59a29494a9df5be076172a7efa977bc35034a33622"},{"path":"examples/config_demo.erl","sha256":"0d861a00b4f1025976a1c10e1e4873d08cedcf5f622d1d307420672f4caca3e4"},{"path":"examples/control_demo.erl","sha256":"3e407160772d5677ffb6983405bcf032d728e65e3c6eec9566445c41b2a49d7b"},{"path":"examples/filter_demo.erl","sha256":"9b3467b20497d568c0832685c790fcd0909133a15d5814282ccf55765771d321"},{"path":"examples/hook_demo.erl","sha256":"5c6c777bc6a2ab716a00bef55f44b4cf7fe43ad29ad31b55ea092acdeef49087"},{"path":"examples/inspect_demo.erl","sha256":"a87e20080863153c687682f7c21961dd50edd853254dac38f8c09a1b34f03bbd"},{"path":"examples/job_demo.erl","sha256":"8ddbd70130f47ae022d2224646b132e18aa5178b50aa6965b33612230ddf3bf5"},{"path":"examples/key_demo.erl","sha256":"572bb44ae0bca5354d9080993d6010d97caa25dcaaad89417912f4ddcca975e4"},{"path":"examples/linked_graph.erl","sha256":"d6d5f7b51e76e2023c6f33a1547ff71534f6107d705db20d2012122f552c6bf0"},{"path":"examples/native_consumer.erl","sha256":"fe3a5943ada5885c09918b3693510de612437ef6b8bd3b431674c846ae648eea"},{"path":"examples/options_demo.erl","sha256":"37a5a00ae52c25b5eef4ff079b6b5fe8155f54be85488d456ba1399dcddec468"},{"path":"examples/pane_demo.erl","sha256":"e103746aebc97ed5c939e384c935f2bf7830c0e0efa0c269fc70d5dec7b6f300"},{"path":"examples/pipe_demo.erl","sha256":"a5ea3562db13830139f6ffcf95b4b0ef0fb5dee7dcb408335aaad3ac80519e6d"},{"path":"examples/plan_demo.erl","sha256":"8e3633d7c5d12677aeb559f74b81dbc06b4473f87ba01ff3e8fa6dfa0ee2b76f"},{"path":"examples/readme_demo.erl","sha256":"1ff24e66b6ac576c63eb2fc481aeeb17ab641608ec4ac56c09f9266e34fcf850"},{"path":"examples/typing_demo.erl","sha256":"fa32e5a8441f28a6f21c9c2fb5d8ed77a7eaa2f6736f407ad396a13b4e5c8e32"},{"path":"property/prop_tmux_filter.erl","sha256":"1a918ae522b6ae675c3ec2c42ffbb87bfd8cb30bb770ae9ac5f7bf6740b7713e"},{"path":"property/prop_tmux_graph.erl","sha256":"2fe1dfd9e870a5e98ce6a7e4c89a1a33b72d0661dc68860a6d6be83470e17fee"},{"path":"rebar.config","sha256":"faac9e9d16e8df896c8bb4bccb71214a6c6096e395301a97a38c0c89c9e56c74"},{"path":"rebar.lock","sha256":"11147eb50b093a61fe80253dae762d703387f23054d00907217c4ab3dc2d6b8c"},{"path":"test/consumers/model_types_bad.erl","sha256":"643fe7c662cc031de656149da55ec3c038541a7a1d3ece01ed7b2ca21bc5d68a"},{"path":"test/consumers/model_types_ok.erl","sha256":"fcababe54e4626a8827c319025bc801bcac51457489281d67b02a31edaebf763"},{"path":"test/tmux_buffer_SUITE.erl","sha256":"605251515daff77735e714ac9bd42abdb41695c650236aa3ee1d1d15e77ebbd0"},{"path":"test/tmux_channel_SUITE.erl","sha256":"0c72df0e5291895ee491fc9b6148100bd19c993546f932db35da4240d4f29a34"},{"path":"test/tmux_command_SUITE.erl","sha256":"7d8bc30cff9cb9168885be97a9929090d94314871d2cba6123a327dfe30c464e"},{"path":"test/tmux_control_SUITE.erl","sha256":"787e82c6ab419ceb69d7e75146b1750bf0d8425281b30e541f3865184e352a2f"},{"path":"test/tmux_control_codec_SUITE.erl","sha256":"3244294cd87b33384cadfb2e53ff501aecabb571388e99faf9cbc057158558ce"},{"path":"test/tmux_control_codec_tests.erl","sha256":"6730a09af09dbd5ebcd5e4cb8dd8abafc0c339d7cf14b8f79926a755b95c3705"},{"path":"test/tmux_diagnostics_SUITE.erl","sha256":"72aa812052d70b5af8b44777e0d39dca8f94f43faa3fd1c78c981157d4596246"},{"path":"test/tmux_docs_SUITE.erl","sha256":"fe2e757d2b3496eeb9928ab6fbea00434b5b9bd00bec199730162b14400cf589"},{"path":"test/tmux_domain_SUITE.erl","sha256":"53bf4ec2c1e4ebdbdb11f3cc3f4e235140cb3aa6e9859bc7a79c3ea4b7c30fa7"},{"path":"test/tmux_fixture_SUITE.erl","sha256":"2a7ad27ad63f1892f347fb3b272231a9ed3603f8025527931f6f98024b469e73"},{"path":"test/tmux_hook_SUITE.erl","sha256":"c020bd17251344e15d823e05e0a4ec8be4e05c6b6d3582af2aa659ff08577ef6"},{"path":"test/tmux_key_SUITE.erl","sha256":"3b5d0da672633a7470446008b79741900df9f88d5c12e21559445f2f1f1b2412"},{"path":"test/tmux_option_SUITE.erl","sha256":"88a323f26b52025092e31255f2ab944859cadd45e74ff7fd90cd6d76da0e6583"},{"path":"test/tmux_owned_server_SUITE.erl","sha256":"de43f1cfecf8c20f349a9fcaae0b02fd0559a7ab3f8621caf6f4a0cf40fa0980"},{"path":"test/tmux_pipe_SUITE.erl","sha256":"cfb3cdd298f43dc66afb306f6ac1f5f692968958a959fa8b7bbb2beaaa602b46"},{"path":"test/tmux_query_SUITE.erl","sha256":"63e71283c8aadd680c6fb006c7f9177c66b0c05b258b3849d20ea9e05699da06"},{"path":"test/tmux_server_SUITE.erl","sha256":"af9bdd800ddf33a37d4d48d5b4329f1f90dd8ba93797cfe4beb04e1587244de4"},{"path":"test/tmux_test_fixture.erl","sha256":"48b64d04a7fa2c0c4848f5203c76bc11daa98ddf3d5e1f7cc4ac5a3793ca8d00"},{"path":"test/tmux_topology_SUITE.erl","sha256":"3e5fd3cde6709593e169a93bc1ee684d3e460788400b514439009da3e58397bf"},{"path":"test/tmux_transport_SUITE.erl","sha256":"17ca53bf22a720e3b4b57ee9be9a9e8d2517abd3659b2c79c4b81d92a1eaf01c"}],"exporter":{"name":"Erlang EEP-48 and abstract code","version":3,"otp":"29.1.2","columns":60,"source_sha256":"2fc491ad480e74fded943bf072d5bfd452116a9dfc6dc7062860727fe487f1ab"}},"sources":[{"package":"libtmux_erlang","product":"core","version":"0.0.1","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"}],"symbols":[{"id":"tmux_buffer","publicId":"tmux_buffer","qualifiedName":"tmux_buffer","name":"tmux_buffer","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Load, inspect and paste tmux byte buffers through an explicit endpoint.","body":"Use `load/3` for binary payloads, including NUL bytes, and `show/2` to read\nthem back without terminal escaping or an added newline. `list/1` returns\ncaptured metadata in tmux's newest-first order; it never loads payloads.\n`paste/3` sends a named buffer to a registered pane. Direct input is available\nthrough `tmux_pane:send_text/2`.\n\nNames are NUL-free binaries, distinct from payload bytes. New names retain\ntmux's storage rules: 3.7+ cleans names and can reject control bytes or escape\nbackslashes. Use observed names from `list/1` for subsequent calls. Empty load\ninput is tmux's no-op; it neither creates nor clears a buffer. `delete/2`\nremoves a buffer explicitly. Names have no persistent object identity, and\nconcurrent commands can replace a buffer between calls.\n\nAll operations except `capabilities/1` perform explicit I/O. They use the\none-shot transport and preserve operational errors and ownership checks.\nThe [buffer guide](buffers.md) shows a complete byte round trip."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_buffer"},{"id":"tmux_buffer:capabilities/1","publicId":"tmux_buffer:capabilities/1","qualifiedName":"tmux_buffer:capabilities/1","name":"capabilities/1","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"capabilities(Version)\n-spec capabilities(tmux_version:t()) -> capabilities().","references":[{"start":41,"end":55,"target":"t:tmux_version:t/0"},{"start":62,"end":74,"target":"t:tmux_buffer:capabilities/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]}],"returns":"capabilities()","returnsReferences":[{"start":0,"end":12,"target":"t:tmux_buffer:capabilities/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Describe version differences without I/O. This does not qualify an untested release. `paste/3` uses paste_sanitize to gate sanitization and render raw paste.","examples":[{"lang":"erlang","code":"1> {ok, V} = tmux_version:parse(<<\"tmux 3.3\">>), ok.\nok\n2> tmux_buffer:capabilities(V).\n#{paste_sanitize => false,cleaned_names => false,\n rename_replaces => false,strict_named_target => false}"}]},"source":{"line":55,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_buffer-capabilities-1"},{"id":"tmux_buffer:delete/2","publicId":"tmux_buffer:delete/2","qualifiedName":"tmux_buffer:delete/2","name":"delete/2","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"delete(Server, Buffer)\n-spec delete(tmux_server:t(), target()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":36,"end":49,"target":"t:tmux_server:t/0"},{"start":53,"end":59,"target":"t:tmux_buffer:target/0"},{"start":87,"end":111,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":141,"end":144,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Buffer","type":"target()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_buffer:target/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Delete a named buffer or latest. Missing buffers return buffer_not_found. This performs I/O and affects the server-wide buffer store.","body":"On 3.3/3.3a, named deletion first checks existence with a zero-output `show/3`\nread because native deletion falls back to the newest buffer when a name is\nabsent. This check does not collect a payload or depend on the list bounds.\nIt is not atomic: concurrent removal after the check can trigger that fallback.\nUse external serialization or tmux 3.4+ when that race is unacceptable."},"source":{"line":126,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_buffer-delete-2"},{"id":"tmux_buffer:list/1","publicId":"tmux_buffer:list/1","qualifiedName":"tmux_buffer:list/1","name":"list/1","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"list(Server)\n-spec list(tmux_server:t()) ->\n {ok, [info()]} | {error, map()}.","references":[{"start":24,"end":37,"target":"t:tmux_server:t/0"},{"start":64,"end":68,"target":"t:tmux_buffer:info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":83,"end":86,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, [info()]} | {error, map()}","returnsReferences":[{"start":6,"end":10,"target":"t:tmux_buffer:info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture metadata in tmux's newest-first insertion order. Renaming preserves position; replacing data through `load/3` inserts a new buffer. Length frames preserve names containing delimiters, newlines or invalid UTF-8 on releases that permit them. Returns an ordinary list, bounded to 4096 rows and 1 MiB of encoded output. No payloads, hidden refresh or atomic snapshot is provided."},"source":{"line":106,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_buffer-list-1"},{"id":"tmux_buffer:load/3","publicId":"tmux_buffer:load/3","qualifiedName":"tmux_buffer:load/3","name":"load/3","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"load(Server, Name, Bytes)\n-spec load(tmux_server:t(),\n binary() | automatic,\n binary()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":37,"end":50,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":65,"end":71,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":98,"end":104,"target":"t:erlang:binary/0"},{"start":130,"end":154,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":182,"end":185,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Name","type":"binary() | automatic","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Bytes","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Load binary bytes under a name, or create an automatic buffer. Input may contain NUL. Empty input succeeds without changing the buffer store, including an existing name. The command payload, including argv and stdin, must fit the endpoint's 256 KiB admission limit. See `tmux_server:command/3`.","body":"Returns the completed command result, not a persistent buffer handle. No\nclipboard write is requested. Native stored-name rules still apply."},"source":{"line":72,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_buffer-load-3"},{"id":"tmux_buffer:paste/3","publicId":"tmux_buffer:paste/3","qualifiedName":"tmux_buffer:paste/3","name":"paste/3","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"paste(Pane, Buffer, Options)\n-spec paste(tmux_model:pane(), target(), paste_options()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":41,"end":56,"target":"t:tmux_model:pane/0"},{"start":60,"end":66,"target":"t:tmux_buffer:target/0"},{"start":70,"end":83,"target":"t:tmux_buffer:paste_options/0"},{"start":110,"end":134,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":163,"end":166,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Buffer","type":"target()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_buffer:target/0"}]},{"name":"Options","type":"paste_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_buffer:paste_options/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Send a named buffer or latest to a registered pane. Defaults preserve payload bytes: LF separators and unsanitized input. On tmux 3.7+, raw paste uses -S; sanitize=true selects its safe print encoding. Earlier releases reject that request with unsupported_capability before dispatch.","body":"separator is NUL-free; delete removes the buffer after the native paste call.\nbracketed adds markers only if the target has enabled that terminal mode.\nNative input-off/dead-pane behavior still applies. Completion establishes the\ntmux command result, not consumption by the child. No automatic retry occurs."},"source":{"line":167,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_buffer-paste-3"},{"id":"tmux_buffer:rename/3","publicId":"tmux_buffer:rename/3","qualifiedName":"tmux_buffer:rename/3","name":"rename/3","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"rename(Server, Old, New)\n-spec rename(tmux_server:t(), binary(), binary()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":38,"end":51,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":55,"end":61,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":65,"end":71,"target":"t:erlang:binary/0"},{"start":99,"end":123,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":153,"end":156,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Old","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"New","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Rename one explicit name. tmux 3.3 refuses an occupied destination; 3.4+ replaces it. This is native collision behavior, not an atomic absence check. Identical input names return same_buffer_name before I/O, avoiding unsafe legacy tmux paths. New names retain native cleaning rules; see `list/1` for stored names. The same observed 3.3/3.3a missing-name preflight and race as `delete/2` apply."},"source":{"line":142,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_buffer-rename-3"},{"id":"tmux_buffer:show/2","publicId":"tmux_buffer:show/2","qualifiedName":"tmux_buffer:show/2","name":"show/2","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"show(Server, Buffer)\n-spec show(tmux_server:t(), target()) ->\n {ok, binary()} | {error, map()}.","references":[{"start":32,"end":45,"target":"t:tmux_server:t/0"},{"start":49,"end":55,"target":"t:tmux_buffer:target/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":81,"end":87,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":101,"end":104,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Buffer","type":"target()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_buffer:target/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read exact payload bytes with default bounds. See `show/3` for limits."},"source":{"line":81,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_buffer-show-2"},{"id":"tmux_buffer:show/3","publicId":"tmux_buffer:show/3","qualifiedName":"tmux_buffer:show/3","name":"show/3","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"function","modifiers":[],"signatures":[{"raw":"show(Server, Buffer, Options)\n-spec show(tmux_server:t(), target(), read_options()) ->\n {ok, binary()} | {error, map()}.","references":[{"start":41,"end":54,"target":"t:tmux_server:t/0"},{"start":58,"end":64,"target":"t:tmux_buffer:target/0"},{"start":68,"end":80,"target":"t:tmux_buffer:read_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":106,"end":112,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":126,"end":129,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Buffer","type":"target()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_buffer:target/0"}]},{"name":"Options","type":"read_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_buffer:read_options/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read exact payload bytes from an unattached one-shot client. No print decoding or newline removal applies. max_bytes is 0 through 1 MiB; exceeding it returns output_limit with partial command evidence, never a successful truncated value. deadline_ms is 1 through 600000. Missing buffers return buffer_not_found."},"source":{"line":90,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_buffer-show-3"},{"id":"t:tmux_buffer:capabilities/0","publicId":"t:tmux_buffer:capabilities/0","qualifiedName":"tmux_buffer:capabilities/0","name":"capabilities/0","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type capabilities() ::\n #{paste_sanitize := boolean(),\n cleaned_names := boolean(),\n rename_replaces := boolean(),\n strict_named_target := boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":54,"end":61,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":94,"end":101,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":136,"end":143,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":182,"end":189,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Source-defined buffer behavior for a parsed daemon version."},"source":{"line":39,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_buffer-capabilities-0"},{"id":"t:tmux_buffer:info/0","publicId":"t:tmux_buffer:info/0","qualifiedName":"tmux_buffer:info/0","name":"info/0","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type info() ::\n #{name := binary(),\n size := non_neg_integer(),\n created := non_neg_integer()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":36,"end":42,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":66,"end":81,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":108,"end":123,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Captured name, payload byte count and Unix creation time; not a live handle."},"source":{"line":28,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_buffer-info-0"},{"id":"t:tmux_buffer:paste_options/0","publicId":"t:tmux_buffer:paste_options/0","qualifiedName":"tmux_buffer:paste_options/0","name":"paste_options/0","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type paste_options() ::\n #{separator => binary(),\n delete => boolean(),\n bracketed => boolean(),\n sanitize => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":50,"end":56,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":82,"end":89,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":118,"end":125,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":153,"end":160,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Paste controls. separator defaults to LF; delete and bracketed default to false. sanitize defaults to false, preserving bytes. Explicit sanitization requires tmux 3.7+. Bracketing occurs only when the pane enables bracketed paste."},"source":{"line":36,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_buffer-paste_options-0"},{"id":"t:tmux_buffer:read_options/0","publicId":"t:tmux_buffer:read_options/0","qualifiedName":"tmux_buffer:read_options/0","name":"read_options/0","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type read_options() ::\n #{max_bytes => 0..1048576,\n deadline_ms => 1..600000}.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read bounds: max_bytes defaults to 1 MiB; deadline_ms defaults to 2500."},"source":{"line":30,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_buffer-read_options-0"},{"id":"t:tmux_buffer:target/0","publicId":"t:tmux_buffer:target/0","qualifiedName":"tmux_buffer:target/0","name":"target/0","namespace":"tmux_buffer","parent":"tmux_buffer","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type target() :: binary() | latest.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":18,"end":24,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A stored buffer name, or latest to let tmux select its newest buffer."},"source":{"line":26,"file":"apps/libtmux_erlang/src/tmux_buffer.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_buffer-target-0"},{"id":"tmux_capability","publicId":"tmux_capability","qualifiedName":"tmux_capability","name":"tmux_capability","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Look up source-derived native command declarations and feature minimums.","body":"`commands/1` and `command/2` describe the exact source profiles in `profiles/0`.\nProfiles cover every release in the supported tmux 3.3a–3.8 range. They do not\ncontact tmux, interpret its arguments or qualify another build.\nCanonical command names are lookup keys; aliases remain metadata. A native\ndeclaration does not mean this library provides a typed facade for it. Use\n`tmux_command:raw/2` for an explicit trusted command.\n\n`describe/1` reports selected native feature minimums. `require/2` compares a\nparsed version with one of those minimums; it does not perform I/O or dispatch\nthe command. Numeric minimum checks also accept uncatalogued and tracking\nversions, preserving the distinction from exact parser discovery. They do not\nestablish runtime or CI qualification. Use `tmux_server:version/1` to obtain the\nversion captured by a registered endpoint.\n\nThe [generated reference](commands-reference.md) records source profiles and\nparser declarations. Maintaining the catalogue needs a tmux source checkout;\ninstalled consumers use compiled data and OTP only."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_capability"},{"id":"tmux_capability:command/2","publicId":"tmux_capability:command/2","qualifiedName":"tmux_capability:command/2","name":"command/2","namespace":"tmux_capability","parent":"tmux_capability","kind":"function","modifiers":[],"signatures":[{"raw":"command(Version, Name)\n-spec command(tmux_version:t(), binary()) ->\n {ok, command_info()} | {error, map()}.","references":[{"start":37,"end":51,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":55,"end":61,"target":"t:erlang:binary/0"},{"start":90,"end":102,"target":"t:tmux_capability:command_info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":116,"end":119,"target":"t:erlang:map/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, command_info()} | {error, map()}","returnsReferences":[{"start":5,"end":17,"target":"t:tmux_capability:command_info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":31,"end":34,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Look up one canonical native command in an exact source profile. Returns unknown_command for aliases or unknown names, unsupported_command when a known command is absent from that profile, and unsupported_command_catalogue for uncatalogued or tracking versions. Performs no I/O.","examples":[{"lang":"erlang","code":"1> {ok, V} = tmux_version:parse(<<\"tmux 3.3a\">>), ok.\nok\n2> {ok, C} = tmux_capability:command(V, <<\"send-keys\">>), ok.\nok\n3> maps:get(file, maps:get(source, C)).\n<<\"cmd-send-keys.c\">>"}]},"source":{"line":74,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_capability-command-2"},{"id":"tmux_capability:commands/1","publicId":"tmux_capability:commands/1","qualifiedName":"tmux_capability:commands/1","name":"commands/1","namespace":"tmux_capability","parent":"tmux_capability","kind":"function","modifiers":[],"signatures":[{"raw":"commands(Version)\n-spec commands(tmux_version:t()) ->\n {ok, [binary()]} | {error, map()}.","references":[{"start":33,"end":47,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":78,"end":84,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":99,"end":102,"target":"t:erlang:map/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]}],"returns":"{ok, [binary()]} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":6,"end":12,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":27,"end":30,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return sorted canonical command names for an exact catalogued stable version. Tracking and uncatalogued versions return unsupported_command_catalogue. This is pure source discovery; it does not execute list-commands."},"source":{"line":50,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_capability-commands-1"},{"id":"tmux_capability:describe/1","publicId":"tmux_capability:describe/1","qualifiedName":"tmux_capability:describe/1","name":"describe/1","namespace":"tmux_capability","parent":"tmux_capability","kind":"function","modifiers":[],"signatures":[{"raw":"describe/1\n-spec describe(feature()) ->\n {ok, feature_info()} | {error, map()}.","references":[{"start":26,"end":33,"target":"t:tmux_capability:feature/0"},{"start":63,"end":75,"target":"t:tmux_capability:feature_info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":89,"end":92,"target":"t:erlang:map/0"}],"params":[{"name":"Feature","type":"feature()","typeReferences":[{"start":0,"end":7,"target":"t:tmux_capability:feature/0"}]}],"returns":"{ok, feature_info()} | {error, map()}","returnsReferences":[{"start":5,"end":17,"target":"t:tmux_capability:feature_info/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":31,"end":34,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return a selected native feature's source-derived minimum and sampled profiles. Unknown features return unknown_capability. Performs no I/O; `require/2` applies the minimum to a parsed version."},"source":{"line":99,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_capability-describe-1"},{"id":"tmux_capability:profiles/0","publicId":"tmux_capability:profiles/0","qualifiedName":"tmux_capability:profiles/0","name":"profiles/0","namespace":"tmux_capability","parent":"tmux_capability","kind":"function","modifiers":[],"signatures":[{"raw":"profiles()\n-spec profiles() -> [binary()].","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":32,"end":38,"target":"t:erlang:binary/0"}],"params":[],"returns":"[binary()]","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":1,"end":7,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"List the exact source profile names in catalogue order. Performs no I/O."},"source":{"line":42,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_capability-profiles-0"},{"id":"tmux_capability:require/2","publicId":"tmux_capability:require/2","qualifiedName":"tmux_capability:require/2","name":"require/2","namespace":"tmux_capability","parent":"tmux_capability","kind":"function","modifiers":[],"signatures":[{"raw":"require(Version, Feature)\n-spec require(tmux_version:t(), feature()) ->\n ok | {error, map()}.","references":[{"start":40,"end":54,"target":"t:tmux_version:t/0"},{"start":58,"end":65,"target":"t:tmux_capability:feature/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":102,"end":105,"target":"t:erlang:map/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]},{"name":"Feature","type":"feature()","typeReferences":[{"start":0,"end":7,"target":"t:tmux_capability:feature/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Require a native feature's numeric major/minor floor without dispatching I/O. An older version returns unsupported_capability with capability and minimum. Patch letters and tracking markers do not promote an older minor version. Unknown features and malformed parsed versions return distinct errors.","examples":[{"lang":"erlang","code":"1> {ok, V} = tmux_version:parse(<<\"tmux 3.4\">>), ok.\nok\n2> tmux_capability:require(V, send_client_keys).\nok"}]},"source":{"line":122,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_capability-require-2"},{"id":"t:tmux_capability:command_info/0","publicId":"t:tmux_capability:command_info/0","qualifiedName":"tmux_capability:command_info/0","name":"command_info/0","namespace":"tmux_capability","parent":"tmux_capability","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type command_info() ::\n #{alias := binary() | none,\n argument_spec := binary(),\n min_args := non_neg_integer(),\n max_args := non_neg_integer() | none,\n source :=\n #{file := binary(),\n commit := binary(),\n sha256 := binary()}}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":45,"end":51,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":91,"end":97,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":125,"end":140,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":168,"end":183,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":242,"end":248,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":280,"end":286,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":318,"end":324,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Native alias, flag declaration and positional bounds, with the exact source file, commit and SHA-256. none means no alias or an unbounded positional upper limit. Additional argument callbacks and runtime checks remain tmux's concern."},"source":{"line":36,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_capability-command_info-0"},{"id":"t:tmux_capability:feature/0","publicId":"t:tmux_capability:feature/0","qualifiedName":"tmux_capability:feature/0","name":"feature/0","namespace":"tmux_capability","parent":"tmux_capability","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type feature() ::\n native_list_filter | send_client_keys |\n key_list_format | layout_json.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Selected native capabilities; these do not introduce new typed command options."},"source":{"line":27,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_capability-feature-0"},{"id":"t:tmux_capability:feature_info/0","publicId":"t:tmux_capability:feature_info/0","qualifiedName":"tmux_capability:feature_info/0","name":"feature_info/0","namespace":"tmux_capability","parent":"tmux_capability","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type feature_info() ::\n #{minimum :=\n {non_neg_integer(), non_neg_integer()},\n commands := [binary()],\n description := binary(),\n versions := [binary()]}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":64,"end":79,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":83,"end":98,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":128,"end":134,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":166,"end":172,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":201,"end":207,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Source-sampled profiles, native commands, description and numeric minimum."},"source":{"line":29,"file":"apps/libtmux_erlang/src/tmux_capability.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_capability-feature_info-0"},{"id":"tmux_command","publicId":"tmux_command","qualifiedName":"tmux_command","name":"tmux_command","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Build tmux commands and bounded sequences without performing I/O.","body":"Arguments remain binary values. Rendering protects trailing semicolons from\ntmux's command separator parser. This is distinct from shell quoting and from\nformat expansion. A raw command is trusted application code; external services\nmust apply their own command allowlist and write policy.\n\nUse `literal_format/1` only for a whole argument that tmux\nexpands as a format, such as a new name or cwd. It does not encode a value\nnested in a format expression. tmux's stored-name escaping and session-name\nsubstitutions still apply. Use `literal_format/2` with mode time\nfor commands such as display-message that also expand strftime percent\ndirectives. This protects one format-expansion pass, not later visual style\nrendering or recursive/nested expansion. No renderer reverses stored-name\nsemantics.\n\n`launch/1` distinguishes executable argv from an explicitly\nrequested shell command. A singleton argv uses the installed helper's\nexec-only mode because tmux otherwise passes one argument to its default\nshell. Empty argv is invalid; default_shell explicitly requests tmux's\nconfigured default command/shell. The internal helper uses an absolute path so\na child's cwd does not change helper resolution. Relative executable arguments\nretain their native meaning.\n\nEmpty shell commands have command-specific lifetime. split-window creates a\nprocess-free pane. new-session executes an empty shell command and can remove\nthe new object immediately. new-window does likewise before tmux 3.8; tmux 3.8\ncreates a process-free pane. Use a persistent job for parent sessions/windows\nthat must remain available across supported versions.\n\nSubmit commands through `tmux_server:command/3` or `tmux_operation:start/3`.\n`sequence/1` combines flat command values for one-shot execution with combined\noutput and a possible completed prefix on error.\nThe [job guide](jobs.md) shows submission, completion and cancellation.\n`tmux_session:rename_command/2` and `tmux_pane:resize_command/2` build values\nbound to their row's captured origin. Execution through another endpoint\nreturns different_owner before native work. Construction does not validate\nendpoint liveness or authorize an automatic mutation retry.\n\n`wait_for/2` builds native channel signals, waits and advisory locks.\n`source_file/2` builds configuration loading from stdin or a literal absolute\npath. Both return command values without opening an endpoint or doing I/O.\n`to_config/1` renders a command or bounded command list for native\nconfiguration input, preserving argument bytes through tmux's lexer.","examples":[{"lang":"erlang","code":"1> {ok, C} = tmux_command:raw(<<\"list-panes\">>, [<<\"-a\">>]), ok.\nok\n2> tmux_command:argv(C).\n[<<\"list-panes\">>,<<\"-a\">>]\n3> tmux_command:literal_format(<<\"api-#{pane_id}\">>).\n{ok,<<\"api-##{pane_id}\">>}\n4> tmux_command:launch(#{argv => [<<\"/bin/printf\">>, <<\"hello\">>]}).\n{ok,[<<\"/bin/printf\">>,<<\"hello\">>]}"}]},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_command"},{"id":"tmux_command:argv/1","publicId":"tmux_command:argv/1","qualifiedName":"tmux_command:argv/1","name":"argv/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"argv(Command)\n-spec argv(t()) -> [binary()].","references":[{"start":25,"end":26,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":34,"end":40,"target":"t:erlang:binary/0"}],"params":[{"name":"Command","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_command:t/0"}]}],"returns":"[binary()]","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":1,"end":7,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Render a validated command into executable argv, protecting trailing tmux separators. Performs no I/O and raises for an invalid command value."},"source":{"line":299,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_command-argv-1"},{"id":"tmux_command:launch/1","publicId":"tmux_command:launch/1","qualifiedName":"tmux_command:launch/1","name":"launch/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"launch/1\n-spec launch(launch_spec()) ->\n {ok, [binary()]} | {error, map()}.","references":[{"start":22,"end":33,"target":"t:tmux_command:launch_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":62,"end":68,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":83,"end":86,"target":"t:erlang:map/0"}],"params":[{"name":"Argument1","type":"launch_spec()","typeReferences":[{"start":0,"end":11,"target":"t:tmux_command:launch_spec/0"}]}],"returns":"{ok, [binary()]} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":6,"end":12,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":27,"end":30,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Render explicit executable argv, an explicitly requested shell command, or default_shell. Singleton argv uses the installed helper's exec-only mode to avoid tmux interpreting it as shell syntax. Performs no I/O."},"source":{"line":448,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_command-launch-1"},{"id":"tmux_command:literal_format/1","publicId":"tmux_command:literal_format/1","qualifiedName":"tmux_command:literal_format/1","name":"literal_format/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"literal_format(Value)\n-spec literal_format(binary()) ->\n {ok, binary()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":43,"end":49,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":85,"end":91,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":105,"end":108,"target":"t:erlang:map/0"}],"params":[{"name":"Value","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Quote a complete literal argument for tmux format expansion. This does not encode operands nested inside another format expression. Performs no I/O."},"source":{"line":389,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_command-literal_format-1"},{"id":"tmux_command:literal_format/2","publicId":"tmux_command:literal_format/2","qualifiedName":"tmux_command:literal_format/2","name":"literal_format/2","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"literal_format/2\n-spec literal_format(binary(), tmux | time) ->\n {ok, binary()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":38,"end":44,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":93,"end":99,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":113,"end":116,"target":"t:erlang:map/0"}],"params":[{"name":"Value","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Mode","type":"tmux | time","typeReferences":[]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Quote a complete literal format argument. Mode tmux protects hash expansion; mode time also protects strftime percent directives. Stored-name semantics remain tmux's own. This handles one expansion pass, not a nested operand, recursive expansion or later visual style rendering. Performs no I/O.","body":"Hash runs before `[` stay unchanged because tmux preserves style-looking\nprefixes for a separate drawing step. Other hashes are doubled. In time mode,\nan argument containing percent bytes must fit tmux's 8191-byte strftime result\nlimit after hash encoding and before percent doubling; larger values return\n`format_limit` with `time_bytes` and `max_bytes`. Arguments without percent\nbytes skip that native time-expansion limit. The encoded 32 KiB command limit\nstill applies in either mode."},"source":{"line":407,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_command-literal_format-2"},{"id":"tmux_command:raw/2","publicId":"tmux_command:raw/2","qualifiedName":"tmux_command:raw/2","name":"raw/2","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"raw(Name, Arguments)\n-spec raw(binary(), [binary()]) ->\n {ok, t()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":31,"end":37,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":42,"end":48,"target":"t:erlang:binary/0"},{"start":74,"end":75,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":89,"end":92,"target":"t:erlang:map/0"}],"params":[{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Arguments","type":"[binary()]","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":1,"end":7,"target":"t:erlang:binary/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate one trusted command name and binary argv, without I/O. The renderer protects tmux separators; it does not provide shell or nested-format quoting. External services still need their own allowlists and write policy. Names are at most 128 bytes. NUL bytes are rejected, and at most 2,040 arguments fit within a 32 KiB command reservation including framing overhead."},"source":{"line":100,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_command-raw-2"},{"id":"tmux_command:sequence/1","publicId":"tmux_command:sequence/1","qualifiedName":"tmux_command:sequence/1","name":"sequence/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"sequence/1\n-spec sequence([t(), ...]) -> {ok, t()} | {error, map()}.","references":[{"start":27,"end":28,"target":"t:tmux_command:t/0"},{"start":46,"end":47,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":61,"end":64,"target":"t:erlang:map/0"}],"params":[{"name":"Commands","type":"[t(), ...]","typeReferences":[{"start":1,"end":2,"target":"t:tmux_command:t/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Build one bounded native command sequence without I/O. Members must be a nonempty flat list of at most 256 command values. Their combined executable argv is limited to 2041 words and 32 KiB including separator overhead. Arguments keep the literal separator protection of `raw/2`; only boundaries between members become native command separators in `argv/1`.","body":"Captured members must share an endpoint origin. That origin also binds the\nsequence; raw members use the caller's explicitly selected endpoint. Submit\nthrough `tmux_server:command/3` or `tmux_operation:start/3`.\n\nExecution is not atomic. A failed member can leave a completed prefix, and\ncommands can wait or interleave with other work. The one-shot result contains\ncombined bounded stdout/stderr and native exit status, without per-member\ncompletion attribution or rollback. Control-mode eligibility is separate.\n`to_config/1` can serialize a sequence with the same origin-loss policy as\nother configuration text."},"source":{"line":129,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_command-sequence-1"},{"id":"tmux_command:source_file/2","publicId":"tmux_command:source_file/2","qualifiedName":"tmux_command:source_file/2","name":"source_file/2","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"source_file(Source, Options)\n-spec source_file(source(), source_options()) ->\n {ok, t()} | {error, map()}.","references":[{"start":47,"end":53,"target":"t:tmux_command:source/0"},{"start":57,"end":71,"target":"t:tmux_command:source_options/0"},{"start":104,"end":105,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":119,"end":122,"target":"t:erlang:map/0"}],"params":[{"name":"Source","type":"source()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_command:source/0"}]},{"name":"Options","type":"source_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_command:source_options/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Build configuration loading from stdin or one literal absolute path, without I/O. `stdin` renders `source-file -`; supply configuration bytes in the `stdin` option of `tmux_server:command/3` or `tmux_operation:start/3`. Those APIs bound input to 256 KiB including their argument reservation.","body":"Paths are NUL-free POSIX byte binaries. Glob metacharacters and backslashes\nare escaped so only that filename is selected; format expansion is disabled.\nThe combined encoded path and flags must fit `raw/2` limits. The file is read\nby tmux at execution time; this builder does not open it or bound its size.\n\n`parse_only` requests native `-n` parsing without executing the configuration's\ncommand list. `quiet` requests native `-q` missing-file suppression; it does\nnot suppress syntax or execution errors. Both default to false. Configuration\nis trusted tmux code, with its own variable, directive and command semantics.\nParse-only is not a sandbox. Execution can partially change server state before\nan error; cancellation cannot undo those effects. Completion does not prove\nthat background jobs launched by the configuration have finished.","examples":[{"lang":"erlang","code":"1> {ok, Source} = tmux_command:source_file(stdin, #{parse_only => true}), ok.\nok\n2> tmux_command:argv(Source).\n[<<\"source-file\">>,<<\"-n\">>,<<\"--\">>,<<\"-\">>]"}]},"source":{"line":228,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_command-source_file-2"},{"id":"tmux_command:to_config/1","publicId":"tmux_command:to_config/1","qualifiedName":"tmux_command:to_config/1","name":"to_config/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"to_config/1\n-spec to_config(t() | [t(), ...]) ->\n {ok, binary()} | {error, map()}.","references":[{"start":28,"end":29,"target":"t:tmux_command:t/0"},{"start":35,"end":36,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":73,"end":79,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":93,"end":96,"target":"t:erlang:map/0"}],"params":[{"name":"Argument1","type":"t() | [t(), ...]","typeReferences":[{"start":0,"end":1,"target":"t:tmux_command:t/0"},{"start":7,"end":8,"target":"t:tmux_command:t/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Render validated commands as native configuration text, without I/O. Accepts one command, a `sequence/1` value, or a nonempty flat list of at most 256 commands. Returns an ASCII binary of at most 32 KiB, without a final newline. Validation uses `validate/1`; escaping growth, command count and aggregate size can return `command_limit`. Lists use native command separators between independently quoted commands. Rendering does not execute them or provide atomic execution or rollback. The text carries no origin token; executing serialized configuration requires the caller to choose and validate its destination explicitly.","body":"Each argument is doublequoted. Quote, backslash, dollar, tilde, control and\nnon-ASCII bytes use three-digit octal escapes. Empty arguments, semicolons,\nnewlines and non-UTF-8 byte values remain argument data. The lexer does not\nexpand their variables or tilde prefixes, strip newline indentation, or\ninterpret them as directives, comments or additional commands.\n\nProtection covers one lexer pass. Native command-string arguments, including\n`bind-key` and `set-hook` values, can be parsed again by the receiving command.\nRender each inner command string separately for its own parse boundary.\n\nThis is tmux configuration syntax, separate from `argv/1` executable arguments\nand shell quoting. Native commands still interpret their values and expand\nformats as usual; `literal_format/2` handles that separate boundary when\nliteral format values are required. Load the text explicitly with\n`source_file/2`, or store it through a native command that accepts configuration\ntext. The [configuration guide](configuration.md) uses this renderer with\nexplicit execution and completion signals."},"source":{"line":340,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_command-to_config-1"},{"id":"tmux_command:validate/1","publicId":"tmux_command:validate/1","qualifiedName":"tmux_command:validate/1","name":"validate/1","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"validate/1\n-spec validate(term()) -> {ok, t()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":26,"end":30,"target":"t:erlang:term/0"},{"start":42,"end":43,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":57,"end":60,"target":"t:erlang:map/0"}],"params":[{"name":"Argument1","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Revalidate a command value at a submission boundary. Returns a compact validated command or a tagged shape/argument/resource error, without I/O."},"source":{"line":252,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_command-validate-1"},{"id":"tmux_command:wait_for/2","publicId":"tmux_command:wait_for/2","qualifiedName":"tmux_command:wait_for/2","name":"wait_for/2","namespace":"tmux_command","parent":"tmux_command","kind":"function","modifiers":[],"signatures":[{"raw":"wait_for(Channel, Action)\n-spec wait_for(binary(), wait_action()) ->\n {ok, t()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":41,"end":47,"target":"t:erlang:binary/0"},{"start":51,"end":62,"target":"t:tmux_command:wait_action/0"},{"start":92,"end":93,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":107,"end":110,"target":"t:erlang:map/0"}],"params":[{"name":"Channel","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Action","type":"wait_action()","typeReferences":[{"start":0,"end":11,"target":"t:tmux_command:wait_action/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Build a native `wait-for` command without I/O. Channels are nonempty NUL-free binary names, subject to the command reservation in `raw/2`; neither shell nor format expansion occurs. Submit through `tmux_operation:start/3` for a wait that leaves the caller free, or through `tmux_server:command/3` to await it.","body":"`signal` wakes current waiters. On an unlocked channel with no waiters or\npending wakeup, it retains one wakeup for a later wait. Signaling that channel\nagain before a wait can clear the pending state. Signals are neither counted\nnor reliably coalesced events; send once per expected wait. Channel names are\nshared by all clients of the server. Use separate names for signaling and\nlocking. `lock` acquires an advisory channel lock or waits\nfor an explicit `unlock`; a completed command client's exit does not release\nits acquired lock. Unlocking an unlocked channel is a native command error.\n\nCancellation retires the library client. It does not undo a signal or release\na lock that may already have been acquired; an uncertain lock outcome needs\napplication coordination before another unlock. This is not an owned mutex.","examples":[{"lang":"erlang","code":"1> {ok, Signal} = tmux_command:wait_for(<<\"build-ready\">>, signal), ok.\nok\n2> tmux_command:argv(Signal).\n[<<\"wait-for\">>,<<\"-S\">>,<<\"--\">>,<<\"build-ready\">>]"}]},"source":{"line":188,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_command-wait_for-2"},{"id":"t:tmux_command:launch_spec/0","publicId":"t:tmux_command:launch_spec/0","qualifiedName":"tmux_command:launch_spec/0","name":"launch_spec/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type launch_spec() ::\n default_shell |\n #{argv := [binary(), ...]} |\n #{shell := binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":70,"end":76,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":109,"end":115,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Explicit executable argv, an explicitly requested shell command, or tmux's configured default shell."},"source":{"line":74,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_command-launch_spec-0"},{"id":"t:tmux_command:respawn_spec/0","publicId":"t:tmux_command:respawn_spec/0","qualifiedName":"tmux_command:respawn_spec/0","name":"respawn_spec/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type respawn_spec() ::\n previous |\n #{argv := [binary(), ...]} |\n #{shell := binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":66,"end":72,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":105,"end":111,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Reuse tmux's saved command/shell, or replace it with argv or a shell command. Used by `tmux_pane:respawn/2` and `tmux_window:respawn/2`."},"source":{"line":81,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_command-respawn_spec-0"},{"id":"t:tmux_command:source/0","publicId":"t:tmux_command:source/0","qualifiedName":"tmux_command:source/0","name":"source/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type source() :: stdin | binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":26,"end":32,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Standard input, or one literal absolute POSIX byte path with no NUL."},"source":{"line":68,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_command-source-0"},{"id":"t:tmux_command:source_options/0","publicId":"t:tmux_command:source_options/0","qualifiedName":"tmux_command:source_options/0","name":"source_options/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type source_options() ::\n #{parse_only => boolean(), quiet => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":52,"end":59,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":72,"end":79,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Native parse-only and quiet-missing-file flags; both default to false."},"source":{"line":70,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_command-source_options-0"},{"id":"t:tmux_command:t/0","publicId":"t:tmux_command:t/0","qualifiedName":"tmux_command:t/0","name":"t/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated command or flat sequence. Rendering and execution remain separate. Domain builders retain a captured endpoint origin; raw values are unbound."},"source":{"line":87,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_command-t-0"},{"id":"t:tmux_command:wait_action/0","publicId":"t:tmux_command:wait_action/0","qualifiedName":"tmux_command:wait_action/0","name":"wait_action/0","namespace":"tmux_command","parent":"tmux_command","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type wait_action() :: wait | signal | lock | unlock.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Native wait channel action. lock/unlock are explicit advisory operations, not owned leases."},"source":{"line":66,"file":"apps/libtmux_erlang/src/tmux_command.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_command-wait_action-0"},{"id":"tmux_control","publicId":"tmux_control","qualifiedName":"tmux_control","name":"tmux_control","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Own an explicit persistent tmux control attachment.","body":"`attach/3` attaches to an existing session from `m:tmux_server` and verifies\nthe daemon identity on that connection. The caller owns its lifetime.\nAttachment changes the session's attached-client count. The command client\nuses no-output and ignore-size; -E skips attachment's environment update.\nThe library issues no session-option writes or session-creation commands.\nConfigured hooks and native lifetime policies can still change state,\nincluding on failed attach or detachment. Those effects are not rolled back.\nCommand submission and terminal streaming are not yet exposed.\n\nUse `close/1` before closing the parent endpoint. Parent closing, invalidation\nor caller death requests retirement, but parent close alone does not prove\nthis client's exit. Control close and `status/1` report its native cleanup.\nNeither detachment nor cancellation reverses remote effects. Application\nshutdown alone is not a verified cleanup result."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_control"},{"id":"tmux_control:attach/3","publicId":"tmux_control:attach/3","qualifiedName":"tmux_control:attach/3","name":"attach/3","namespace":"tmux_control","parent":"tmux_control","kind":"function","modifiers":[],"signatures":[{"raw":"attach(Server, Session, Options)\n-spec attach(tmux_server:t(),\n tmux_model:session(),\n attach_options()) ->\n {ok, t()} | {error, map()}.","references":[{"start":46,"end":59,"target":"t:tmux_server:t/0"},{"start":76,"end":94,"target":"t:tmux_model:session/0"},{"start":111,"end":125,"target":"t:tmux_control:attach_options/0"},{"start":153,"end":154,"target":"t:tmux_control:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":168,"end":171,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Options","type":"attach_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_control:attach_options/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_control:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Attach to an existing captured session from this exact endpoint origin. Performs I/O and waits for a same-connection identity probe. Uses attach-session with -E rather than creating a session or writing options. Configured hooks may change state; failure does not reverse their effects. The control client affects attached_count. Unexpected hook-generated reply blocks fail attachment and retire the client.","body":"An attachment timeout requests cleanup. If cleanup cannot be proved within\nits finite deadline, the error includes a control handle for `close/1` recovery.\nThe supervised owner remains until native retirement. Close explicitly to\nobserve cleanup, including when the parent endpoint is already closed."},"source":{"line":55,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_control-attach-3"},{"id":"tmux_control:close/1","publicId":"tmux_control:close/1","qualifiedName":"tmux_control:close/1","name":"close/1","namespace":"tmux_control","parent":"tmux_control","kind":"function","modifiers":[],"signatures":[{"raw":"close(Control)\n-spec close(t()) -> ok | {error, map()}.","references":[{"start":27,"end":28,"target":"t:tmux_control:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":48,"end":51,"target":"t:erlang:map/0"}],"params":[{"name":"Control","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_control:t/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Retire this control client and its helper without issuing session or daemon destruction commands. Native lifetime policies and detachment hooks may still change state; cleanup does not reverse their effects. Returns ok only after actual retirement. A finite cleanup failure leaves a supervised owner for retry and observation. Successful close is idempotent during the 60-second handle retention period."},"source":{"line":89,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_control-close-1"},{"id":"tmux_control:status/1","publicId":"tmux_control:status/1","qualifiedName":"tmux_control:status/1","name":"status/1","namespace":"tmux_control","parent":"tmux_control","kind":"function","modifiers":[],"signatures":[{"raw":"status(Control)\n-spec status(t()) -> {ok, state()} | {error, map()}.","references":[{"start":29,"end":30,"target":"t:tmux_control:t/0"},{"start":42,"end":47,"target":"t:tmux_control:state/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":61,"end":64,"target":"t:erlang:map/0"}],"params":[{"name":"Control","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_control:t/0"}]}],"returns":"{ok, state()} | {error, map()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_control:state/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":24,"end":27,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read retained connection state without a tmux command. Inspect cleanup rather than inferring native exit from the Erlang owner's lifecycle. Closed handles expire after 60 seconds and then return control_expired."},"source":{"line":97,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_control-status-1"},{"id":"t:tmux_control:attach_options/0","publicId":"t:tmux_control:attach_options/0","qualifiedName":"tmux_control:attach_options/0","name":"attach_options/0","namespace":"tmux_control","parent":"tmux_control","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type attach_options() ::\n #{startup_timeout_ms => 1..600000}.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Finite attachment budget, including parent registration, exec and identity. Defaults to 2500 ms."},"source":{"line":29,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_control-attach_options-0"},{"id":"t:tmux_control:state/0","publicId":"t:tmux_control:state/0","qualifiedName":"tmux_control:state/0","name":"state/0","namespace":"tmux_control","parent":"tmux_control","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type state() ::\n #{phase := attaching | open | closing | closed,\n generation := reference(),\n owner := pid(),\n identity := unverified | same_connection,\n cleanup := pending | incomplete | complete,\n child_pid := none | pos_integer(),\n helper_pid := none | pos_integer(),\n cause := none | atom()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":101,"end":110,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pid/0","project":"Erlang/OTP"},"start":135,"end":138,"target":"t:erlang:pid/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":284,"end":295,"target":"t:erlang:pos_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":332,"end":343,"target":"t:erlang:pos_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":375,"end":379,"target":"t:erlang:atom/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Connection state, separate from command completion. complete proves native client/helper retirement; pending and incomplete do not. Retained PIDs are diagnostic observations, never permission to signal a process."},"source":{"line":35,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_control-state-0"},{"id":"t:tmux_control:t/0","publicId":"t:tmux_control:t/0","qualifiedName":"tmux_control:t/0","name":"t/0","namespace":"tmux_control","parent":"tmux_control","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A generation-bound connection handle. Passing it does not transfer lifetime ownership."},"source":{"line":27,"file":"apps/libtmux_erlang/src/tmux_control.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_control-t-0"},{"id":"tmux_error","publicId":"tmux_error","qualifiedName":"tmux_error","name":"tmux_error","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Explain library exceptions through Erlang's native error formatter.","body":"The shell and `erl_error:format_exception/3` call `format_error/2` through\nEEP-54 stack metadata. Explanations supplement the original exception reason;\ntagged results from `tmux_filter:new/2` and `tmux_select:try_where/2` retain\ntheir existing structured data. Formatting performs no tmux I/O.\n\nOnly library-raised errors carry this metadata. Application callback failures\nretain their original class, reason and stack. Coverage errors describe missing\nobservations; formatting never loads those observations or retries an action.\nLong detail values may be abbreviated in the explanation. The exception reason\nretains the original error data. See [runtime diagnostics](diagnostics.md) for\nthe separate, bounded Logger report contract."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_error.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_error"},{"id":"tmux_error:format_error/2","publicId":"tmux_error:format_error/2","qualifiedName":"tmux_error:format_error/2","name":"format_error/2","namespace":"tmux_error","parent":"tmux_error","kind":"function","modifiers":[],"signatures":[{"raw":"format_error/2\n-spec format_error(term(), erlang:stacktrace()) ->\n #{general => unicode:chardata()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":34,"end":38,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:stacktrace/0","project":"Erlang/OTP"},"start":42,"end":59,"target":"t:erlang:stacktrace/0"},{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/unicode.html#t:chardata/0","project":"Erlang/OTP"},"start":101,"end":117,"target":"t:unicode:chardata/0"}],"params":[{"name":"Argument1","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]},{"name":"Argument2","type":"erlang:stacktrace()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:stacktrace/0","project":"Erlang/OTP"},"start":0,"end":17,"target":"t:erlang:stacktrace/0"}]}],"returns":"#{general => unicode:chardata()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/unicode.html#t:chardata/0","project":"Erlang/OTP"},"start":13,"end":29,"target":"t:unicode:chardata/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return supplemental native error text, or an empty map for an unknown reason.","body":"This is the `c:erl_error:format_error/2` callback. It neither changes the\nexception nor catches it on behalf of a caller.","examples":[{"lang":"erlang","code":"1> #{general := Text} = tmux_error:format_error({bad_query_limit, -1}, []), ok.\nok\n2> unicode:characters_to_binary(Text).\n<<\"The query limit must be an integer from 0 through 65536.\">>"}]},"source":{"line":34,"file":"apps/libtmux_erlang/src/tmux_error.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_error-format_error-2"},{"id":"tmux_filter","publicId":"tmux_filter","qualifiedName":"tmux_filter","name":"tmux_filter","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Construct portable conditions and prepare them against captured values.","body":"Local criteria use atom keys, binary text and schema-typed values. Fields and\noperators conjoin. Boolean branches use 'and', 'or' and 'not'; relationships\nuse some/every/none/count or is/is_not. Validation examines the entire input\nbefore evaluation. No function here performs tmux I/O. Use portable filters\nwith `tmux_select:where/2` or `tmux_query:where/2`; the [query\nguide](querying.md) explains their different execution boundaries.\n\nWire version 1 uses generated camelCase field names, snake_case operators,\nJSON null for known absence and {\"base64\": \"...\"} for byte operands. Byte\nvalues never become text implicitly. Regex uses the restricted ASCII\nportable_v1 dialect, absolute anchors and no flags. Preparation compiles each\npattern once. Non-ASCII subjects and exhausted match limits return errors.\n\nBoth input criteria and their normalized wire document must fit the grammar,\ndepth and byte limits. Resource errors can refer to the canonical wire path.","examples":[{"lang":"erlang","code":"1> Fields = #{id => <<\"%1\">>, current_command => <<\"vim\">>}, ok.\nok\n2> {ok, P} = tmux_model:pane(Fields), S = tmux_select:from_list(pane, [P]), ok.\nok\n3> R = #{pattern => <<\"^(vim|nvim)$\">>, dialect => portable_v1}, ok.\nok\n4> tmux_select:size(tmux_select:where(#{current_command => #{regex => R}}, S)).\n1"}]},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_filter"},{"id":"tmux_filter:decode_json/1","publicId":"tmux_filter:decode_json/1","qualifiedName":"tmux_filter:decode_json/1","name":"decode_json/1","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"decode_json(Binary)\n-spec decode_json(binary()) ->\n {ok, json:decode_value()} |\n {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":38,"end":44,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/json.html#t:decode_value/0","project":"Erlang/OTP"},"start":77,"end":94,"target":"t:json:decode_value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":129,"end":132,"target":"t:erlang:map/0"}],"params":[{"name":"Binary","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, json:decode_value()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/json.html#t:decode_value/0","project":"Erlang/OTP"},"start":5,"end":22,"target":"t:json:decode_value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":36,"end":39,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Decode bounded external JSON with duplicate-key, trailing-input and depth checks. Returns tagged errors with input paths. Parsing does not execute tmux or choose application modules."},"source":{"line":135,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_filter-decode_json-1"},{"id":"tmux_filter:entity/1","publicId":"tmux_filter:entity/1","qualifiedName":"tmux_filter:entity/1","name":"entity/1","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"entity/1\n-spec entity(t()) -> tmux_schema:entity().","references":[{"start":22,"end":23,"target":"t:tmux_filter:t/0"},{"start":30,"end":48,"target":"t:tmux_schema:entity/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_filter:t/0"}]}],"returns":"tmux_schema:entity()","returnsReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the schema entity this portable filter accepts, without I/O."},"source":{"line":141,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_filter-entity-1"},{"id":"tmux_filter:from_wire/2","publicId":"tmux_filter:from_wire/2","qualifiedName":"tmux_filter:from_wire/2","name":"from_wire/2","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"from_wire(Entity, Document)\n-spec from_wire(tmux_schema:entity(), term()) ->\n {ok, t()} | {error, map()}.","references":[{"start":44,"end":62,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":66,"end":70,"target":"t:erlang:term/0"},{"start":101,"end":102,"target":"t:tmux_filter:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":116,"end":119,"target":"t:erlang:map/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Document","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_filter:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate a versioned filter document using generated wire-name allowlists. Rejects unknown fields, operators, wrong entity/version and resource limits. No payload key becomes an atom; this does not execute a query."},"source":{"line":99,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_filter-from_wire-2"},{"id":"tmux_filter:matches/2","publicId":"tmux_filter:matches/2","qualifiedName":"tmux_filter:matches/2","name":"matches/2","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"matches(Prepared, Row)\n-spec matches(prepared(), tmux_model:row()) ->\n {ok, boolean()} | {error, map()}.","references":[{"start":37,"end":45,"target":"t:tmux_filter:prepared/0"},{"start":49,"end":63,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":92,"end":99,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":113,"end":116,"target":"t:erlang:map/0"}],"params":[{"name":"Prepared","type":"prepared()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_filter:prepared/0"}]},{"name":"Row","type":"tmux_model:row()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_model:row/0"}]}],"returns":"{ok, boolean()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":5,"end":12,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":26,"end":29,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Evaluate an unmodified captured row against a prepared filter. Returns a Boolean result or tagged context/regex resource error. It performs no tmux I/O and never converts evaluation failure into a nonmatch."},"source":{"line":223,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_filter-matches-2"},{"id":"tmux_filter:new/2","publicId":"tmux_filter:new/2","qualifiedName":"tmux_filter:new/2","name":"new/2","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"new/2\n-spec new(tmux_schema:entity(), map() | t()) ->\n {ok, t()} | {error, map()}.","references":[{"start":16,"end":34,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":38,"end":41,"target":"t:erlang:map/0"},{"start":46,"end":47,"target":"t:tmux_filter:t/0"},{"start":72,"end":73,"target":"t:tmux_filter:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":87,"end":90,"target":"t:erlang:map/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Filter","type":"map() | t()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"},{"start":8,"end":9,"target":"t:tmux_filter:t/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_filter:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate criteria or reuse an already normalized filter for the same entity.","examples":[{"lang":"erlang","code":"1> {ok, F} = tmux_filter:new(pane, #{width => #{gte => 120.0}}), ok.\nok\n2> tmux_filter:new(pane, F) =:= {ok, F}.\ntrue\n3> tmux_filter:new(pane, #{active => #{contains => <<\"yes\">>}}).\n{error,#{code => unsupported_operator,path => [active,contains],allowed => [equals,'not',in,not_in]}}"}]},"source":{"line":75,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_filter-new-2"},{"id":"tmux_filter:new_or_error/2","publicId":"tmux_filter:new_or_error/2","qualifiedName":"tmux_filter:new_or_error/2","name":"new_or_error/2","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"new_or_error(Entity, Criteria)\n-spec new_or_error(tmux_schema:entity(), map() | t()) ->\n t().","references":[{"start":50,"end":68,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":72,"end":75,"target":"t:erlang:map/0"},{"start":80,"end":81,"target":"t:tmux_filter:t/0"},{"start":110,"end":111,"target":"t:tmux_filter:t/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Criteria","type":"map() | t()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"},{"start":8,"end":9,"target":"t:tmux_filter:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_filter:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a normalized portable filter, raising bad_filter on malformed trusted criteria. Performs no tmux I/O. External input should use `new/2` or `from_wire/2` for tagged validation errors."},"source":{"line":86,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_filter-new_or_error-2"},{"id":"tmux_filter:predicate/1","publicId":"tmux_filter:predicate/1","qualifiedName":"tmux_filter:predicate/1","name":"predicate/1","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"predicate(Prepared)\n-spec predicate(prepared()) ->\n fun((tmux_model:row()) -> boolean()).","references":[{"start":36,"end":44,"target":"t:tmux_filter:prepared/0"},{"start":75,"end":89,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":96,"end":103,"target":"t:erlang:boolean/0"}],"params":[{"name":"Prepared","type":"prepared()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_filter:prepared/0"}]}],"returns":"fun((tmux_model:row()) -> boolean())","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":26,"end":33,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return a Boolean function bound to the prepared observation context.","body":"Rows outside that context raise {prepared_context_mismatch, Detail}. Regex\nevaluation errors raise {filter_evaluation_failed, Detail}. Use `matches/2`\nfor tagged errors. This does not run callbacks."},"source":{"line":205,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_filter-predicate-1"},{"id":"tmux_filter:prepare/2","publicId":"tmux_filter:prepare/2","qualifiedName":"tmux_filter:prepare/2","name":"prepare/2","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"prepare/2\n-spec prepare(t(), tmux_snapshot:t()) ->\n {ok, prepared()} | {error, map()}.","references":[{"start":24,"end":25,"target":"t:tmux_filter:t/0"},{"start":29,"end":44,"target":"t:tmux_snapshot:t/0"},{"start":73,"end":81,"target":"t:tmux_filter:prepared/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":95,"end":98,"target":"t:erlang:map/0"}],"params":[{"name":"Filter","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_filter:t/0"}]},{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"{ok, prepared()} | {error, map()}","returnsReferences":[{"start":5,"end":13,"target":"t:tmux_filter:prepared/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":27,"end":30,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Bind a filter to one snapshot and check all required coverage first.","body":"The prepared value can match only unmodified rows captured in that snapshot.\nIt remains usable after the endpoint closes. It cannot refresh observations.","examples":[{"lang":"erlang","code":"1> {ok, F} = tmux_filter:new(pane, #{width => #{gte => 80}}), ok.\nok\n2> tmux_filter:requirements(F).\n[{collection,pane},{field,pane,width}]"}]},"source":{"line":178,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_filter-prepare-2"},{"id":"tmux_filter:requirements/1","publicId":"tmux_filter:requirements/1","qualifiedName":"tmux_filter:requirements/1","name":"requirements/1","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"requirements/1\n-spec requirements(t()) -> [tmux_snapshot:requirement()].","references":[{"start":34,"end":35,"target":"t:tmux_filter:t/0"},{"start":43,"end":68,"target":"t:tmux_snapshot:requirement/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_filter:t/0"}]}],"returns":"[tmux_snapshot:requirement()]","returnsReferences":[{"start":1,"end":26,"target":"t:tmux_snapshot:requirement/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Derive every field and complete relationship needed for faithful evaluation. The complete requirement set is checked before short-circuiting any row."},"source":{"line":161,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_filter-requirements-1"},{"id":"tmux_filter:to_wire/1","publicId":"tmux_filter:to_wire/1","qualifiedName":"tmux_filter:to_wire/1","name":"to_wire/1","namespace":"tmux_filter","parent":"tmux_filter","kind":"function","modifiers":[],"signatures":[{"raw":"to_wire/1\n-spec to_wire(t()) -> wire_document().","references":[{"start":24,"end":25,"target":"t:tmux_filter:t/0"},{"start":32,"end":45,"target":"t:tmux_filter:wire_document/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_filter:t/0"}]}],"returns":"wire_document()","returnsReferences":[{"start":0,"end":13,"target":"t:tmux_filter:wire_document/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Export versioned JSON-compatible predicate data with generated wire names. Byte operands use base64 objects and known absence uses JSON null. Functions, compiled regexes and native record internals never enter this representation."},"source":{"line":125,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_filter-to_wire-1"},{"id":"t:tmux_filter:expr/0","publicId":"t:tmux_filter:expr/0","qualifiedName":"tmux_filter:expr/0","name":"expr/0","namespace":"tmux_filter","parent":"tmux_filter","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type expr() ::\n {all | any, [expr()]} |\n {negate, expr()} |\n {field, binary(), atom(), term()} |\n {relation, binary(), atom(), expr()} |\n {count, binary(), [{atom(), term()}]}.","params":[],"references":[{"start":39,"end":43,"target":"t:tmux_filter:expr/0"},{"start":69,"end":73,"target":"t:tmux_filter:expr/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":97,"end":103,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":107,"end":111,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":115,"end":119,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":146,"end":152,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":156,"end":160,"target":"t:erlang:atom/0"},{"start":164,"end":168,"target":"t:tmux_filter:expr/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":192,"end":198,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":204,"end":208,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":212,"end":216,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Normalized data expressions with stable field IDs, used by internal planners; not the wire grammar."},"source":{"line":42,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_filter-expr-0"},{"id":"t:tmux_filter:prepared/0","publicId":"t:tmux_filter:prepared/0","qualifiedName":"tmux_filter:prepared/0","name":"prepared/0","namespace":"tmux_filter","parent":"tmux_filter","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque prepared().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A cached evaluator bound to one captured observation and schema context."},"source":{"line":49,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_filter-prepared-0"},{"id":"t:tmux_filter:t/0","publicId":"t:tmux_filter:t/0","qualifiedName":"tmux_filter:t/0","name":"t/0","namespace":"tmux_filter","parent":"tmux_filter","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Portable normalized predicate data for one schema entity; contains no executable state."},"source":{"line":40,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_filter-t-0"},{"id":"t:tmux_filter:wire_document/0","publicId":"t:tmux_filter:wire_document/0","qualifiedName":"tmux_filter:wire_document/0","name":"wire_document/0","namespace":"tmux_filter","parent":"tmux_filter","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type wire_document() :: #{binary() => json:encode_value()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/json.html#t:encode_value/0","project":"Erlang/OTP"},"start":39,"end":56,"target":"t:json:encode_value/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Version-one JSON-compatible filter envelope with binary keys version, entity and where. entity is the generated wire entity name; where contains Boolean, field and relationship conditions. Version is the integer 1. Keys and operators still require `from_wire/2` validation; the typespec alone does not authorize arbitrary fields or unbounded external input."},"source":{"line":57,"file":"apps/libtmux_erlang/src/tmux_filter.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_filter-wire_document-0"},{"id":"tmux_hook","publicId":"tmux_hook","qualifiedName":"tmux_hook","name":"tmux_hook","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Store builtin hook commands and run them in an explicit observed context.","body":"`set/3` replaces one indexed entry. `append/3` uses tmux's first vacant index;\n`clear/2` leaves an empty local array and `unset/2` restores inheritance.\n`get/3` reads local values unless inheritance is requested. Commands are\n`t:tmux_command:t/0` values, rendered by `tmux_command:to_config/1` before tmux\nparses and stores them. A successful write confirms registration, while later\nhook effects need their own completion evidence.\n\nTable scope and execution context are separate. `run/2` selects a session,\nchecked window link or checked pane/link pair. Physical windows can belong to\nseveral sessions; a link preserves the chosen session and index. Preflight and\ndispatch are separate observations, with no atomic compare-and-act guarantee.\nKnown restarts and closed owners invalidate references. Captured rows never\nrefresh during these actions.\n\nNames and table scopes use the exact source-derived version catalogue from\n`tmux_option:catalogue/1`. User options, prefixes and aliases are rejected.\nThe native custom-event and monitor interfaces are outside this API. Deliberate\nraw integration remains available through `tmux_command:raw/2`. Calls perform\nI/O after validation and never retry uncertain mutations. The\n[hook guide](hooks.md) demonstrates registration and an effect acknowledgement."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_hook"},{"id":"tmux_hook:append/3","publicId":"tmux_hook:append/3","qualifiedName":"tmux_hook:append/3","name":"append/3","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"append(Scope, Name0, Commands)\n-spec append(scope(), binary(), commands()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":44,"end":49,"target":"t:tmux_hook:scope/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":53,"end":59,"target":"t:erlang:binary/0"},{"start":63,"end":71,"target":"t:tmux_hook:commands/0"},{"start":99,"end":123,"target":"t:tmux_operation:completed/0"},{"start":153,"end":175,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_hook:scope/0"}]},{"name":"Name0","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Commands","type":"commands()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_hook:commands/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Store commands at tmux's first vacant local index for the unindexed name. A new local array starts independently of inherited entries; this does not copy the parent's array. The command result does not report the chosen index; `get/3` observes current entries separately. Performs I/O with the parsing and unknown-outcome semantics of `set/3`."},"source":{"line":116,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_hook-append-3"},{"id":"tmux_hook:clear/2","publicId":"tmux_hook:clear/2","qualifiedName":"tmux_hook:clear/2","name":"clear/2","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"clear(Scope, Name0)\n-spec clear(scope(), binary()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":32,"end":37,"target":"t:tmux_hook:scope/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":41,"end":47,"target":"t:erlang:binary/0"},{"start":74,"end":98,"target":"t:tmux_operation:completed/0"},{"start":127,"end":149,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_hook:scope/0"}]},{"name":"Name0","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Leave an empty local hook array, masking inherited entries. This differs from `unset/2`, which restores inheritance. Global clear empties that defaults table. Performs I/O; existing effects already queued by tmux are not cancelled."},"source":{"line":132,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_hook-clear-2"},{"id":"tmux_hook:get/3","publicId":"tmux_hook:get/3","qualifiedName":"tmux_hook:get/3","name":"get/3","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"get(Scope, Key, Options)\n-spec get(scope(),\n tmux_option:key(),\n tmux_option:read_options()) ->\n {ok, value()} | none | {error, map()}.","references":[{"start":35,"end":40,"target":"t:tmux_hook:scope/0"},{"start":54,"end":69,"target":"t:tmux_option:key/0"},{"start":83,"end":107,"target":"t:tmux_option:read_options/0"},{"start":132,"end":137,"target":"t:tmux_hook:value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":158,"end":161,"target":"t:erlang:map/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_hook:scope/0"}]},{"name":"Key","type":"tmux_option:key()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_option:key/0"}]},{"name":"Options","type":"tmux_option:read_options()","typeReferences":[{"start":0,"end":24,"target":"t:tmux_option:read_options/0"}]}],"returns":"{ok, value()} | none | {error, map()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_hook:value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":31,"end":34,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read a builtin hook array or indexed entry. Options follow `t:tmux_option:read_options/0`: local-only by default, inherit = true follows its parent tables. Missing local arrays or entries return none; an empty local array returns {ok, #{}} and masks inheritance.","body":"Values are tmux's command-list serialization, including its quoting and escape\nsequences. They are neither the original input text nor individual decoded\narguments. Reading does not execute them. Use `set/3` for validated command\nvalues and `unset/2` to restore inheritance. Performs I/O and preserves backend\nerrors; a vanished target is not an absent hook."},"source":{"line":65,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_hook-get-3"},{"id":"tmux_hook:run/2","publicId":"tmux_hook:run/2","qualifiedName":"tmux_hook:run/2","name":"run/2","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"run(Context, Name0)\n-spec run(context(), binary()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":30,"end":37,"target":"t:tmux_hook:context/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":41,"end":47,"target":"t:erlang:binary/0"},{"start":72,"end":96,"target":"t:tmux_operation:completed/0"},{"start":123,"end":145,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Context","type":"context()","typeReferences":[{"start":0,"end":7,"target":"t:tmux_hook:context/0"}]},{"name":"Name0","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Request native set-hook -R in the explicit `t:context/0`. tmux resolves the hook through that context's effective tables; global table flags do not select a separate execution scope. A session uses its current window and pane. A window link fixes the observed session/index and expected physical window; a pane context additionally checks that pane's observed parent.","body":"Performs I/O. The result is the native command outcome, not an acknowledgement\nof background work launched by its commands. A missing or empty effective hook\ncan succeed without effects. Wait on an application completion condition when\neffects matter. Existence and membership checks precede dispatch. If the\ntarget disappears after preflight, tmux can still fall back to another\ncontext. This is not atomic compare-and-act. Use fresh links after known\ntopology changes."},"source":{"line":173,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_hook-run-2"},{"id":"tmux_hook:set/3","publicId":"tmux_hook:set/3","qualifiedName":"tmux_hook:set/3","name":"set/3","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"set(Scope, Key, Commands)\n-spec set(scope(),\n {binary(), non_neg_integer()},\n commands()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":36,"end":41,"target":"t:tmux_hook:scope/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":56,"end":62,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":66,"end":81,"target":"t:erlang:non_neg_integer/0"},{"start":96,"end":104,"target":"t:tmux_hook:commands/0"},{"start":129,"end":153,"target":"t:tmux_operation:completed/0"},{"start":180,"end":202,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_hook:scope/0"}]},{"name":"Key","type":"{binary(), non_neg_integer()}","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":1,"end":7,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":11,"end":26,"target":"t:erlang:non_neg_integer/0"}]},{"name":"Commands","type":"commands()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_hook:commands/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Replace one {Name, Index} entry with validated command values. An explicit index is required; other entries remain. Indexes range from zero to 2147483647. The rendered command text is bounded before dispatch. Native commands still interpret their arguments and formats when the hook later runs. Use `append/3` for native vacant-index selection and `clear/2` to mask inherited hooks with an empty local array.","body":"Performs I/O. tmux parses commands before replacing an existing entry, but a\nfailed first write can already create an empty local override. Registration\nand later execution are separate; this call promises no transaction, rollback\nor completion of future effects."},"source":{"line":99,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_hook-set-3"},{"id":"tmux_hook:unset/2","publicId":"tmux_hook:unset/2","qualifiedName":"tmux_hook:unset/2","name":"unset/2","namespace":"tmux_hook","parent":"tmux_hook","kind":"function","modifiers":[],"signatures":[{"raw":"unset(Scope, Key)\n-spec unset(scope(), tmux_option:key()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":30,"end":35,"target":"t:tmux_hook:scope/0"},{"start":39,"end":54,"target":"t:tmux_option:key/0"},{"start":81,"end":105,"target":"t:tmux_operation:completed/0"},{"start":134,"end":156,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_hook:scope/0"}]},{"name":"Key","type":"tmux_option:key()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_option:key/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove one indexed entry or the whole local array. Removing an entry leaves its local array, possibly empty. Removing the whole array restores inheritance; unsetting a global builtin resets its native default. Missing local values are a successful native no-op. Performs I/O; queued hook effects are unaffected."},"source":{"line":148,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_hook-unset-2"},{"id":"t:tmux_hook:commands/0","publicId":"t:tmux_hook:commands/0","qualifiedName":"tmux_hook:commands/0","name":"commands/0","namespace":"tmux_hook","parent":"tmux_hook","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type commands() ::\n tmux_command:t() | [tmux_command:t(), ...].","params":[],"references":[{"start":30,"end":44,"target":"t:tmux_command:t/0"},{"start":50,"end":64,"target":"t:tmux_command:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"One validated command or a nonempty list; at most 256 commands and 32 KiB rendered text."},"source":{"line":45,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_hook-commands-0"},{"id":"t:tmux_hook:context/0","publicId":"t:tmux_hook:context/0","qualifiedName":"tmux_hook:context/0","name":"context/0","namespace":"tmux_hook","parent":"tmux_hook","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type context() ::\n tmux_model:session() |\n tmux_model:window_link() |\n {pane,\n tmux_model:pane(),\n tmux_model:window_link()}.","params":[],"references":[{"start":29,"end":47,"target":"t:tmux_model:session/0"},{"start":62,"end":84,"target":"t:tmux_model:window_link/0"},{"start":117,"end":132,"target":"t:tmux_model:pane/0"},{"start":147,"end":169,"target":"t:tmux_model:window_link/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A session's current context, one observed membership, or a pane in that membership."},"source":{"line":39,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_hook-context-0"},{"id":"t:tmux_hook:scope/0","publicId":"t:tmux_hook:scope/0","qualifiedName":"tmux_hook:scope/0","name":"scope/0","namespace":"tmux_hook","parent":"tmux_hook","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type scope() ::\n tmux_model:session() |\n tmux_model:window() |\n tmux_model:pane() |\n {session_defaults | window_defaults,\n tmux_server:t()}.","params":[],"references":[{"start":27,"end":45,"target":"t:tmux_model:session/0"},{"start":60,"end":77,"target":"t:tmux_model:window/0"},{"start":92,"end":107,"target":"t:tmux_model:pane/0"},{"start":170,"end":183,"target":"t:tmux_server:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A registered local table or explicit global session/window defaults; see `t:tmux_option:scope/0`."},"source":{"line":33,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_hook-scope-0"},{"id":"t:tmux_hook:value/0","publicId":"t:tmux_hook:value/0","qualifiedName":"tmux_hook:value/0","name":"value/0","namespace":"tmux_hook","parent":"tmux_hook","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type value() ::\n binary() | #{non_neg_integer() => binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":40,"end":55,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":61,"end":67,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Canonical native command-list text, or a sparse map of indexes to that text."},"source":{"line":49,"file":"apps/libtmux_erlang/src/tmux_hook.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_hook-value-0"},{"id":"tmux_identity","publicId":"tmux_identity","qualifiedName":"tmux_identity","name":"tmux_identity","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Observe a Linux process incarnation using its PID, boot ID and start ticks.","body":"A successful check is an observation. It neither reserves a PID nor pins a\ntmux connection, and it never authorizes signalling a process. Endpoint owners\nin `m:tmux_server` compare the PID returned by the current connection as well.\nA server can still change between this check and a later one-shot command.\n\nUse `fingerprint/1` to compare captured incarnations across endpoint handles\nor persist that comparison in a plan. It performs no process observation;\nthe key grants neither liveness nor permission to act.","examples":[{"lang":"erlang","code":"1> Pid = list_to_integer(os:getpid()), ok.\nok\n2> {ok, Identity} = tmux_identity:observe(Pid), ok.\nok\n3> tmux_identity:check(Identity, Pid).\nok"}]},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_identity"},{"id":"tmux_identity:check/2","publicId":"tmux_identity:check/2","qualifiedName":"tmux_identity:check/2","name":"check/2","namespace":"tmux_identity","parent":"tmux_identity","kind":"function","modifiers":[],"signatures":[{"raw":"check/2\n-spec check(t(), pos_integer()) -> ok | {error, map()}.","references":[{"start":20,"end":21,"target":"t:tmux_identity:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":25,"end":36,"target":"t:erlang:pos_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":56,"end":59,"target":"t:erlang:map/0"}],"params":[{"name":"Identity","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_identity:t/0"}]},{"name":"ObservedPid","type":"pos_integer()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":0,"end":11,"target":"t:erlang:pos_integer/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Re-observe the PID and compare its incarnation token. A successful result is a momentary observation, not ownership, permission to signal, or a same-connection guarantee."},"source":{"line":92,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_identity-check-2"},{"id":"tmux_identity:fingerprint/1","publicId":"tmux_identity:fingerprint/1","qualifiedName":"tmux_identity:fingerprint/1","name":"fingerprint/1","namespace":"tmux_identity","parent":"tmux_identity","kind":"function","modifiers":[],"signatures":[{"raw":"fingerprint/1\n-spec fingerprint(t()) ->\n {ok, fingerprint()} |\n {error, #{code := invalid_identity}}.","references":[{"start":32,"end":33,"target":"t:tmux_identity:t/0"},{"start":66,"end":77,"target":"t:tmux_identity:fingerprint/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_identity:t/0"}]}],"returns":"{ok, fingerprint()} |\n {error, #{code := invalid_identity}}","returnsReferences":[{"start":5,"end":16,"target":"t:tmux_identity:fingerprint/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Derive a portable `t:fingerprint/0` from a captured identity without I/O.","body":"The key includes PID, boot ID and process-start ticks. Reconnecting to the same\nprocess preserves it; changing any component changes it. The encoding is\nversioned for persisted plans. Use `check/2` for a fresh process observation.\nMalformed identity terms return invalid_identity before hashing.","examples":[{"lang":"erlang","code":"1> {ok, I} = tmux_identity:observe(list_to_integer(os:getpid())), ok.\nok\n2> {ok, Key} = tmux_identity:fingerprint(I), ok.\nok\n3> byte_size(Key).\n73"}]},"source":{"line":59,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_identity-fingerprint-1"},{"id":"tmux_identity:observe/1","publicId":"tmux_identity:observe/1","qualifiedName":"tmux_identity:observe/1","name":"observe/1","namespace":"tmux_identity","parent":"tmux_identity","kind":"function","modifiers":[],"signatures":[{"raw":"observe/1\n-spec observe(pos_integer()) -> {ok, t()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":24,"end":35,"target":"t:erlang:pos_integer/0"},{"start":47,"end":48,"target":"t:tmux_identity:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":62,"end":65,"target":"t:erlang:map/0"}],"params":[{"name":"Pid","type":"pos_integer()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":0,"end":11,"target":"t:erlang:pos_integer/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_identity:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Observe a Linux PID incarnation without signalling it. Returns a tagged error if the process cannot be identified; this performs local operating-system I/O."},"source":{"line":79,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_identity-observe-1"},{"id":"t:tmux_identity:fingerprint/0","publicId":"t:tmux_identity:fingerprint/0","qualifiedName":"tmux_identity:fingerprint/0","name":"fingerprint/0","namespace":"tmux_identity","parent":"tmux_identity","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type fingerprint() :: binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":23,"end":29,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Versioned SHA-256 comparison key for a captured Linux process incarnation. The linux-v1 prefix identifies the canonical encoding, independent of Erlang term serialization. Keys compare identity observations, not endpoint ownership or current liveness. They are identifiers, not authentication tokens."},"source":{"line":38,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_identity-fingerprint-0"},{"id":"t:tmux_identity:t/0","publicId":"t:tmux_identity:t/0","qualifiedName":"tmux_identity:t/0","name":"t/0","namespace":"tmux_identity","parent":"tmux_identity","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Observed Linux PID, boot identity and process-start token. It does not pin a connection."},"source":{"line":30,"file":"apps/libtmux_erlang/src/tmux_identity.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_identity-t-0"},{"id":"tmux_json","publicId":"tmux_json","qualifiedName":"tmux_json","name":"tmux_json","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Decode bounded JSON using OTP's `m:json` parser and binary object keys.","body":"Documents are limited to 256 KiB before parsing and 32 nested containers\nduring parsing. Duplicate keys are rejected before overwriting values, even\nwhen different escapes spell the same key. Trailing input is rejected. Numbers\nstay in the shared exact integer range. Integral decimal tokens are converted\nexactly; fractional tokens that round to integers are rejected. Field\nvalidation decides whether a remaining float is permitted. Syntax and resource\nerrors have a root path; duplicate-key errors retain their complete document\npath. Use `tmux_filter:from_wire/2` to validate decoded filter data."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_json.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_json"},{"id":"tmux_json:decode/1","publicId":"tmux_json:decode/1","qualifiedName":"tmux_json:decode/1","name":"decode/1","namespace":"tmux_json","parent":"tmux_json","kind":"function","modifiers":[],"signatures":[{"raw":"decode/1\n-spec decode(binary()) ->\n {ok, json:decode_value()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":22,"end":28,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/json.html#t:decode_value/0","project":"Erlang/OTP"},"start":56,"end":73,"target":"t:json:decode_value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":87,"end":90,"target":"t:erlang:map/0"}],"params":[{"name":"Binary","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, json:decode_value()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/stdlib/json.html#t:decode_value/0","project":"Erlang/OTP"},"start":5,"end":22,"target":"t:json:decode_value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":36,"end":39,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return a decoded value or a structured error without creating payload atoms.","examples":[{"lang":"erlang","code":"1> tmux_json:decode(<<\"{\\\"a\\\": [1, true, null]}\">>).\n{ok,#{<<\"a\">> => [1,true,null]}}\n2> tmux_json:decode(<<\"{\\\"a\\\": {\\\"x\\\": 1, \\\"x\\\": 2}}\">>).\n{error,#{code => duplicate_key,path => [<<\"a\">>,<<\"x\">>]}}\n3> tmux_json:decode(<<\"[] []\">>).\n{error,#{code => trailing_input,path => []}}"}]},"source":{"line":32,"file":"apps/libtmux_erlang/src/tmux_json.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_json-decode-1"},{"id":"tmux_key","publicId":"tmux_key","qualifiedName":"tmux_key","name":"tmux_key","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Register and remove bindings in explicit server key tables.","body":"`bind/3` uses the native prefix table; `bind/4` chooses a table, repeat flag\nand note. Command values use `tmux_command:to_config/1` for the stored parser\nboundary. Replacing a binding resets its commands, repeat flag and note.\nRegistration does not prove that a client later executed the binding.\n\nTables belong to the server. A session's key-table option selects its default\ntable through `m:tmux_option`; tmux's prefix and client table-switching rules\nstill apply. Registering a custom table does not select it for any client.\n`clear_table/2` requires an explicit name and can affect attached clients.\n\n`listing/2` returns native presentation bytes. Field padding, quoting, note\ncoverage and formatting vary by daemon release. It does not decode bindings\nor promise reusable configuration. Retain the original command values when\nan application needs to install the same binding again.\n\nKey names use tmux's own binary spellings, such as C-b, Enter and MouseDown1Pane.\nThe daemon validates actual names and modifiers. Library validation bounds\nbytes and rejects NUL before dispatch. Calls use registered endpoint identity,\nperform explicit I/O and never retry uncertain mutations. They do not attach\na client or refresh captured rows.\n\nThe [key-table guide](keys.md) installs and removes an application-owned table."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_key"},{"id":"tmux_key:bind/3","publicId":"tmux_key:bind/3","qualifiedName":"tmux_key:bind/3","name":"bind/3","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"bind(Server, Key, Commands)\n-spec bind(tmux_server:t(),\n key(),\n tmux_command:t() | [tmux_command:t(), ...]) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":39,"end":52,"target":"t:tmux_server:t/0"},{"start":67,"end":70,"target":"t:tmux_key:key/0"},{"start":85,"end":99,"target":"t:tmux_command:t/0"},{"start":105,"end":119,"target":"t:tmux_command:t/0"},{"start":151,"end":175,"target":"t:tmux_operation:completed/0"},{"start":203,"end":225,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_key:key/0"}]},{"name":"Commands","type":"tmux_command:t() | [tmux_command:t(), ...]","typeReferences":[{"start":0,"end":14,"target":"t:tmux_command:t/0"},{"start":20,"end":34,"target":"t:tmux_command:t/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Register commands in the native prefix table with default options. Performs I/O; see `bind/4` for replacement, command parsing and future execution."},"source":{"line":53,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_key-bind-3"},{"id":"tmux_key:bind/4","publicId":"tmux_key:bind/4","qualifiedName":"tmux_key:bind/4","name":"bind/4","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"bind(Server, Key0, Commands, Options)\n-spec bind(tmux_server:t(),\n key(),\n tmux_command:t() | [tmux_command:t(), ...],\n bind_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":49,"end":62,"target":"t:tmux_server:t/0"},{"start":77,"end":80,"target":"t:tmux_key:key/0"},{"start":95,"end":109,"target":"t:tmux_command:t/0"},{"start":115,"end":129,"target":"t:tmux_command:t/0"},{"start":150,"end":162,"target":"t:tmux_key:bind_options/0"},{"start":188,"end":212,"target":"t:tmux_operation:completed/0"},{"start":240,"end":262,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Key0","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_key:key/0"}]},{"name":"Commands","type":"tmux_command:t() | [tmux_command:t(), ...]","typeReferences":[{"start":0,"end":14,"target":"t:tmux_command:t/0"},{"start":20,"end":34,"target":"t:tmux_command:t/0"}]},{"name":"Options","type":"bind_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_key:bind_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Register or replace one binding with validated command values. Commands can be one value or a flat nonempty list; `tmux_command:to_config/1` applies the aggregate count and byte bounds. Options follow `t:bind_options/0`. Arguments, table names and notes are literal bytes at registration; stored commands still interpret their values and formats when a client executes them.","body":"Performs I/O. tmux parses the commands before replacing an existing binding.\nThe result confirms registration, while effects of future key presses need\ntheir own acknowledgement. Replacement resets the old repeat flag and note\nusing the supplied options. Errors preserve backend diagnostics and unknown\noutcomes; there is no rollback or automatic retry."},"source":{"line":70,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_key-bind-4"},{"id":"tmux_key:clear_table/2","publicId":"tmux_key:clear_table/2","qualifiedName":"tmux_key:clear_table/2","name":"clear_table/2","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"clear_table(Server, Table)\n-spec clear_table(tmux_server:t(), binary()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":45,"end":58,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":62,"end":68,"target":"t:erlang:binary/0"},{"start":101,"end":125,"target":"t:tmux_operation:completed/0"},{"start":160,"end":182,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Table","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove the entire explicitly named table through native unbind-key -a -T. Names use the bounds in `t:bind_options/0`. This can remove default bindings and affect attached clients. Missing tables remain native errors; this call does not restore factory defaults or cancel commands already queued. Performs I/O after endpoint and argument validation."},"source":{"line":114,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_key-clear_table-2"},{"id":"tmux_key:listing/1","publicId":"tmux_key:listing/1","qualifiedName":"tmux_key:listing/1","name":"listing/1","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"listing(Server)\n-spec listing(tmux_server:t()) ->\n {ok, binary()} | {error, map()}.","references":[{"start":30,"end":43,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":72,"end":78,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":92,"end":95,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read all tables as native listing bytes. Performs I/O; see `listing/2`."},"source":{"line":122,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_key-listing-1"},{"id":"tmux_key:listing/2","publicId":"tmux_key:listing/2","qualifiedName":"tmux_key:listing/2","name":"listing/2","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"listing/2\n-spec listing(tmux_server:t(), listing_options()) ->\n {ok, binary()} | {error, map()}.","references":[{"start":24,"end":37,"target":"t:tmux_server:t/0"},{"start":41,"end":56,"target":"t:tmux_key:listing_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":85,"end":91,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":105,"end":108,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Options","type":"listing_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_key:listing_options/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read native list-keys presentation output, optionally filtering by table and key through `t:listing_options/0`. Returns the command's stdout unchanged; spacing, quoting and included metadata follow that daemon. This is a text view, with no decoded-row, exact-note or configuration-round-trip guarantee.","body":"tmux 3.4 can escape dollar signs in this output. tmux 3.7c can send a single\nmatching entry to its status-message path, producing empty stdout without an\nattached target client. Empty presentation output does not prove absence.\nThe [key-table guide](keys.md) demonstrates a table with multiple bindings.\n\nThe baseline command has no custom format option on tmux 3.3. Deliberate\nnewer-server formatting is available through `tmux_command:raw/2`. Performs\nI/O; missing tables, invalid key spellings and backend errors remain errors."},"source":{"line":140,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_key-listing-2"},{"id":"tmux_key:unbind/2","publicId":"tmux_key:unbind/2","qualifiedName":"tmux_key:unbind/2","name":"unbind/2","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"unbind(Server, Key)\n-spec unbind(tmux_server:t(), key()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":33,"end":46,"target":"t:tmux_server:t/0"},{"start":50,"end":53,"target":"t:tmux_key:key/0"},{"start":81,"end":105,"target":"t:tmux_operation:completed/0"},{"start":135,"end":157,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_key:key/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove a binding from the native prefix table. Performs I/O; see `unbind/3`."},"source":{"line":83,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_key-unbind-2"},{"id":"tmux_key:unbind/3","publicId":"tmux_key:unbind/3","qualifiedName":"tmux_key:unbind/3","name":"unbind/3","namespace":"tmux_key","parent":"tmux_key","kind":"function","modifiers":[],"signatures":[{"raw":"unbind(Server, Key0, Options)\n-spec unbind(tmux_server:t(),\n key(),\n #{table => binary()}) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":43,"end":56,"target":"t:tmux_server:t/0"},{"start":73,"end":76,"target":"t:tmux_key:key/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":104,"end":110,"target":"t:erlang:binary/0"},{"start":139,"end":163,"target":"t:tmux_operation:completed/0"},{"start":193,"end":215,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Key0","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_key:key/0"}]},{"name":"Options","type":"#{table => binary()}","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":11,"end":17,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove one key from the explicit table, defaulting to prefix. Only table is accepted in the options map. A missing key in an existing table is a native no-op; a missing explicit table remains an error. Removing the final custom binding can remove its table, so a repeated call can then report that missing table. Invalid native key names are never quietly suppressed.","body":"Performs I/O. Effects already queued by a client are unaffected. Use\n`clear_table/2` to remove an entire explicitly named table."},"source":{"line":97,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_key-unbind-3"},{"id":"t:tmux_key:bind_options/0","publicId":"t:tmux_key:bind_options/0","qualifiedName":"tmux_key:bind_options/0","name":"bind_options/0","namespace":"tmux_key","parent":"tmux_key","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type bind_options() ::\n #{table => binary(),\n repeat => boolean(),\n note => binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":45,"end":51,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":77,"end":84,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":108,"end":114,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Default table is prefix and repeat is false. Tables contain 1..1024 NUL-free bytes. note is at most 32 KiB of NUL-free bytes; omitting it removes an old note when commands are replaced. Command-level aggregate bounds still apply."},"source":{"line":38,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_key-bind_options-0"},{"id":"t:tmux_key:key/0","publicId":"t:tmux_key:key/0","qualifiedName":"tmux_key:key/0","name":"key/0","namespace":"tmux_key","parent":"tmux_key","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type key() :: binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":15,"end":21,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A nonempty NUL-free native key spelling, at most 128 bytes; tmux validates its meaning."},"source":{"line":32,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_key-key-0"},{"id":"t:tmux_key:listing_options/0","publicId":"t:tmux_key:listing_options/0","qualifiedName":"tmux_key:listing_options/0","name":"listing_options/0","namespace":"tmux_key","parent":"tmux_key","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type listing_options() ::\n #{table => binary(), key => key()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":48,"end":54,"target":"t:erlang:binary/0"},{"start":65,"end":68,"target":"t:tmux_key:key/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"No table filter lists all native tables. table restricts the listing to one nonempty NUL-free name of at most 1024 bytes; key restricts it to a native key spelling. Missing tables and invalid key spellings retain native errors. Unmatched filters can return empty output or a backend error by release."},"source":{"line":45,"file":"apps/libtmux_erlang/src/tmux_key.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_key-listing_options-0"},{"id":"tmux_matcher","publicId":"tmux_matcher","qualifiedName":"tmux_matcher","name":"tmux_matcher","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Prepare a trusted local predicate once for a captured snapshot.","body":"Use `tmux_select:matching/2` with `{Module, State}`. The application chooses\nModule; external filter documents cannot select the `c:prepare/2`\ncallback. Preparation returns a unary Boolean function or a tagged error.\nCallback exceptions propagate. The adapter does not make executable predicates\nportable or push them to tmux."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_matcher.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_matcher"},{"id":"c:tmux_matcher:prepare/2","publicId":"c:tmux_matcher:prepare/2","qualifiedName":"tmux_matcher:prepare/2","name":"prepare/2","namespace":"tmux_matcher","parent":"tmux_matcher","kind":"function","modifiers":["abstract"],"signatures":[{"raw":"-callback prepare(State :: term(),\n Snapshot :: tmux_snapshot:t()) ->\n {ok,\n fun((tmux_model:row()) ->\n boolean())} |\n {error, term()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":27,"end":31,"target":"t:erlang:term/0"},{"start":65,"end":80,"target":"t:tmux_snapshot:t/0"},{"start":140,"end":154,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":191,"end":198,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":234,"end":238,"target":"t:erlang:term/0"}],"params":[{"name":"State","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]},{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"{ok, fun((tmux_model:row()) -> boolean())} |\n {error, term()}","returnsReferences":[{"start":10,"end":24,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":31,"end":38,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":63,"end":67,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Prepare a local Boolean predicate once for this captured snapshot. Return a tagged preparation error when the matcher cannot operate. Callback exceptions remain application failures; this does not make a matcher portable or suitable for untrusted module selection."},"source":{"line":17,"file":"apps/libtmux_erlang/src/tmux_matcher.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"c-tmux_matcher-prepare-2"},{"id":"tmux_model","publicId":"tmux_model","qualifiedName":"tmux_model","name":"tmux_model","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Validated native domain records. Constructors perform no tmux I/O.","body":"Missing optional observations remain not_loaded; required identity fields\nmust be supplied. Unavailable capabilities remain\nunavailable. Neither state means an empty relation or known absence.\nRows created by `new/2` and the entity constructors are detached.\nEntity constructors accept generated input-map types such as\n`t:pane_input/0`. Use `new/2` to validate dynamic maps; Dialyzer checks\nknown constructor shapes but does not replace runtime validation.\nUse `tmux_server:bind/2` to register a fresh observed row for actions;\nuse `m:tmux_snapshot` for captured graph relationships.\n\nObserved rows carry a private `t:observation/0` value. Actions compare it\nwith the row's origin, snapshot identity and target fields, rejecting\nmismatched observations before I/O. Valid-shaped binding mismatches return\nobservation_mismatch; detached and malformed rows keep their validation\nerrors. Retarget through\n`tmux_server:bind/2`; it reads current values. This protects ordinary API\nuse, not authority against trusted code in the Erlang VM.\n\nNative model version 2 adds this association. Discard version-1 rows and\nsnapshots on upgrade and freshly observe them. `to_map/1` extracts domain\nfields for explicit schema validation; maps carry no actionable origin."},"source":{"line":2,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model"},{"id":"tmux_model:entity/1","publicId":"tmux_model:entity/1","qualifiedName":"tmux_model:entity/1","name":"entity/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"entity/1\n-spec entity(row()) -> tmux_schema:entity().","references":[{"start":22,"end":25,"target":"t:tmux_model:row/0"},{"start":32,"end":50,"target":"t:tmux_schema:entity/0"}],"params":[{"name":"Argument1","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"tmux_schema:entity()","returnsReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the built-in entity kind of a native row without I/O."},"source":{"line":233,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-entity-1"},{"id":"tmux_model:get/2","publicId":"tmux_model:get/2","qualifiedName":"tmux_model:get/2","name":"get/2","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"get/2\n-spec get(atom(), row()) -> term().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":16,"end":20,"target":"t:erlang:atom/0"},{"start":24,"end":27,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":34,"end":38,"target":"t:erlang:term/0"}],"params":[{"name":"Argument1","type":"atom()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:atom/0"}]},{"name":"Argument2","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"term()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read a permitted domain field without I/O. Unknown fields raise unknown_field; unloaded and unavailable values remain distinct."},"source":{"line":268,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-get-2"},{"id":"tmux_model:model_version/1","publicId":"tmux_model:model_version/1","qualifiedName":"tmux_model:model_version/1","name":"model_version/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"model_version/1\n-spec model_version(row()) -> pos_integer().","references":[{"start":36,"end":39,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":46,"end":57,"target":"t:erlang:pos_integer/0"}],"params":[{"name":"Argument1","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"pos_integer()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":0,"end":11,"target":"t:erlang:pos_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read the native model version. Unknown versions fail validation; record internals are not a persistence format."},"source":{"line":254,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-model_version-1"},{"id":"tmux_model:new/2","publicId":"tmux_model:new/2","qualifiedName":"tmux_model:new/2","name":"new/2","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"new(Entity, Fields)\n-spec new(atom(), map()) ->\n {ok, row()} |\n {error, tmux_schema:error_detail()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":30,"end":34,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":38,"end":41,"target":"t:erlang:map/0"},{"start":66,"end":69,"target":"t:tmux_model:row/0"},{"start":96,"end":120,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Entity","type":"atom()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:atom/0"}]},{"name":"Fields","type":"map()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"}]}],"returns":"{ok, row()} | {error, tmux_schema:error_detail()}","returnsReferences":[{"start":5,"end":8,"target":"t:tmux_model:row/0"},{"start":22,"end":46,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a detached row from validated observations.","body":"Accepts dynamic maps, including malformed input that returns a tagged\n`t:tmux_schema:error_detail/0`. For trusted typed code, prefer the entity\nconstructors such as `pane/1` and `t:pane_input/0`.","examples":[{"lang":"erlang","code":"1> {ok, Pane} = tmux_model:new(pane, #{id => <<\"%1\">>, width => 120}), ok.\nok\n2> tmux_model:get(width, Pane).\n120"}]},"source":{"line":192,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-new-2"},{"id":"tmux_model:origin/1","publicId":"tmux_model:origin/1","qualifiedName":"tmux_model:origin/1","name":"origin/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"origin/1\n-spec origin(row()) -> none | reference().","references":[{"start":22,"end":25,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":39,"end":48,"target":"t:erlang:reference/0"}],"params":[{"name":"Argument1","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"none | reference()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":7,"end":16,"target":"t:erlang:reference/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read the opaque origin token, or none for a detached row. This does not revalidate endpoint lifetime."},"source":{"line":240,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-origin-1"},{"id":"tmux_model:pane/1","publicId":"tmux_model:pane/1","qualifiedName":"tmux_model:pane/1","name":"pane/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"pane(Fields)\n-spec pane(pane_input()) ->\n {ok, pane()} |\n {error, tmux_schema:error_detail()}.","references":[{"start":24,"end":34,"target":"t:tmux_model:pane_input/0"},{"start":60,"end":64,"target":"t:tmux_model:pane/0"},{"start":92,"end":116,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Fields","type":"pane_input()","typeReferences":[{"start":0,"end":10,"target":"t:tmux_model:pane_input/0"}]}],"returns":"{ok, pane()} |\n {error, tmux_schema:error_detail()}","returnsReferences":[{"start":5,"end":9,"target":"t:tmux_model:pane/0"},{"start":33,"end":57,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a detached pane row, validating required fields and scalar bounds without tmux I/O."},"source":{"line":212,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-pane-1"},{"id":"tmux_model:session/1","publicId":"tmux_model:session/1","qualifiedName":"tmux_model:session/1","name":"session/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"session(Fields)\n-spec session(session_input()) ->\n {ok, session()} |\n {error, tmux_schema:error_detail()}.","references":[{"start":30,"end":43,"target":"t:tmux_model:session_input/0"},{"start":72,"end":79,"target":"t:tmux_model:session/0"},{"start":110,"end":134,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Fields","type":"session_input()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_model:session_input/0"}]}],"returns":"{ok, session()} |\n {error, tmux_schema:error_detail()}","returnsReferences":[{"start":5,"end":12,"target":"t:tmux_model:session/0"},{"start":36,"end":60,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a detached session row, validating required fields and scalar bounds without tmux I/O."},"source":{"line":200,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-session-1"},{"id":"tmux_model:snapshot_id/1","publicId":"tmux_model:snapshot_id/1","qualifiedName":"tmux_model:snapshot_id/1","name":"snapshot_id/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"snapshot_id/1\n-spec snapshot_id(row()) -> none | reference().","references":[{"start":32,"end":35,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":49,"end":58,"target":"t:erlang:reference/0"}],"params":[{"name":"Argument1","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"none | reference()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":7,"end":16,"target":"t:erlang:reference/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read the capture identity, or none when not associated with a snapshot. Performs no I/O."},"source":{"line":247,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-snapshot_id-1"},{"id":"tmux_model:to_map/1","publicId":"tmux_model:to_map/1","qualifiedName":"tmux_model:to_map/1","name":"to_map/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"to_map/1\n-spec to_map(row()) -> map().","references":[{"start":22,"end":25,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":32,"end":35,"target":"t:erlang:map/0"}],"params":[{"name":"Row","type":"row()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_model:row/0"}]}],"returns":"map()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return domain field values without origin or capture metadata. This is not the portable filter wire representation. Performs no I/O."},"source":{"line":261,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-to_map-1"},{"id":"tmux_model:validate/1","publicId":"tmux_model:validate/1","qualifiedName":"tmux_model:validate/1","name":"validate/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"validate(Row)\n-spec validate(term()) -> {ok, row()} | {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":29,"end":33,"target":"t:erlang:term/0"},{"start":45,"end":48,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":62,"end":65,"target":"t:erlang:map/0"}],"params":[{"name":"Row","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]}],"returns":"{ok, row()} | {error, map()}","returnsReferences":[{"start":5,"end":8,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate native row shape, model version and normalized observations. Exported records do not enforce these invariants at construction. Performs no I/O."},"source":{"line":216,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-validate-1"},{"id":"tmux_model:window/1","publicId":"tmux_model:window/1","qualifiedName":"tmux_model:window/1","name":"window/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"window(Fields)\n-spec window(window_input()) ->\n {ok, window()} |\n {error, tmux_schema:error_detail()}.","references":[{"start":28,"end":40,"target":"t:tmux_model:window_input/0"},{"start":68,"end":74,"target":"t:tmux_model:window/0"},{"start":104,"end":128,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Fields","type":"window_input()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_model:window_input/0"}]}],"returns":"{ok, window()} |\n {error, tmux_schema:error_detail()}","returnsReferences":[{"start":5,"end":11,"target":"t:tmux_model:window/0"},{"start":35,"end":59,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a detached window row, validating required fields and scalar bounds without tmux I/O."},"source":{"line":204,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-window-1"},{"id":"tmux_model:window_link/1","publicId":"tmux_model:window_link/1","qualifiedName":"tmux_model:window_link/1","name":"window_link/1","namespace":"tmux_model","parent":"tmux_model","kind":"function","modifiers":[],"signatures":[{"raw":"window_link(Fields)\n-spec window_link(window_link_input()) ->\n {ok, window_link()} |\n {error, tmux_schema:error_detail()}.","references":[{"start":38,"end":55,"target":"t:tmux_model:window_link_input/0"},{"start":88,"end":99,"target":"t:tmux_model:window_link/0"},{"start":134,"end":158,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Fields","type":"window_link_input()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_model:window_link_input/0"}]}],"returns":"{ok, window_link()} |\n {error, tmux_schema:error_detail()}","returnsReferences":[{"start":5,"end":16,"target":"t:tmux_model:window_link/0"},{"start":40,"end":64,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Construct a detached window_link row, validating required fields and scalar bounds without tmux I/O."},"source":{"line":208,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-window_link-1"},{"id":"t:tmux_model:observation/0","publicId":"t:tmux_model:observation/0","qualifiedName":"tmux_model:observation/0","name":"observation/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque observation().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Private captured target association, created by observation. Retain with its row; construction and field access are internal. It is not an authorization or serialization format."},"source":{"line":46,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-observation-0"},{"id":"t:tmux_model:pane/0","publicId":"t:tmux_model:pane/0","qualifiedName":"tmux_model:pane/0","name":"pane/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type pane() :: #pane{}.","params":[],"references":[{"start":16,"end":21,"target":"#tmux_model:pane{}"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated pane observation. Native records are experimental in OTP 29."},"source":{"line":112,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-pane-0"},{"id":"t:tmux_model:pane_id/0","publicId":"t:tmux_model:pane_id/0","qualifiedName":"tmux_model:pane_id/0","name":"pane_id/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-nominal pane_id() :: binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":22,"end":28,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A canonical pane ID binary in the percent namespace; nominal checking is by Dialyzer."},"source":{"line":37,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-pane_id-0"},{"id":"t:tmux_model:pane_input/0","publicId":"t:tmux_model:pane_input/0","qualifiedName":"tmux_model:pane_input/0","name":"pane_input/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type pane_input() ::\n #{id := pane_id(),\n window_id =>\n window_id() | not_loaded | unavailable,\n index =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n active => boolean() | not_loaded | unavailable,\n current_command =>\n binary() | not_loaded | unavailable,\n current_path =>\n binary() | not_loaded | unavailable,\n width =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n height =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n pid =>\n pos_integer() |\n float() |\n none | not_loaded | unavailable,\n title => binary() | not_loaded | unavailable,\n dead => boolean() | not_loaded | unavailable,\n exit_status =>\n integer() |\n float() |\n none | not_loaded | unavailable}.","params":[],"references":[{"start":40,"end":47,"target":"t:tmux_model:pane_id/0"},{"start":92,"end":101,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":169,"end":184,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":205,"end":210,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":279,"end":286,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":364,"end":370,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":445,"end":451,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":519,"end":534,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":555,"end":560,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":645,"end":660,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":681,"end":686,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":768,"end":779,"target":"t:erlang:pos_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":800,"end":805,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":880,"end":886,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":937,"end":944,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":1018,"end":1025,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":1046,"end":1051,"target":"t:erlang:float/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Trusted constructor fields for `pane/1`. Required keys use :=; optional observations may be not_loaded or unavailable. Integral floats are normalized to integers. Runtime validation still checks ranges, IDs, UTF-8 and derived values. Use `new/2` for dynamically validated maps."},"source":{"line":162,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-pane_input-0"},{"id":"t:tmux_model:row/0","publicId":"t:tmux_model:row/0","qualifiedName":"tmux_model:row/0","name":"row/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type row() ::\n #session{} | #window{} | #window_link{} | #pane{}.","params":[],"references":[{"start":25,"end":33,"target":"#tmux_model:session{}"},{"start":38,"end":45,"target":"#tmux_model:window{}"},{"start":50,"end":62,"target":"#tmux_model:window_link{}"},{"start":67,"end":72,"target":"#tmux_model:pane{}"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"One schema-defined native domain record, with separate origin and capture metadata."},"source":{"line":104,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-row-0"},{"id":"t:tmux_model:session/0","publicId":"t:tmux_model:session/0","qualifiedName":"tmux_model:session/0","name":"session/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type session() :: #session{}.","params":[],"references":[{"start":19,"end":27,"target":"#tmux_model:session{}"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated session observation. Native records are experimental in OTP 29."},"source":{"line":106,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-session-0"},{"id":"t:tmux_model:session_id/0","publicId":"t:tmux_model:session_id/0","qualifiedName":"tmux_model:session_id/0","name":"session_id/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-nominal session_id() :: binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":25,"end":31,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A canonical session ID binary in the dollar namespace."},"source":{"line":41,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-session_id-0"},{"id":"t:tmux_model:session_input/0","publicId":"t:tmux_model:session_input/0","qualifiedName":"tmux_model:session_input/0","name":"session_input/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type session_input() ::\n #{id := session_id(),\n name => binary() | not_loaded | unavailable,\n attached_count =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n attached =>\n boolean() | not_loaded | unavailable,\n created =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable}.","params":[],"references":[{"start":43,"end":53,"target":"t:tmux_model:session_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":77,"end":83,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":160,"end":175,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":196,"end":201,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":288,"end":295,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":365,"end":380,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":401,"end":406,"target":"t:erlang:float/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Trusted constructor fields for `session/1`. Required keys use :=; optional observations may be not_loaded or unavailable. Integral floats are normalized to integers. Runtime validation still checks ranges, IDs, UTF-8 and derived values. Use `new/2` for dynamically validated maps."},"source":{"line":120,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-session_input-0"},{"id":"t:tmux_model:window/0","publicId":"t:tmux_model:window/0","qualifiedName":"tmux_model:window/0","name":"window/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type window() :: #window{}.","params":[],"references":[{"start":18,"end":25,"target":"#tmux_model:window{}"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated window observation. Native records are experimental in OTP 29."},"source":{"line":108,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-window-0"},{"id":"t:tmux_model:window_id/0","publicId":"t:tmux_model:window_id/0","qualifiedName":"tmux_model:window_id/0","name":"window_id/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-nominal window_id() :: binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":24,"end":30,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A canonical physical-window ID binary in the at-sign namespace."},"source":{"line":39,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-window_id-0"},{"id":"t:tmux_model:window_input/0","publicId":"t:tmux_model:window_input/0","qualifiedName":"tmux_model:window_input/0","name":"window_input/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type window_input() ::\n #{id := window_id(),\n name => binary() | not_loaded | unavailable,\n width =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n height =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n pane_count =>\n non_neg_integer() |\n float() |\n not_loaded | unavailable,\n layout => binary() | not_loaded | unavailable}.","params":[],"references":[{"start":42,"end":51,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":75,"end":81,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":149,"end":164,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":185,"end":190,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":275,"end":290,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":311,"end":316,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":405,"end":420,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":441,"end":446,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":515,"end":521,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Trusted constructor fields for `window/1`. Required keys use :=; optional observations may be not_loaded or unavailable. Integral floats are normalized to integers. Runtime validation still checks ranges, IDs, UTF-8 and derived values. Use `new/2` for dynamically validated maps."},"source":{"line":134,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-window_input-0"},{"id":"t:tmux_model:window_link/0","publicId":"t:tmux_model:window_link/0","qualifiedName":"tmux_model:window_link/0","name":"window_link/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type window_link() :: #window_link{}.","params":[],"references":[{"start":23,"end":35,"target":"#tmux_model:window_link{}"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated window_link observation. Native records are experimental in OTP 29."},"source":{"line":110,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-window_link-0"},{"id":"t:tmux_model:window_link_input/0","publicId":"t:tmux_model:window_link_input/0","qualifiedName":"tmux_model:window_link_input/0","name":"window_link_input/0","namespace":"tmux_model","parent":"tmux_model","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type window_link_input() ::\n #{session_id := session_id(),\n window_id := window_id(),\n index := non_neg_integer() | float(),\n active => boolean() | not_loaded | unavailable}.","params":[],"references":[{"start":55,"end":65,"target":"t:tmux_model:session_id/0"},{"start":94,"end":103,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":128,"end":143,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:float/0","project":"Erlang/OTP"},"start":148,"end":153,"target":"t:erlang:float/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":179,"end":186,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Trusted constructor fields for `window_link/1`. Required keys use :=; optional observations may be not_loaded or unavailable. Integral floats are normalized to integers. Runtime validation still checks ranges, IDs, UTF-8 and derived values. Use `new/2` for dynamically validated maps."},"source":{"line":149,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_model-window_link_input-0"},{"id":"#tmux_model:session{}","publicId":"#tmux_model:session{}","qualifiedName":"#tmux_model:session{}","name":"#session{}","namespace":"tmux_model","parent":"tmux_model","kind":"struct","modifiers":[],"signatures":[{"raw":"-record #session{id :: session_id(),\n name =\n not_loaded ::\n binary() |\n not_loaded | unavailable,\n attached_count =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n attached =\n not_loaded ::\n boolean() |\n not_loaded | unavailable,\n created =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n origin = none :: none | reference(),\n snapshot_id = none :: none | reference(),\n model_version = 2 :: pos_integer(),\n observation =\n none :: none | observation()}.","params":[],"references":[{"start":23,"end":33,"target":"t:tmux_model:session_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":121,"end":127,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":277,"end":292,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":436,"end":443,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":586,"end":601,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":698,"end":707,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":757,"end":766,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":808,"end":819,"target":"t:erlang:pos_integer/0"},{"start":890,"end":901,"target":"t:tmux_model:observation/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","source":{"line":48,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-session"},{"id":"#tmux_model:window{}","publicId":"#tmux_model:window{}","qualifiedName":"#tmux_model:window{}","name":"#window{}","namespace":"tmux_model","parent":"tmux_model","kind":"struct","modifiers":[],"signatures":[{"raw":"-record #window{id :: window_id(),\n name =\n not_loaded ::\n binary() | not_loaded | unavailable,\n width =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n height =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n pane_count =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n layout =\n not_loaded ::\n binary() | not_loaded | unavailable,\n origin = none :: none | reference(),\n snapshot_id = none :: none | reference(),\n model_version = 2 :: pos_integer(),\n observation = none :: none | observation()}.","params":[],"references":[{"start":22,"end":31,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":116,"end":122,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":235,"end":250,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":388,"end":403,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":545,"end":560,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":698,"end":704,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":775,"end":784,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":833,"end":842,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":883,"end":894,"target":"t:erlang:pos_integer/0"},{"start":943,"end":954,"target":"t:tmux_model:observation/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","source":{"line":60,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-window"},{"id":"#tmux_model:window_link{}","publicId":"#tmux_model:window_link{}","qualifiedName":"#tmux_model:window_link{}","name":"#window_link{}","namespace":"tmux_model","parent":"tmux_model","kind":"struct","modifiers":[],"signatures":[{"raw":"-record #window_link{session_id :: session_id(),\n window_id :: window_id(),\n index :: non_neg_integer(),\n active =\n not_loaded ::\n boolean() |\n not_loaded | unavailable,\n origin = none :: none | reference(),\n snapshot_id =\n none :: none | reference(),\n model_version = 2 :: pos_integer(),\n observation =\n none :: none | observation()}.","params":[],"references":[{"start":35,"end":45,"target":"t:tmux_model:session_id/0"},{"start":83,"end":92,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":126,"end":141,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":243,"end":250,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":355,"end":364,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":443,"end":452,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":498,"end":509,"target":"t:erlang:pos_integer/0"},{"start":588,"end":599,"target":"t:tmux_model:observation/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","source":{"line":73,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-window_link"},{"id":"#tmux_model:pane{}","publicId":"#tmux_model:pane{}","qualifiedName":"#tmux_model:pane{}","name":"#pane{}","namespace":"tmux_model","parent":"tmux_model","kind":"struct","modifiers":[],"signatures":[{"raw":"-record #pane{id :: pane_id(),\n window_id =\n not_loaded ::\n window_id() |\n not_loaded | unavailable,\n index =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n active =\n not_loaded ::\n boolean() | not_loaded | unavailable,\n current_command =\n not_loaded ::\n binary() | not_loaded | unavailable,\n current_path =\n not_loaded ::\n binary() | not_loaded | unavailable,\n width =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n height =\n not_loaded ::\n non_neg_integer() |\n not_loaded | unavailable,\n pid =\n not_loaded ::\n pos_integer() |\n none | not_loaded | unavailable,\n title =\n not_loaded ::\n binary() | not_loaded | unavailable,\n dead =\n not_loaded ::\n boolean() | not_loaded | unavailable,\n exit_status =\n not_loaded ::\n integer() |\n none | not_loaded | unavailable,\n origin = none :: none | reference(),\n snapshot_id = none :: none | reference(),\n model_version = 2 :: pos_integer(),\n observation = none :: none | observation()}.","params":[],"references":[{"start":20,"end":27,"target":"t:tmux_model:pane_id/0"},{"start":111,"end":120,"target":"t:tmux_model:window_id/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":249,"end":264,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":394,"end":401,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":518,"end":524,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":638,"end":644,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":751,"end":766,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":896,"end":911,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":1038,"end":1049,"target":"t:erlang:pos_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":1185,"end":1191,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":1297,"end":1304,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":1417,"end":1424,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":1522,"end":1531,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":1578,"end":1587,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pos_integer/0","project":"Erlang/OTP"},"start":1626,"end":1637,"target":"t:erlang:pos_integer/0"},{"start":1684,"end":1695,"target":"t:tmux_model:observation/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","source":{"line":84,"file":"apps/libtmux_erlang/src/tmux_model.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_model-pane"},{"id":"tmux_operation","publicId":"tmux_operation","qualifiedName":"tmux_operation","name":"tmux_operation","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Own a command independently of an individual wait.","body":"`start/3` submits a validated command through the endpoint's\nbounded admission. The initiating process owns it. `await/2`\ntiming out abandons only that wait; `cancel/1` or owner death\nretires the client and may leave an unknown tmux outcome. The endpoint\nacknowledges `transfer/2` after monitoring the new owner and\nbefore replying to the old owner. The new process does not perform a\nhandshake. Retired results expire after 60 seconds or earlier when the\nendpoint exceeds 64 retained results or 4 MiB of retained stdout/stderr\n(oldest evicted first). Closing the endpoint clears its operation results\nimmediately. Each operation accepts at most 16 concurrent waiters; excess\nwaits return too_many_waiters. `await_started/2` returns\nlifecycle status once the operation leaves queued; dispatch authorization does\nnot establish a tmux aftereffect.\n\nSee `t:completed/0` and `t:failure/0` for\ncommand outcomes and `t:state/0` for lifecycle status. The [job\nguide](jobs.md) shows the complete workflow. Bounded OTP Logger reports\ncorrelate outcomes by operation and endpoint generation; see\n[runtime diagnostics](diagnostics.md) for levels, fields and data boundaries."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_operation"},{"id":"tmux_operation:await/2","publicId":"tmux_operation:await/2","qualifiedName":"tmux_operation:await/2","name":"await/2","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"await(Operation, Timeout)\n-spec await(t(), timeout()) ->\n {ok, completed()} | {error, failure()}.","references":[{"start":38,"end":39,"target":"t:tmux_operation:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:timeout/0","project":"Erlang/OTP"},"start":43,"end":50,"target":"t:erlang:timeout/0"},{"start":77,"end":86,"target":"t:tmux_operation:completed/0"},{"start":100,"end":107,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Operation","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_operation:t/0"}]},{"name":"Timeout","type":"timeout()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:timeout/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:timeout/0"}]}],"returns":"{ok, completed()} | {error, failure()}","returnsReferences":[{"start":5,"end":14,"target":"t:tmux_operation:completed/0"},{"start":28,"end":35,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Wait for a retained result for at most Timeout. An await_timeout removes only this waiter; the operation continues and its handle remains usable. Additional waiters do not become owners. Results preserve outcome and cleanup certainty."},"source":{"line":89,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_operation-await-2"},{"id":"tmux_operation:await_started/2","publicId":"tmux_operation:await_started/2","qualifiedName":"tmux_operation:await_started/2","name":"await_started/2","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"await_started(Operation, Timeout)\n-spec await_started(t(), timeout()) ->\n {ok, state()} | {error, failure()}.","references":[{"start":54,"end":55,"target":"t:tmux_operation:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:timeout/0","project":"Erlang/OTP"},"start":59,"end":66,"target":"t:erlang:timeout/0"},{"start":101,"end":106,"target":"t:tmux_operation:state/0"},{"start":120,"end":127,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Operation","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_operation:t/0"}]},{"name":"Timeout","type":"timeout()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:timeout/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:timeout/0"}]}],"returns":"{ok, state()} | {error, failure()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_operation:state/0"},{"start":24,"end":31,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Wait until the operation leaves queued, returning its lifecycle state even if it has already failed or retired. Inspect outcome and cleanup; call `await/2` for final command data. Authorization is not proof of a tmux aftereffect. A timeout abandons this wait without cancelling the operation."},"source":{"line":98,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_operation-await_started-2"},{"id":"tmux_operation:cancel/1","publicId":"tmux_operation:cancel/1","qualifiedName":"tmux_operation:cancel/1","name":"cancel/1","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"cancel(Operation)\n-spec cancel(t()) ->\n {ok,\n cancelled_before_send | cancel_requested |\n already_completed} |\n {error, map()}.","references":[{"start":31,"end":32,"target":"t:tmux_operation:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":182,"end":185,"target":"t:erlang:map/0"}],"params":[{"name":"Operation","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_operation:t/0"}]}],"returns":"{ok,\n cancelled_before_send | cancel_requested |\n already_completed} |\n {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":109,"end":112,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Request cancellation using this handle. Any holder can cancel; only the owner can transfer ownership. Queued work can be cancelled before submission; possibly sent work retires its client and can retain an unknown tmux outcome. Use `await/2` for the result and cleanup proof. Never infer rollback or automatically retry a mutation from cancellation alone. already_completed means a response exists; it does not establish complete cleanup."},"source":{"line":117,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_operation-cancel-1"},{"id":"tmux_operation:start/3","publicId":"tmux_operation:start/3","qualifiedName":"tmux_operation:start/3","name":"start/3","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"start(Server, Command, Options)\n-spec start(tmux_server:t(),\n tmux_command:t(),\n tmux_server:command_options()) ->\n {ok, t()} | {error, failure()}.","references":[{"start":44,"end":57,"target":"t:tmux_server:t/0"},{"start":73,"end":87,"target":"t:tmux_command:t/0"},{"start":103,"end":130,"target":"t:tmux_server:command_options/0"},{"start":157,"end":158,"target":"t:tmux_operation:t/0"},{"start":172,"end":179,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Command","type":"tmux_command:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_command:t/0"}]},{"name":"Options","type":"tmux_server:command_options()","typeReferences":[{"start":0,"end":27,"target":"t:tmux_server:command_options/0"}]}],"returns":"{ok, t()} | {error, failure()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_operation:t/0"},{"start":20,"end":27,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Submit a validated command under the endpoint's admission limits and return an operation handle. The initiating process owns it. Submission is non-blocking with respect to command completion; the handle does not prove that tmux has executed the command."},"source":{"line":77,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_operation-start-3"},{"id":"tmux_operation:status/1","publicId":"tmux_operation:status/1","qualifiedName":"tmux_operation:status/1","name":"status/1","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"status(Operation)\n-spec status(t()) -> {ok, state()} | {error, failure()}.","references":[{"start":31,"end":32,"target":"t:tmux_operation:t/0"},{"start":44,"end":49,"target":"t:tmux_operation:state/0"},{"start":63,"end":70,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Operation","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_operation:t/0"}]}],"returns":"{ok, state()} | {error, failure()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_operation:state/0"},{"start":24,"end":31,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read the retained lifecycle state without starting a tmux command. Expired handles return operation_expired. Status is observation of the operation, not evidence that a possibly sent mutation was cancelled."},"source":{"line":106,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_operation-status-1"},{"id":"tmux_operation:transfer/2","publicId":"tmux_operation:transfer/2","qualifiedName":"tmux_operation:transfer/2","name":"transfer/2","namespace":"tmux_operation","parent":"tmux_operation","kind":"function","modifiers":[],"signatures":[{"raw":"transfer/2\n-spec transfer(t(), pid()) -> ok | {error, map()}.","references":[{"start":26,"end":27,"target":"t:tmux_operation:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pid/0","project":"Erlang/OTP"},"start":31,"end":34,"target":"t:erlang:pid/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":54,"end":57,"target":"t:erlang:map/0"}],"params":[{"name":"Operation","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_operation:t/0"}]},{"name":"Owner","type":"pid()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pid/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:pid/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Transfer ownership to a live process on this Erlang node. The endpoint installs its new owner monitor before releasing the previous monitor and returns after the swap. The new process performs no handshake. Waiters and ownership remain separate; endpoint ownership does not change.","body":"An `await_timeout` abandons the reply, not the queued ownership change. The\ntransfer may complete later. Use `status/1` to read the current owner before\nrelying on ownership; a timeout does not prove that the old owner remains."},"source":{"line":130,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_operation-transfer-2"},{"id":"t:tmux_operation:cleanup/0","publicId":"t:tmux_operation:cleanup/0","qualifiedName":"tmux_operation:cleanup/0","name":"cleanup/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type cleanup() :: complete | incomplete | unverified.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"complete proves owned client retirement; incomplete or unverified does not."},"source":{"line":36,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_operation-cleanup-0"},{"id":"t:tmux_operation:completed/0","publicId":"t:tmux_operation:completed/0","qualifiedName":"tmux_operation:completed/0","name":"completed/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type completed() ::\n #{stdout := binary(),\n stderr := binary(),\n exit_status := 0,\n stdin_delivered := non_neg_integer(),\n outcome := success,\n cleanup := complete}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":43,"end":49,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":75,"end":81,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":146,"end":161,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A successful command result. stdout and stderr are separate byte strings; exit_status is zero. stdin_delivered counts bytes accepted by the client pipe, not bytes consumed by tmux. success does not prove a background aftereffect."},"source":{"line":42,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_operation-completed-0"},{"id":"t:tmux_operation:failure/0","publicId":"t:tmux_operation:failure/0","qualifiedName":"tmux_operation:failure/0","name":"failure/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type failure() ::\n #{code := atom(),\n outcome => outcome(),\n cleanup => cleanup(),\n stdout => binary(),\n stderr => binary(),\n stdin_delivered => non_neg_integer(),\n exit_status => integer(),\n submitted => boolean(),\n atom() => term()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":39,"end":43,"target":"t:erlang:atom/0"},{"start":70,"end":77,"target":"t:tmux_operation:outcome/0"},{"start":104,"end":111,"target":"t:tmux_operation:cleanup/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":137,"end":143,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":169,"end":175,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":210,"end":225,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":256,"end":263,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":292,"end":299,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":315,"end":319,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":325,"end":329,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A tagged error detail with a stable code and optional certainty/output data. Validation, admission and wait errors may contain only code. Command failures retain available stdout/stderr, stdin_delivered and exit_status. Other keys provide code-specific context. Never infer missing certainty fields.","body":"Common codes are busy, invalid_operation_options, command_error, deadline,\ncancelled, stale_server, cleanup_incomplete, await_timeout and\noperation_expired. command_error means a nonzero client exit; it does not roll\nback a mutation. await_timeout abandons only this wait. operation_expired\ncannot reconstruct a previous result or establish its remote outcome."},"source":{"line":56,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_operation-failure-0"},{"id":"t:tmux_operation:outcome/0","publicId":"t:tmux_operation:outcome/0","qualifiedName":"tmux_operation:outcome/0","name":"outcome/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type outcome() ::\n success | error | not_started |\n cancelled_before_send | unknown.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Command certainty, separate from resource cleanup. unknown must not trigger an automatic mutation retry."},"source":{"line":34,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_operation-outcome-0"},{"id":"t:tmux_operation:state/0","publicId":"t:tmux_operation:state/0","qualifiedName":"tmux_operation:state/0","name":"state/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type state() ::\n #{phase := queued | sent | responded | retired,\n stage :=\n pending | waiting | preflight | command,\n owner := pid(),\n outcome := pending | outcome(),\n cleanup := pending | cleanup()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pid/0","project":"Erlang/OTP"},"start":174,"end":177,"target":"t:erlang:pid/0"},{"start":214,"end":221,"target":"t:tmux_operation:outcome/0"},{"start":258,"end":265,"target":"t:tmux_operation:cleanup/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Observed lifecycle state, without command output. queued includes admission and identity preflight; sent means dispatch authorization, not a proven aftereffect. responded can retain incomplete cleanup; retired releases operation resources. pending certainty means no result yet. The owner is the initiating or transferred process; holding a waiter handle does not change it."},"source":{"line":66,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_operation-state-0"},{"id":"t:tmux_operation:t/0","publicId":"t:tmux_operation:t/0","qualifiedName":"tmux_operation:t/0","name":"t/0","namespace":"tmux_operation","parent":"tmux_operation","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A generation-bound operation handle. Possessing a waiter handle does not transfer ownership."},"source":{"line":31,"file":"apps/libtmux_erlang/src/tmux_operation.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_operation-t-0"},{"id":"tmux_option","publicId":"tmux_option","qualifiedName":"tmux_option","name":"tmux_option","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Read and change explicit tmux option tables through registered references.","body":"Session, physical window and pane records from `m:tmux_model` select their\nlocal tables. Global tables use {server, Server}, {session_defaults, Server}\nor {window_defaults, Server}. Built-in canonical names and scopes are checked\nagainst pinned source metadata; tmux otherwise lets a name override the\nsupplied scope flags. `m:tmux_hook` owns hook registration and execution;\nhooks are rejected here. Prefixes and aliases are rejected.\n\n`get/3` requires an explicit options map. Local-only reads are the\ndefault; inherit = true follows tmux's table parents (pane -> window -> window\ndefaults, or session -> session defaults). Server options have no parent. A\nmissing local value or array entry returns none; an empty binary or empty\narray is a value. Arrays return maps of indexes to binary values, preserving\nsparse indexes. There is no hidden capture refresh or cache of option values.\n`get_many/3` reads the same scalar key from up to seven local rows through one\nbounded native sequence, retaining local-only semantics by default.\n\nValues are NUL-free binary tmux text bytes, including non-UTF-8 bytes. No\nshell or format expansion is applied by this API. tmux still interprets a\nbuilt-in option according to its type: formats, shell commands and command\noptions may execute later when tmux uses them. This API is for trusted\napplication code. Numeric and flag values are canonical binary text on reads,\nnot Erlang numbers.\n\nBuilt-in metadata covers every released version in the supported tmux\n3.3a–3.8 range, including exact patch letters. Tracking and unknown versions\nfail closed. User options beginning @ do not need a built-in\ncatalogue. The raw `tmux_command:raw/2` remains available for deliberate\nnewer-server integration. All mutations are one-shot I/O with observed\nidentity checks, not transactions. Timeouts can leave an unknown remote\noutcome; mutations are never retried here. See the [scoped options\nguide](options.md) for ownership and inheritance."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_option"},{"id":"tmux_option:catalogue/1","publicId":"tmux_option:catalogue/1","qualifiedName":"tmux_option:catalogue/1","name":"catalogue/1","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"catalogue(Version)\n-spec catalogue(tmux_version:t()) ->\n {ok, #{binary() => metadata()}} |\n {error, map()}.","references":[{"start":35,"end":49,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":82,"end":88,"target":"t:erlang:binary/0"},{"start":94,"end":102,"target":"t:tmux_option:metadata/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":136,"end":139,"target":"t:erlang:map/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]}],"returns":"{ok, #{binary() => metadata()}} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":7,"end":13,"target":"t:erlang:binary/0"},{"start":19,"end":27,"target":"t:tmux_option:metadata/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":42,"end":45,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return all canonical built-in option and hook metadata for one exact parsed version, without I/O. Catalogues cover every release from 3.3a through 3.8; historical 3.3 metadata remains available for source discovery. The generated reference records each release's source commit and file digests."},"source":{"line":89,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_option-catalogue-1"},{"id":"tmux_option:describe/2","publicId":"tmux_option:describe/2","qualifiedName":"tmux_option:describe/2","name":"describe/2","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"describe(Version, Name)\n-spec describe(tmux_version:t(), binary()) ->\n {ok, metadata()} | {error, map()}.","references":[{"start":39,"end":53,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":57,"end":63,"target":"t:erlang:binary/0"},{"start":93,"end":101,"target":"t:tmux_option:metadata/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":115,"end":118,"target":"t:erlang:map/0"}],"params":[{"name":"Version","type":"tmux_version:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_version:t/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, metadata()} | {error, map()}","returnsReferences":[{"start":5,"end":13,"target":"t:tmux_option:metadata/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":27,"end":30,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return source metadata for a canonical built-in name and a parsed daemon version, without I/O. Unknown names, unavailable names, tracking builds and uncatalogued versions have distinct errors. The catalogue describes scopes and parser types; it does not qualify runtime behavior or authorize hook execution.","examples":[{"lang":"erlang","code":"1> {ok, V} = tmux_version:parse(<<\"tmux 3.3a\">>), ok.\nok\n2> {ok, M} = tmux_option:describe(V, <<\"exit-empty\">>), ok.\nok\n3> maps:get(scopes, M).\n[server]"}]},"source":{"line":73,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_option-describe-2"},{"id":"tmux_option:get/3","publicId":"tmux_option:get/3","qualifiedName":"tmux_option:get/3","name":"get/3","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"get(Scope, Key, Options)\n-spec get(scope(), key(), read_options()) ->\n {ok, value()} | none | {error, map()}.","references":[{"start":35,"end":40,"target":"t:tmux_option:scope/0"},{"start":44,"end":47,"target":"t:tmux_option:key/0"},{"start":51,"end":63,"target":"t:tmux_option:read_options/0"},{"start":88,"end":93,"target":"t:tmux_option:value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":114,"end":117,"target":"t:erlang:map/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_option:scope/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_option:key/0"}]},{"name":"Options","type":"read_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_option:read_options/0"}]}],"returns":"{ok, value()} | none | {error, map()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_option:value/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":31,"end":34,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read one option or array, performing I/O after validation. Missing local values and array entries return none; known empty strings and arrays return {ok, Value}. inherit = true reads through tmux's parent tables. Unknown fields are rejected. Errors retain backend diagnostics; a missing target never becomes absence. Use `set/4` to write a value and `unset/2` to restore inheritance."},"source":{"line":105,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_option-get-3"},{"id":"tmux_option:get_many/3","publicId":"tmux_option:get_many/3","qualifiedName":"tmux_option:get_many/3","name":"get_many/3","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"get_many(Scopes, Name, Options)\n-spec get_many([tmux_model:session() |\n tmux_model:window() |\n tmux_model:pane(),\n ...],\n binary(),\n read_options()) ->\n {ok, [binary() | none]} | {error, map()}.","references":[{"start":48,"end":66,"target":"t:tmux_model:session/0"},{"start":87,"end":104,"target":"t:tmux_model:window/0"},{"start":125,"end":140,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":181,"end":187,"target":"t:erlang:binary/0"},{"start":206,"end":218,"target":"t:tmux_option:read_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":249,"end":255,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":277,"end":280,"target":"t:erlang:map/0"}],"params":[{"name":"Scopes","type":"[tmux_model:session() |\n tmux_model:window() |\n tmux_model:pane(),\n ...]","typeReferences":[{"start":1,"end":19,"target":"t:tmux_model:session/0"},{"start":35,"end":52,"target":"t:tmux_model:window/0"},{"start":68,"end":83,"target":"t:tmux_model:pane/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Options","type":"read_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_option:read_options/0"}]}],"returns":"{ok, [binary() | none]} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":6,"end":12,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":34,"end":37,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read one scalar option from one to seven local rows on the same registered endpoint. Performs one bounded native sequence after validating every scope. Results follow input order; each entry is binary text or none for a missing local value. `t:read_options/0` controls inheritance as in `get/3`.","body":"Names use ASCII letters, digits, dots, underscores and hyphens, with an\noptional leading @ for user options. Global tables, arrays, indexed keys,\nhooks and command options are unsupported. Use `get/3` for broader option\nreads and `tmux_hook:get/3` for hooks.\nInvalid scopes, unsupported keys and different owners fail before dispatch.\n\nEach read is bracketed by matching native target-ID observations. Unresolved\nor mismatched IDs reject the batch. The checks do not prove topology membership\nor completed destruction: older tmux may retain an unlinked pane through\nqueued references. The sequence provides interval observations and the same\nserver-incarnation guarantee as `get/3`. Ambient command configuration applies\nto both paths.\n\nStdout is bounded to 1 MiB and stderr to 64 KiB for the whole sequence, with\nthe endpoint's 2500 ms command deadline. Seven 32 KiB values fit even under\nthe qualified worst-case native quoting expansion. Larger external values\nmay exceed that aggregate output bound. Any command, framing or decoding\nfailure rejects the entire result, retaining native outcome and cleanup\nevidence. There is no partial-success result, hidden refresh or value cache."},"source":{"line":145,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_option-get_many-3"},{"id":"tmux_option:set/3","publicId":"tmux_option:set/3","qualifiedName":"tmux_option:set/3","name":"set/3","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"set(Scope, Key, Value)\n-spec set(scope(), key(), binary()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":33,"end":38,"target":"t:tmux_option:scope/0"},{"start":42,"end":45,"target":"t:tmux_option:key/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":49,"end":55,"target":"t:erlang:binary/0"},{"start":80,"end":104,"target":"t:tmux_operation:completed/0"},{"start":131,"end":153,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_option:scope/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_option:key/0"}]},{"name":"Value","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Set one scalar or indexed array entry with default write options. Performs I/O; see `set/4` for append, only-if-unset, parsing and unknown-outcome semantics."},"source":{"line":164,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_option-set-3"},{"id":"tmux_option:set/4","publicId":"tmux_option:set/4","qualifiedName":"tmux_option:set/4","name":"set/4","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"set(Scope, Key, Value, Options)\n-spec set(scope(), key(), binary(), write_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":42,"end":47,"target":"t:tmux_option:scope/0"},{"start":51,"end":54,"target":"t:tmux_option:key/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":58,"end":64,"target":"t:erlang:binary/0"},{"start":68,"end":81,"target":"t:tmux_option:write_options/0"},{"start":106,"end":130,"target":"t:tmux_operation:completed/0"},{"start":157,"end":179,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_option:scope/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_option:key/0"}]},{"name":"Value","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Options","type":"write_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_option:write_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Set a literal binary value, after scope/version/owner validation. Array writes require {Name, Index}; this avoids tmux's whole-array separator grammar. append uses tmux's type-specific -a semantics. only_if_unset checks the local table; already-set is a backend error, with no suppressed errors or compare-and-swap guarantee. Values must be supplied explicitly; an empty flag value retains tmux's native toggle behavior. A successful result proves command completion, not later effects of a stored command or format. Performs I/O; never retries."},"source":{"line":178,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_option-set-4"},{"id":"tmux_option:unset/2","publicId":"tmux_option:unset/2","qualifiedName":"tmux_option:unset/2","name":"unset/2","namespace":"tmux_option","parent":"tmux_option","kind":"function","modifiers":[],"signatures":[{"raw":"unset(Scope, Key)\n-spec unset(scope(), key()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":30,"end":35,"target":"t:tmux_option:scope/0"},{"start":39,"end":42,"target":"t:tmux_option:key/0"},{"start":69,"end":93,"target":"t:tmux_operation:completed/0"},{"start":122,"end":144,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Scope","type":"scope()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_option:scope/0"}]},{"name":"Key","type":"key()","typeReferences":[{"start":0,"end":3,"target":"t:tmux_option:key/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove a local option or one indexed entry. Removing a local option restores inheritance; removing an entry leaves a local array, possibly empty. Unsetting a global built-in resets tmux's default; user options are removed. Missing local values are a successful tmux no-op. No pane-wide -U action is implied. Performs I/O and returns the command result without refreshing captured rows."},"source":{"line":198,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_option-unset-2"},{"id":"t:tmux_option:key/0","publicId":"t:tmux_option:key/0","qualifiedName":"tmux_option:key/0","name":"key/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type key() :: binary() | {binary(), non_neg_integer()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":15,"end":21,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":37,"end":52,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Canonical binary name; arrays use a structured non-negative index, never bracket syntax."},"source":{"line":44,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_option-key-0"},{"id":"t:tmux_option:metadata/0","publicId":"t:tmux_option:metadata/0","qualifiedName":"tmux_option:metadata/0","name":"metadata/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type metadata() ::\n #{scopes := [server | session | window | pane],\n type :=\n choice | colour | command | flag | key |\n number | string,\n array := boolean(),\n hook := boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":209,"end":216,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":240,"end":247,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Source-derived scope, parser type, array and executable-hook metadata."},"source":{"line":46,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_option-metadata-0"},{"id":"t:tmux_option:read_options/0","publicId":"t:tmux_option:read_options/0","qualifiedName":"tmux_option:read_options/0","name":"read_options/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type read_options() :: #{inherit => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":37,"end":44,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Local-only unless inherit is true. Unknown options and non-Booleans are errors."},"source":{"line":50,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_option-read_options-0"},{"id":"t:tmux_option:scope/0","publicId":"t:tmux_option:scope/0","qualifiedName":"tmux_option:scope/0","name":"scope/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type scope() ::\n tmux_model:session() |\n tmux_model:window() |\n tmux_model:pane() |\n {server | session_defaults | window_defaults,\n tmux_server:t()}.","params":[],"references":[{"start":27,"end":45,"target":"t:tmux_model:session/0"},{"start":60,"end":77,"target":"t:tmux_model:window/0"},{"start":92,"end":107,"target":"t:tmux_model:pane/0"},{"start":179,"end":192,"target":"t:tmux_server:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A registered local entity or an explicitly selected global option table."},"source":{"line":41,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_option-scope-0"},{"id":"t:tmux_option:value/0","publicId":"t:tmux_option:value/0","qualifiedName":"tmux_option:value/0","name":"value/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type value() ::\n binary() | #{non_neg_integer() => binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":40,"end":55,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":61,"end":67,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Canonical tmux text bytes for a scalar/entry, or a sparse map for a whole array."},"source":{"line":54,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_option-value-0"},{"id":"t:tmux_option:write_options/0","publicId":"t:tmux_option:write_options/0","qualifiedName":"tmux_option:write_options/0","name":"write_options/0","namespace":"tmux_option","parent":"tmux_option","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type write_options() ::\n #{append => boolean(),\n only_if_unset => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":47,"end":54,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":87,"end":94,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"append maps to -a; only_if_unset maps to -o and reports already-set errors. Both default false."},"source":{"line":52,"file":"apps/libtmux_erlang/src/tmux_option.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_option-write_options-0"},{"id":"tmux_pane","publicId":"tmux_pane","qualifiedName":"tmux_pane","name":"tmux_pane","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Create, observe and rearrange panes using registered physical IDs.","body":"`split/2` accepts a pane or a window; a window means its active pane\nat execution. Options (`t:split_options/0`) are direction\n(horizontal or vertical), size ({cells, N} or {percent, N}), before,\nfull_size, zoom, cwd, env, launch and detach. It defaults to a detached\nvertical split. `get/2` returns newly observed fields; existing rows\nremain unchanged. Reads span several commands and do not claim atomicity.\nLaunch and environment options follow `tmux_session:create/2`. An absent or\nzero tmux pane_pid is represented as none. A captured positive PID is an\nobservation, not a guarantee that the process remains alive.\n\nA successful split followed by a failed observation retains the completed\nmutation and command result in its error. `kill/1` returns the\ncommand result. Detached or stale references cannot act. `resize_command/2`\nbuilds a reusable value without tmux I/O; the other calls perform I/O after\nvalidation.\n\n`send_text/2` sends up to 2,000 literal bytes, including NUL, in one\ncommand using tmux's hexadecimal key form. It adds no Enter key and never\nsplits a large input into partially applied commands. `send_keys/2`\naccepts up to 256 named keys, single UTF-8 characters, {function, 1..12} and\n{control, <>}. Named keys are enter, tab, escape, backspace, space,\nup, down, left, right, home, 'end', insert, delete, page_up, page_down and\nback_tab. Terminal modes still govern how input is consumed; command\ncompletion does not mean a program processed it.\n\n`capture/2` returns stdout bytes unchanged, including final\nnewlines. Options (`t:capture_options/0`) are start and 'end' (line\nintegers or all), join_lines, escape_sequences, escape_control,\nretain_trailing_spaces, alternate, pending and quiet. Defaults are tmux's\ncurrent-screen capture without escapes, joined wraps or padding. The\nendpoint's output limit applies; an oversized capture returns an error.\n\nUse `join/3`, `move/3` and `swap/3` to rearrange existing panes without\nrespawning their processes. `break/4` takes an explicit source window link:\nbreaking a window's only pane moves that membership, while breaking one of\nseveral panes creates a new physical window. The [topology guide](panes.md)\nshows the distinction. Use `get/2` or a new snapshot for updated parents and\nindexes; actions leave captured values unchanged.\n\n`pipe/3` connects a tmux-owned shell process to pane output, input or both.\nIt protects the shell text from tmux hash/strftime expansion; shell quoting\nremains the caller's responsibility. `stop_pipe/1` closes that native pipe.\nThese actions do not create an Erlang output subscription or transfer process\nownership to the endpoint. Use an application acknowledgement for consumer\nreadiness, delivered bytes and job completion."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane"},{"id":"tmux_pane:break/4","publicId":"tmux_pane:break/4","qualifiedName":"tmux_pane:break/4","name":"break/4","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"break(Pane, SourceLink, Session, Options)\n-spec break(tmux_model:pane(),\n tmux_model:window_link(),\n tmux_model:session(),\n break_options()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":54,"end":69,"target":"t:tmux_model:pane/0"},{"start":85,"end":107,"target":"t:tmux_model:window_link/0"},{"start":123,"end":141,"target":"t:tmux_model:session/0"},{"start":157,"end":170,"target":"t:tmux_pane:break_options/0"},{"start":197,"end":221,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":250,"end":253,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"SourceLink","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Options","type":"break_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_pane:break_options/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Break a physical pane through its explicit source membership into a destination session/index. Source, link and session must have the same registered owner. The source link's expected window and the pane's observed parent are checked before dispatch. The source selector also includes the stable pane ID, never its positional index. Preflight and action are not atomic.","body":"With multiple panes, tmux creates a new physical window. With only one pane,\nit moves the selected source membership, preserving the existing window and\nits other links. Moving the final membership out can remove the source session.\nPane IDs and processes remain; indexes and option inheritance can change.\nname is a literal UTF-8 argument, subject to native name cleaning.\nAn occupied destination index is refused. detach defaults true; false selects\nthe destination membership. Session groups retain native synchronization.\n\nReturns the command result consistently for both cases. Use `get/2` or\n`tmux_window_link:get/3` for fresh observations. Even an eventual native error\ncan unzoom a window; this is not a transaction and is never retried."},"source":{"line":211,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-break-4"},{"id":"tmux_pane:capture/2","publicId":"tmux_pane:capture/2","qualifiedName":"tmux_pane:capture/2","name":"capture/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"capture(Pane, Options)\n-spec capture(tmux_model:pane(), capture_options()) ->\n {ok, binary()} | {error, map()}.","references":[{"start":37,"end":52,"target":"t:tmux_model:pane/0"},{"start":56,"end":71,"target":"t:tmux_pane:capture_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":100,"end":106,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":120,"end":123,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"capture_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_pane:capture_options/0"}]}],"returns":"{ok, binary()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":5,"end":11,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":25,"end":28,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture terminal bytes, preserving final newlines. Options select line range, joined wraps, escapes, alternate screen and padding; defaults follow tmux current-screen capture. Performs I/O and returns an explicit output-limit error instead of silently truncating."},"source":{"line":414,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-capture-2"},{"id":"tmux_pane:get/2","publicId":"tmux_pane:get/2","qualifiedName":"tmux_pane:get/2","name":"get/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"get(Server, Id)\n-spec get(tmux_server:t(), tmux_model:pane_id()) ->\n {ok, tmux_model:pane()} | {error, map()}.","references":[{"start":26,"end":39,"target":"t:tmux_server:t/0"},{"start":43,"end":61,"target":"t:tmux_model:pane_id/0"},{"start":86,"end":101,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":115,"end":118,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Id","type":"tmux_model:pane_id()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:pane_id/0"}]}],"returns":"{ok, tmux_model:pane()} | {error, map()}","returnsReferences":[{"start":5,"end":20,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":34,"end":37,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read fresh fields for a physical pane ID. Performs I/O and returns target_gone for a vanished pane. A captured PID remains an observation, not a live-process guarantee."},"source":{"line":127,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-get-2"},{"id":"tmux_pane:join/3","publicId":"tmux_pane:join/3","qualifiedName":"tmux_pane:join/3","name":"join/3","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"join(Source, Destination, Options)\n-spec join(tmux_model:pane(),\n tmux_model:pane(),\n join_options()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":46,"end":61,"target":"t:tmux_model:pane/0"},{"start":76,"end":91,"target":"t:tmux_model:pane/0"},{"start":106,"end":118,"target":"t:tmux_pane:join_options/0"},{"start":144,"end":168,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":196,"end":199,"target":"t:erlang:map/0"}],"params":[{"name":"Source","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Destination","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"join_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_pane:join_options/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Move a source pane into a split beside the destination pane. Both physical IDs must belong to the same registered owner and must differ. Geometry follows `t:join_options/0`. Existing processes and pane IDs survive; dimensions, indexes and inherited window options can change. Removing a window's last pane destroys that physical window and its links, and can remove sessions.","body":"Default detach true avoids selecting the resolved destination session; false\nuses tmux's resolved session context for the destination pane. Shared physical\nwindows affect all their memberships. Returns the command result without\nrefreshing either row. Use `get/2` for current fields. No retry is performed."},"source":{"line":236,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-join-3"},{"id":"tmux_pane:kill/1","publicId":"tmux_pane:kill/1","qualifiedName":"tmux_pane:kill/1","name":"kill/1","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"kill(Pane)\n-spec kill(tmux_model:pane()) ->\n {ok, map()} | {error, map()}.","references":[{"start":22,"end":37,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":63,"end":66,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":80,"end":83,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Destroy this registered pane. Performs I/O after validating its origin and stable ID; it never falls back to a positional target."},"source":{"line":134,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-kill-1"},{"id":"tmux_pane:move/3","publicId":"tmux_pane:move/3","qualifiedName":"tmux_pane:move/3","name":"move/3","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"move(Source, Destination, Options)\n-spec move(tmux_model:pane(),\n tmux_model:pane(),\n join_options()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":46,"end":61,"target":"t:tmux_model:pane/0"},{"start":76,"end":91,"target":"t:tmux_model:pane/0"},{"start":106,"end":118,"target":"t:tmux_pane:join_options/0"},{"start":144,"end":168,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":196,"end":199,"target":"t:erlang:map/0"}],"params":[{"name":"Source","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Destination","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"join_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_pane:join_options/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Rearrange a source pane beside the destination, including within one window. Uses native move-pane, whose placement and lifetime behavior follow `join/3`. Both calls use explicit physical IDs and leave captured rows unchanged."},"source":{"line":245,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-move-3"},{"id":"tmux_pane:pipe/3","publicId":"tmux_pane:pipe/3","qualifiedName":"tmux_pane:pipe/3","name":"pipe/3","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"pipe/3\n-spec pipe(tmux_model:pane(),\n pipe_command(),\n pipe_options()) ->\n {ok, map()} | {error, map()}.","references":[{"start":18,"end":33,"target":"t:tmux_model:pane/0"},{"start":48,"end":60,"target":"t:tmux_pane:pipe_command/0"},{"start":75,"end":87,"target":"t:tmux_pane:pipe_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":113,"end":116,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":130,"end":133,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Command","type":"pipe_command()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_pane:pipe_command/0"}]},{"name":"Options","type":"pipe_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_pane:pipe_options/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Connect a shell process to this registered physical pane, performing I/O. An explicit nonempty `#{shell => Command}` is required (`t:pipe_command/0`). tmux hash formats and strftime directives are escaped so the shell receives the supplied text. This does not quote values interpolated into shell code; the caller owns that quoting. Executable argv is not accepted by this shell-only native command. Encoding follows `tmux_command:literal_format/2` in time mode. A percent-bearing command above its native 8191-byte intermediate limit returns `format_limit` before dispatch, preserving any existing pipe.","body":"`direction` (`t:pipe_options/0`) is `output` (default: pane output to child\nstdin), `input` (child stdout to pane input) or `both`. `toggle` defaults false,\nreplacing any existing pipe. True maps to native `-o`: close an existing pipe without\nstarting another, or open one when none exists. A stopped pipe and replacement\ncan discard pending output. Await consumer acknowledgements before closing\nif delivered bytes matter. This is a live PTY byte stream, not rendered\ncapture text or replay of terminal history; terminal modes affect its bytes.\n\nThe child is started by tmux through `/bin/sh -c`. Its stderr is discarded;\nunused directions are routed to the native null device. No pane cwd or\nenvironment copying is promised. A successful command result does not prove\nexec success, readiness, delivery or child exit. The process is tmux-owned;\n`tmux_server:close/1` preserves the borrowed pane and its pipe. This is not an\nErlang subscription with library flow control. Use `stop_pipe/1` to close the\npipe; stopping is not process cancellation or a wait for job completion."},"source":{"line":165,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-pipe-3"},{"id":"tmux_pane:resize/2","publicId":"tmux_pane:resize/2","qualifiedName":"tmux_pane:resize/2","name":"resize/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"resize(Pane, Options)\n-spec resize(tmux_model:pane(), resize_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":35,"end":50,"target":"t:tmux_model:pane/0"},{"start":54,"end":68,"target":"t:tmux_pane:resize_options/0"},{"start":96,"end":120,"target":"t:tmux_operation:completed/0"},{"start":150,"end":172,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"resize_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_pane:resize_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Request an absolute width, height or both for this registered physical pane. Performs I/O after validating dimensions and origin. tmux can clamp the request to its layout constraints and can resize neighboring panes. Resizing a tiled pane unzooms its window. Use `get/2` for actual dimensions; the input row is unchanged. The accepted library range is not a promise that every server accepts every dimension: tmux versions can impose tighter limits and return a command error.","body":"An empty request is rejected before dispatch:","examples":[{"lang":"erlang","code":"1> tmux_pane:resize(invalid_row, #{}).\n{error,#{code => empty_resize}}"}]},"source":{"line":317,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-resize-2"},{"id":"tmux_pane:resize_command/2","publicId":"tmux_pane:resize_command/2","qualifiedName":"tmux_pane:resize_command/2","name":"resize_command/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"resize_command(Pane, Options)\n-spec resize_command(tmux_model:pane(), resize_options()) ->\n {ok, tmux_command:t()} |\n {error, map()}.","references":[{"start":51,"end":66,"target":"t:tmux_model:pane/0"},{"start":70,"end":84,"target":"t:tmux_pane:resize_options/0"},{"start":120,"end":134,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":172,"end":175,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"resize_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_pane:resize_options/0"}]}],"returns":"{ok, tmux_command:t()} | {error, map()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":33,"end":36,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Build a resize command without tmux I/O. Uses the dimensions and validation rules of `resize/2`, preserving the row's captured origin and stable pane ID. Endpoint liveness and native layout constraints are checked during execution. Submit through `tmux_server:command/3` or `tmux_operation:start/3`.","examples":[{"lang":"erlang","code":"1> tmux_pane:resize_command(invalid_row, #{}).\n{error,#{code => empty_resize}}"}]},"source":{"line":335,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-resize_command-2"},{"id":"tmux_pane:respawn/2","publicId":"tmux_pane:respawn/2","qualifiedName":"tmux_pane:respawn/2","name":"respawn/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"respawn(Pane, Options)\n-spec respawn(tmux_model:pane(), respawn_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":37,"end":52,"target":"t:tmux_model:pane/0"},{"start":56,"end":71,"target":"t:tmux_pane:respawn_options/0"},{"start":100,"end":124,"target":"t:tmux_operation:completed/0"},{"start":155,"end":177,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"respawn_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_pane:respawn_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Respawn this registered physical pane, keeping its pane ID. force defaults false and a running pane normally returns command_error. force = true lets tmux close its existing PTY before spawning again. This acknowledges the tmux command, not former-job termination or successful application initialization. The old PTY can already be closed if a later spawn step fails.","body":"launch defaults to previous, reusing tmux's saved argv or shell. An explicit\nargv or shell map replaces that command. default_shell is invalid here because\nabsent respawn arguments mean saved-command reuse. Omitted cwd retains the\nsaved launch directory, rather than the program's current directory. env\naugments the session environment tmux resolves for this physical pane; a\ncaptured membership does not pin that context. Prior per-spawn overrides are\nnot automatically reapplied. Other launch rules follow\n`tmux_session:create/2`.\n\nPerforms I/O after validation. Existing rows retain their observations; use\n`get/2` and an application readiness condition to inspect the new process. An\nuncertain result is not permission to replay this mutation automatically.\n\nUnsupported launch modes fail before dispatch:","examples":[{"lang":"erlang","code":"1> tmux_pane:respawn(invalid_row, #{launch => default_shell}).\n{error,#{code => invalid_launch}}"}]},"source":{"line":373,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-respawn-2"},{"id":"tmux_pane:send_keys/2","publicId":"tmux_pane:send_keys/2","qualifiedName":"tmux_pane:send_keys/2","name":"send_keys/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"send_keys(Pane, Keys)\n-spec send_keys(tmux_model:pane(), [key()]) ->\n {ok, map()} | {error, map()}.","references":[{"start":38,"end":53,"target":"t:tmux_model:pane/0"},{"start":58,"end":61,"target":"t:tmux_pane:key/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":93,"end":96,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":110,"end":113,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Keys","type":"[key()]","typeReferences":[{"start":1,"end":4,"target":"t:tmux_pane:key/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Send at most 256 validated key tokens. Named keys, single UTF-8 characters, function keys and control-letter tuples are supported. Performs I/O; terminal modes determine the resulting input bytes. Use `send_text/2` for arbitrary bytes."},"source":{"line":401,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-send_keys-2"},{"id":"tmux_pane:send_text/2","publicId":"tmux_pane:send_text/2","qualifiedName":"tmux_pane:send_text/2","name":"send_text/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"send_text/2\n-spec send_text(tmux_model:pane(), binary()) ->\n {ok, map()} | {error, map()}.","references":[{"start":28,"end":43,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":47,"end":53,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":84,"end":87,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":101,"end":104,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Bytes","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Send at most 2,000 literal bytes as hexadecimal tmux keys. Adds no Enter key and does not invoke a shell. Performs I/O in one command; oversized input is rejected before partial submission. Completion does not prove that a terminal program processed the input."},"source":{"line":388,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-send_text-2"},{"id":"tmux_pane:split/2","publicId":"tmux_pane:split/2","qualifiedName":"tmux_pane:split/2","name":"split/2","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"split(Row, Options)\n-spec split(tmux_model:pane() | tmux_model:window(),\n split_options()) ->\n {ok, tmux_model:pane()} | {error, map()}.","references":[{"start":32,"end":47,"target":"t:tmux_model:pane/0"},{"start":52,"end":69,"target":"t:tmux_model:window/0"},{"start":85,"end":98,"target":"t:tmux_pane:split_options/0"},{"start":125,"end":140,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":154,"end":157,"target":"t:erlang:map/0"}],"params":[{"name":"Row","type":"tmux_model:pane() | tmux_model:window()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"},{"start":20,"end":37,"target":"t:tmux_model:window/0"}]},{"name":"Options","type":"split_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_pane:split_options/0"}]}],"returns":"{ok, tmux_model:pane()} | {error, map()}","returnsReferences":[{"start":5,"end":20,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":34,"end":37,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Split a pane, or the supplied window's active pane, and observe the new pane. Defaults to a detached vertical split. Options and launch semantics are described in the module docs. Performs I/O; a post-creation read error retains the completed mutation rather than pretending that no pane was created."},"source":{"line":109,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-split-2"},{"id":"tmux_pane:stop_pipe/1","publicId":"tmux_pane:stop_pipe/1","qualifiedName":"tmux_pane:stop_pipe/1","name":"stop_pipe/1","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"stop_pipe(Pane)\n-spec stop_pipe(tmux_model:pane()) ->\n {ok, map()} | {error, map()}.","references":[{"start":32,"end":47,"target":"t:tmux_model:pane/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":78,"end":81,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":95,"end":98,"target":"t:erlang:map/0"}],"params":[{"name":"Pane","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Close this registered pane's native pipe, performing I/O. On a live pane, closing an already closed pipe succeeds. An exited pane can produce a native command error; a vanished ID returns `target_gone`.","body":"Closing can discard pending bytes. It neither kills nor waits for an arbitrary\nshell job started by `pipe/3`; applications must verify consumption and\nprocess completion themselves. The endpoint does not own that shell process."},"source":{"line":188,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-stop_pipe-1"},{"id":"tmux_pane:swap/3","publicId":"tmux_pane:swap/3","qualifiedName":"tmux_pane:swap/3","name":"swap/3","namespace":"tmux_pane","parent":"tmux_pane","kind":"function","modifiers":[],"signatures":[{"raw":"swap(Source, Destination, Options)\n-spec swap(tmux_model:pane(),\n tmux_model:pane(),\n swap_options()) ->\n {ok, tmux_operation:completed()} |\n {error, map()}.","references":[{"start":46,"end":61,"target":"t:tmux_model:pane/0"},{"start":76,"end":91,"target":"t:tmux_model:pane/0"},{"start":106,"end":118,"target":"t:tmux_pane:swap_options/0"},{"start":144,"end":168,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":196,"end":199,"target":"t:erlang:map/0"}],"params":[{"name":"Source","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Destination","type":"tmux_model:pane()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_model:pane/0"}]},{"name":"Options","type":"swap_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_pane:swap_options/0"}]}],"returns":"{ok, tmux_operation:completed()} | {error, map()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":43,"end":46,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Exchange two panes' layout positions within or across physical windows. Preserves their IDs and processes; parent windows, dimensions, indexes and inherited options can change. Both rows require the same registered owner. detach defaults true; active positions can still receive different panes. zoom maps to native -Z. Identical IDs do not exchange panes, but native zoom handling still runs; the default can unzoom even a same-pane swap. Returns the command result; `get/2` observes the resulting values explicitly."},"source":{"line":258,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_pane-swap-3"},{"id":"t:tmux_pane:break_options/0","publicId":"t:tmux_pane:break_options/0","qualifiedName":"tmux_pane:break_options/0","name":"break_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type break_options() ::\n #{index := tmux_window_link:index(),\n name => binary(),\n detach => boolean()}.","params":[],"references":[{"start":46,"end":68,"target":"t:tmux_window_link:index/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":92,"end":98,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":124,"end":131,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Break placement: explicit destination index, optional literal window name. detach defaults true."},"source":{"line":66,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_pane-break_options-0"},{"id":"t:tmux_pane:capture_options/0","publicId":"t:tmux_pane:capture_options/0","qualifiedName":"tmux_pane:capture_options/0","name":"capture_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type capture_options() ::\n #{start => coordinate(),\n 'end' => coordinate(),\n join_lines => boolean(),\n escape_sequences => boolean(),\n escape_control => boolean(),\n retain_trailing_spaces => boolean(),\n alternate => boolean(),\n pending => boolean(),\n quiet => boolean()}.","params":[],"references":[{"start":48,"end":58,"target":"t:tmux_pane:coordinate/0"},{"start":83,"end":93,"target":"t:tmux_pane:coordinate/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":123,"end":130,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":166,"end":173,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":207,"end":214,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":256,"end":263,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":292,"end":299,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":326,"end":333,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":358,"end":365,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture range and rendering flags. Byte output and its final newline are preserved."},"source":{"line":93,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_pane-capture_options-0"},{"id":"t:tmux_pane:coordinate/0","publicId":"t:tmux_pane:coordinate/0","qualifiedName":"tmux_pane:coordinate/0","name":"coordinate/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type coordinate() :: -2147483648..32767 | all.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A capture line coordinate, or all for tmux's full available range."},"source":{"line":91,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_pane-coordinate-0"},{"id":"t:tmux_pane:join_options/0","publicId":"t:tmux_pane:join_options/0","qualifiedName":"tmux_pane:join_options/0","name":"join_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type join_options() ::\n #{direction => horizontal | vertical,\n size =>\n {cells, 1..2147483647} | {percent, 1..100},\n detach => boolean(),\n before => boolean(),\n full_size => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":174,"end":181,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":207,"end":214,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":243,"end":250,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Join/move geometry: detach true, vertical split by default. before and full_size follow tmux layout rules."},"source":{"line":72,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_pane-join_options-0"},{"id":"t:tmux_pane:key/0","publicId":"t:tmux_pane:key/0","qualifiedName":"tmux_pane:key/0","name":"key/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type key() ::\n binary() |\n enter | tab | escape | backspace | space | up |\n down | left | right | home | 'end' | insert |\n delete | page_up | page_down | back_tab |\n {function, 1..12} |\n {control, binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":25,"end":31,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":252,"end":258,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A validated named key, single UTF-8 character, function key or control-letter key."},"source":{"line":97,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_pane-key-0"},{"id":"t:tmux_pane:pipe_command/0","publicId":"t:tmux_pane:pipe_command/0","qualifiedName":"tmux_pane:pipe_command/0","name":"pipe_command/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type pipe_command() :: #{shell := binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":35,"end":41,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Explicit shell code: a nonempty NUL-free binary, with no tmux format or strftime expansion."},"source":{"line":59,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_pane-pipe_command-0"},{"id":"t:tmux_pane:pipe_options/0","publicId":"t:tmux_pane:pipe_options/0","qualifiedName":"tmux_pane:pipe_options/0","name":"pipe_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type pipe_options() ::\n #{direction => output | input | both,\n toggle => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":94,"end":101,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Pipe direction defaults to output. toggle defaults false; true closes an existing pipe instead of replacing it."},"source":{"line":61,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_pane-pipe_options-0"},{"id":"t:tmux_pane:resize_options/0","publicId":"t:tmux_pane:resize_options/0","qualifiedName":"tmux_pane:resize_options/0","name":"resize_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type resize_options() ::\n #{width := 1..65535, height => 1..65535} |\n #{width => 1..65535, height := 1..65535}.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Requested absolute pane dimensions in cells. Supply at least one dimension; tmux can clamp it to fit the layout."},"source":{"line":85,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_pane-resize_options-0"},{"id":"t:tmux_pane:respawn_options/0","publicId":"t:tmux_pane:respawn_options/0","qualifiedName":"tmux_pane:respawn_options/0","name":"respawn_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type respawn_options() ::\n #{force => boolean(),\n launch => tmux_command:respawn_spec(),\n cwd => binary(),\n env => #{binary() => binary()}}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":48,"end":55,"target":"t:erlang:boolean/0"},{"start":81,"end":106,"target":"t:tmux_command:respawn_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":129,"end":135,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":160,"end":166,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":172,"end":178,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Respawn options. Defaults: force false, launch previous, saved cwd. Environment augments tmux's resolved session environment for this spawn."},"source":{"line":88,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_pane-respawn_options-0"},{"id":"t:tmux_pane:split_options/0","publicId":"t:tmux_pane:split_options/0","qualifiedName":"tmux_pane:split_options/0","name":"split_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type split_options() ::\n #{direction => horizontal | vertical,\n size =>\n {cells, 1..2147483647} | {percent, 1..100},\n before => boolean(),\n full_size => boolean(),\n zoom => boolean(),\n cwd => binary(),\n env => #{binary() => binary()},\n launch => tmux_command:launch_spec(),\n detach => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":175,"end":182,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":211,"end":218,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":242,"end":249,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":272,"end":278,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":303,"end":309,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":315,"end":321,"target":"t:erlang:binary/0"},{"start":348,"end":372,"target":"t:tmux_command:launch_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":398,"end":405,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Split geometry, placement and explicit launch options. Defaults to a detached vertical split."},"source":{"line":80,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_pane-split_options-0"},{"id":"t:tmux_pane:swap_options/0","publicId":"t:tmux_pane:swap_options/0","qualifiedName":"tmux_pane:swap_options/0","name":"swap_options/0","namespace":"tmux_pane","parent":"tmux_pane","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type swap_options() ::\n #{detach => boolean(), zoom => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":46,"end":53,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":65,"end":72,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Swap controls: detach defaults true; zoom maps to tmux -Z to retain zoom."},"source":{"line":78,"file":"apps/libtmux_erlang/src/tmux_pane.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_pane-swap_options-0"},{"id":"tmux_query","publicId":"tmux_query","qualifiedName":"tmux_query","name":"tmux_query","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Build and execute explicit queries over the tmux graph.","body":"Use `fetch/1` to execute a query. Constructors,\n`where/2`, `limit/2`, `pushdown/2` and\n`explain/1` perform no tmux I/O. Criteria are validated when added,\nand repeated conditions conjoin. Fetching returns an ordered `m:tmux_select`\nselection backed by a complete `m:tmux_snapshot` graph. By default the full\ncaptured view is filtered locally. Enable native candidate exclusion with\n`pushdown/2`: it can add a scan without reducing complete-graph hydration. The\ncandidate is a necessary condition; the full filter still runs before the limit.\n\nCaptures span commands and are not atomic. Candidate IDs excluded at one\nobservation cannot be recovered by later local filtering. Disabling\n`pushdown/2` evaluates the complete captured view without an\nearlier candidate exclusion. Numeric candidate fields come from the restricted\nscalar codec and must agree with the capture's scalar observations. Text and\nrelationships remain local.\n\nCaptures emit bounded OTP Logger reports with their snapshot ID and endpoint\ngeneration. See [runtime diagnostics](diagnostics.md) for observation cost,\nrejection reports and configuration.","examples":[{"lang":"erlang","code":"1> Q0 = tmux_query:panes(unopened), ok.\nok\n2> Q = tmux_query:where(#{width => #{gte => 120}}, Q0), ok.\nok\n3> maps:get(format, maps:get(candidate, tmux_query:explain(Q))).\n<<\"1\">>\n4> Pushed = tmux_query:pushdown(true, Q), ok.\nok\n5> maps:get(format, maps:get(candidate, tmux_query:explain(Pushed))).\n<<\"#{e|>=|:#{pane_width},120}\">>"}]},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_query"},{"id":"tmux_query:explain/1","publicId":"tmux_query:explain/1","qualifiedName":"tmux_query:explain/1","name":"explain/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"explain/1\n-spec explain(t()) -> plan().","references":[{"start":24,"end":25,"target":"t:tmux_query:t/0"},{"start":32,"end":36,"target":"t:tmux_query:plan/0"}],"params":[{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"returns":"plan()","returnsReferences":[{"start":0,"end":4,"target":"t:tmux_query:plan/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Inspect command templates, necessary candidate conditions, full residual, hydration, required fields, ordering and temporal assumptions. Performs no I/O and does not contact the endpoint to claim dynamic capabilities."},"source":{"line":191,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_query-explain-1"},{"id":"tmux_query:fetch/1","publicId":"tmux_query:fetch/1","qualifiedName":"tmux_query:fetch/1","name":"fetch/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"fetch(Query)\n-spec fetch(t()) -> {ok, tmux_select:t()} | {error, map()}.","references":[{"start":25,"end":26,"target":"t:tmux_query:t/0"},{"start":38,"end":51,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":65,"end":68,"target":"t:erlang:map/0"}],"params":[{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"returns":"{ok, tmux_select:t()} | {error, map()}","returnsReferences":[{"start":5,"end":18,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":32,"end":35,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Execute with default capture bounds and no retry. Returns an ordered selection whose complete graph remains locally readable. See `fetch/2` for resource limits, requested retries and operational errors."},"source":{"line":215,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_query-fetch-1"},{"id":"tmux_query:fetch/2","publicId":"tmux_query:fetch/2","qualifiedName":"tmux_query:fetch/2","name":"fetch/2","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"fetch/2\n-spec fetch(t(), fetch_options()) ->\n {ok, tmux_select:t()} | {error, map()}.","references":[{"start":20,"end":21,"target":"t:tmux_query:t/0"},{"start":25,"end":38,"target":"t:tmux_query:fetch_options/0"},{"start":65,"end":78,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":92,"end":95,"target":"t:erlang:map/0"}],"params":[{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]},{"name":"Options","type":"fetch_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_query:fetch_options/0"}]}],"returns":"{ok, tmux_select:t()} | {error, map()}","returnsReferences":[{"start":5,"end":18,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":32,"end":35,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Execute the planned observation, full local predicate and final limit.","body":"Capture options are those of `tmux_server:snapshot/2`. retry is 0 (default) or\n1 and retries only inconsistent_capture, within the original capture deadline.\nThe retry is a new read-only capture. No mutations are retried. Invalid\ncapture requests return tagged errors, including unsupported consistency.","examples":[{"lang":"erlang","code":"1> tmux_query:fetch(tmux_query:panes(unopened), #{retry => 2}).\n{error,#{code => invalid_query_options}}"}]},"source":{"line":231,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_query-fetch-2"},{"id":"tmux_query:limit/2","publicId":"tmux_query:limit/2","qualifiedName":"tmux_query:limit/2","name":"limit/2","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"limit/2\n-spec limit(0..65536, t()) -> t().","references":[{"start":30,"end":31,"target":"t:tmux_query:t/0"},{"start":38,"end":39,"target":"t:tmux_query:t/0"}],"params":[{"name":"Count","type":"0..65536","typeReferences":[]},{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Set a final result limit from 0 through 65536, applied after residual filtering and identity handling. It is not a candidate-fetch limit. Performs no I/O; invalid counts raise bad_query_limit."},"source":{"line":172,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_query-limit-2"},{"id":"tmux_query:panes/1","publicId":"tmux_query:panes/1","qualifiedName":"tmux_query:panes/1","name":"panes/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"panes(Server)\n-spec panes(tmux_server:t()) -> t().","references":[{"start":26,"end":39,"target":"t:tmux_server:t/0"},{"start":46,"end":47,"target":"t:tmux_query:t/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Describe a future server-wide physical pane query. Performs no I/O; `fetch/1` is the execution boundary."},"source":{"line":128,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_query-panes-1"},{"id":"tmux_query:pushdown/2","publicId":"tmux_query:pushdown/2","qualifiedName":"tmux_query:pushdown/2","name":"pushdown/2","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"pushdown(Enabled, Query)\n-spec pushdown(boolean(), t()) -> t().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":40,"end":47,"target":"t:erlang:boolean/0"},{"start":51,"end":52,"target":"t:tmux_query:t/0"},{"start":59,"end":60,"target":"t:tmux_query:t/0"}],"params":[{"name":"Enabled","type":"boolean()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:boolean/0"}]},{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Enable or disable native candidate exclusion, returning a new query. The default is disabled: evaluate the complete captured view locally. Enabling it can add a candidate scan without reducing hydration; neither mode promises an atomic graph. Performs no I/O."},"source":{"line":183,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_query-pushdown-2"},{"id":"tmux_query:sessions/1","publicId":"tmux_query:sessions/1","qualifiedName":"tmux_query:sessions/1","name":"sessions/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"sessions(Server)\n-spec sessions(tmux_server:t()) -> t().","references":[{"start":32,"end":45,"target":"t:tmux_server:t/0"},{"start":52,"end":53,"target":"t:tmux_query:t/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Describe a future server-wide session query without executing tmux."},"source":{"line":144,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_query-sessions-1"},{"id":"tmux_query:where/2","publicId":"tmux_query:where/2","qualifiedName":"tmux_query:where/2","name":"where/2","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"where/2\n-spec where(map() | tmux_filter:t(), t()) -> t().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"},{"start":28,"end":41,"target":"t:tmux_filter:t/0"},{"start":45,"end":46,"target":"t:tmux_query:t/0"},{"start":53,"end":54,"target":"t:tmux_query:t/0"}],"params":[{"name":"Criteria","type":"map() | tmux_filter:t()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"},{"start":8,"end":21,"target":"t:tmux_filter:t/0"}]},{"name":"Query","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate trusted criteria for this entity and conjoin them with prior conditions. Successive calls share the same normalized resource limits as one flat conjunction. Each relationship quantifier retains its own scope. Returns a new immutable query; malformed criteria raise bad_filter. Performs no I/O."},"source":{"line":153,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_query-where-2"},{"id":"tmux_query:window_links/1","publicId":"tmux_query:window_links/1","qualifiedName":"tmux_query:window_links/1","name":"window_links/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"window_links(Server)\n-spec window_links(tmux_server:t()) -> t().","references":[{"start":40,"end":53,"target":"t:tmux_server:t/0"},{"start":60,"end":61,"target":"t:tmux_query:t/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Describe a future query over session-relative window memberships. Repeated physical windows retain distinct membership identity. Performs no I/O."},"source":{"line":139,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_query-window_links-1"},{"id":"tmux_query:windows/1","publicId":"tmux_query:windows/1","qualifiedName":"tmux_query:windows/1","name":"windows/1","namespace":"tmux_query","parent":"tmux_query","kind":"function","modifiers":[],"signatures":[{"raw":"windows(Server)\n-spec windows(tmux_server:t()) -> t().","references":[{"start":30,"end":43,"target":"t:tmux_server:t/0"},{"start":50,"end":51,"target":"t:tmux_query:t/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]}],"returns":"t()","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_query:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Describe a future query over unique physical windows. Performs no I/O."},"source":{"line":133,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_query-windows-1"},{"id":"t:tmux_query:candidate/0","publicId":"t:tmux_query:candidate/0","qualifiedName":"tmux_query:candidate/0","name":"candidate/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type candidate() ::\n #{format := binary(),\n exact := boolean(),\n local_only := [local_reason()],\n numeric_range => {0, 9007199254740991}}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":43,"end":49,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":74,"end":81,"target":"t:erlang:boolean/0"},{"start":112,"end":124,"target":"t:tmux_query:local_reason/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Native necessary condition. format is a rendered tmux expression; exact means the translation covers the whole predicate for one observed state. A true fallback can admit every row. numeric_range describes qualified integer conversion, and is omitted for disabled/oversized fallback plans."},"source":{"line":65,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_query-candidate-0"},{"id":"t:tmux_query:command_plan/0","publicId":"t:tmux_query:command_plan/0","qualifiedName":"tmux_query:command_plan/0","name":"command_plan/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type command_plan() ::\n #{initial_spine := [source_command()],\n candidate := [source_command()],\n hydration := [source_command()],\n isolated_hydration := [source_command()],\n final_spine := [source_command()],\n empty_server := skip_window_and_pane_scans}.","params":[],"references":[{"start":54,"end":68,"target":"t:tmux_query:source_command/0"},{"start":99,"end":113,"target":"t:tmux_query:source_command/0"},{"start":144,"end":158,"target":"t:tmux_query:source_command/0"},{"start":198,"end":212,"target":"t:tmux_query:source_command/0"},{"start":245,"end":259,"target":"t:tmux_query:source_command/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture phases: initial identity/scalar scans, optional candidate scans, complete text/byte hydration and final identity/scalar scans. hydration gives the default batched templates; isolated_hydration describes the explicit isolated option and unqualified-field fallback. An empty server skips window/pane scans. Execution still validates capture bounds and can fail."},"source":{"line":92,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_query-command_plan-0"},{"id":"t:tmux_query:fetch_options/0","publicId":"t:tmux_query:fetch_options/0","qualifiedName":"tmux_query:fetch_options/0","name":"fetch_options/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type fetch_options() ::\n #{deadline_ms => 1..600000,\n max_rows => 1..65536,\n max_bytes => 1..67108864,\n hydration => tmux_server:hydration(),\n consistency => observed | atomic,\n retry => 0 | 1}.","params":[],"references":[{"start":160,"end":181,"target":"t:tmux_server:hydration/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture bounds plus an explicitly requested single inconsistent-capture retry; default retry is zero."},"source":{"line":48,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_query-fetch_options-0"},{"id":"t:tmux_query:local_reason/0","publicId":"t:tmux_query:local_reason/0","qualifiedName":"tmux_query:local_reason/0","name":"local_reason/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type local_reason() ::\n #{reason :=\n disabled | format_limit | inexact_negation |\n unqualified_scalar_codec |\n complete_relationship_required,\n field => binary(),\n relation => binary(),\n operator => tmux_schema:operator()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":219,"end":225,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":253,"end":259,"target":"t:erlang:binary/0"},{"start":287,"end":307,"target":"t:tmux_schema:operator/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Why part of a predicate stays local. field and relation contain stable schema IDs, not Erlang names or tmux formats. An unsupported leaf may broaden the native condition; it never removes the full local predicate."},"source":{"line":56,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_query-local_reason-0"},{"id":"t:tmux_query:plan/0","publicId":"t:tmux_query:plan/0","qualifiedName":"tmux_query:plan/0","name":"plan/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type plan() ::\n #{entity := tmux_schema:entity(),\n pushdown := boolean(),\n candidate := candidate(),\n residual := tmux_filter:wire_document(),\n required := [tmux_snapshot:requirement()],\n limit := infinity | 0..65536,\n commands := command_plan(),\n hydration := complete_graph,\n ordering := session_index_window | numeric_id,\n deduplication := membership | physical_id,\n capabilities :=\n #{minimum_tmux := binary(),\n transport := one_shot},\n consistency := observed,\n atomic := false,\n candidate_scalars :=\n same_row_checked_against_spine,\n text_and_relations := later_observations,\n temporal_limit :=\n excluded_rows_cannot_be_recovered}.","params":[],"references":[{"start":38,"end":56,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":84,"end":91,"target":"t:erlang:boolean/0"},{"start":120,"end":129,"target":"t:tmux_query:candidate/0"},{"start":157,"end":182,"target":"t:tmux_filter:wire_document/0"},{"start":211,"end":236,"target":"t:tmux_snapshot:requirement/0"},{"start":307,"end":319,"target":"t:tmux_query:command_plan/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":540,"end":546,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Pure explanation of a query. pushdown reports whether candidate exclusion is enabled (disabled by default). residual is the full portable predicate, required lists coverage requirements, and limit applies after residual evaluation. ordering and deduplication name the identity policy, not arbitrary map order. capabilities describes the planner baseline without probing a live endpoint.","body":"Capture spans commands. Candidate scalar values are checked against the first\nscan; text and relationships are later observations. Excluded rows cannot be\nrecovered after state changes. Even an exact candidate is not an atomic query."},"source":{"line":107,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_query-plan-0"},{"id":"t:tmux_query:source_command/0","publicId":"t:tmux_query:source_command/0","qualifiedName":"tmux_query:source_command/0","name":"source_command/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type source_command() ::\n #{entity := tmux_schema:entity(),\n command := binary(),\n format := binary(),\n transport := one_shot,\n codec := scalar_spine,\n kind := tmux_schema:entity(),\n args := [binary()],\n filter => binary()} |\n #{entity := tmux_schema:entity(),\n fields := [atom()],\n command := binary(),\n format := binary(),\n transport := one_shot,\n codec := escaped_columns_v1,\n args := [binary()]} |\n #{entity := tmux_schema:entity(),\n field := atom(),\n command := binary(),\n format := binary(),\n transport := one_shot,\n codec := id_prefixed_quoted_field,\n target := observed_id}.","params":[],"references":[{"start":48,"end":66,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":93,"end":99,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":125,"end":131,"target":"t:erlang:binary/0"},{"start":225,"end":243,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":268,"end":274,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":301,"end":307,"target":"t:erlang:binary/0"},{"start":335,"end":353,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":380,"end":384,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":412,"end":418,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":444,"end":450,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":551,"end":557,"target":"t:erlang:binary/0"},{"start":586,"end":604,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":629,"end":633,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":660,"end":666,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":692,"end":698,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Diagnostic command template, not executable argv. Scan templates carry args; text/byte hydration escapes each field once before column framing. Unqualified schema fields use isolated target = observed_id templates, resolved only while capturing. codec states how returned data is framed, including the version-specific print layer. This value grants no atomicity or persistent-connection guarantee."},"source":{"line":75,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_query-source_command-0"},{"id":"t:tmux_query:t/0","publicId":"t:tmux_query:t/0","qualifiedName":"tmux_query:t/0","name":"t/0","namespace":"tmux_query","parent":"tmux_query","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"An immutable description of future tmux reads. Only fetch executes it."},"source":{"line":121,"file":"apps/libtmux_erlang/src/tmux_query.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_query-t-0"},{"id":"tmux_schema","publicId":"tmux_schema","qualifiedName":"tmux_schema","name":"tmux_schema","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Validate schema-defined observations and normalize scalar values.","body":"Field names come from the generated registry, never record reflection or\npayload-created atoms. Text is validated UTF-8; byte fields preserve arbitrary\nbinaries. Integer normalization uses the shared exact JSON integer range.\n`m:tmux_model` validates rows and `m:tmux_filter` validates criteria through\nthis schema. The [field reference](fields.md) lists fields and relationships."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_schema"},{"id":"tmux_schema:field/2","publicId":"tmux_schema:field/2","qualifiedName":"tmux_schema:field/2","name":"field/2","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"field(Entity, Field)\n-spec field(entity(), atom()) ->\n {ok, field_metadata()} |\n {error, error_detail()}.","references":[{"start":33,"end":39,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":43,"end":47,"target":"t:erlang:atom/0"},{"start":74,"end":88,"target":"t:tmux_schema:field_metadata/0"},{"start":117,"end":129,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Entity","type":"entity()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_schema:entity/0"}]},{"name":"Field","type":"atom()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:atom/0"}]}],"returns":"{ok, field_metadata()} | {error, error_detail()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_schema:field_metadata/0"},{"start":33,"end":45,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Look up one permitted field by its Erlang atom name. Unknown names return a tagged error; this does not turn input strings into atoms."},"source":{"line":78,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_schema-field-2"},{"id":"tmux_schema:fields/1","publicId":"tmux_schema:fields/1","qualifiedName":"tmux_schema:fields/1","name":"fields/1","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"fields(Entity)\n-spec fields(entity()) ->\n {ok, #{atom() => field_metadata()}} |\n {error, error_detail()}.","references":[{"start":28,"end":34,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":64,"end":68,"target":"t:erlang:atom/0"},{"start":74,"end":88,"target":"t:tmux_schema:field_metadata/0"},{"start":119,"end":131,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Entity","type":"entity()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_schema:entity/0"}]}],"returns":"{ok, #{atom() => field_metadata()}} |\n {error, error_detail()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":7,"end":11,"target":"t:erlang:atom/0"},{"start":17,"end":31,"target":"t:tmux_schema:field_metadata/0"},{"start":56,"end":68,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return generated field metadata for a known entity, or a tagged unknown_entity error. Field names, wire names and stable IDs are allowlisted; this is not reflection over arbitrary record fields."},"source":{"line":56,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_schema-fields-1"},{"id":"tmux_schema:normalize/2","publicId":"tmux_schema:normalize/2","qualifiedName":"tmux_schema:normalize/2","name":"normalize/2","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"normalize/2\n-spec normalize(entity(), map()) ->\n {ok, map()} | {error, error_detail()}.","references":[{"start":28,"end":34,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":38,"end":41,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":72,"end":75,"target":"t:erlang:map/0"},{"start":89,"end":101,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Entity","type":"entity()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_schema:entity/0"}]},{"name":"Input","type":"map()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"}]}],"returns":"{ok, map()} | {error, error_detail()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"start":22,"end":34,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate a domain-field map and normalize its scalar observations, retaining not_loaded/unavailable distinctly and deriving schema-defined values. Performs no I/O; constructors and action boundaries still validate records."},"source":{"line":93,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_schema-normalize-2"},{"id":"tmux_schema:operators/1","publicId":"tmux_schema:operators/1","qualifiedName":"tmux_schema:operators/1","name":"operators/1","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"operators/1\n-spec operators(#{type := value_type(),\n nullable := boolean(),\n atom() => term()}) ->\n [operator()].","references":[{"start":38,"end":48,"target":"t:tmux_schema:value_type/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":82,"end":89,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":111,"end":115,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":121,"end":125,"target":"t:erlang:term/0"},{"start":153,"end":161,"target":"t:tmux_schema:operator/0"}],"params":[{"name":"Argument1","type":"#{type := value_type(),\n nullable := boolean(),\n atom() => term()}","typeReferences":[{"start":10,"end":20,"target":"t:tmux_schema:value_type/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":48,"end":55,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":71,"end":75,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":81,"end":85,"target":"t:erlang:term/0"}]}],"returns":"[operator()]","returnsReferences":[{"start":1,"end":9,"target":"t:tmux_schema:operator/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the permitted scalar operators for this field type and nullability. The generated field reference uses this same validator. Performs no I/O."},"source":{"line":149,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_schema-operators-1"},{"id":"tmux_schema:relations/1","publicId":"tmux_schema:relations/1","qualifiedName":"tmux_schema:relations/1","name":"relations/1","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"relations(Entity)\n-spec relations(entity()) ->\n {ok, #{atom() => relation_metadata()}} |\n {error, error_detail()}.","references":[{"start":34,"end":40,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":73,"end":77,"target":"t:erlang:atom/0"},{"start":83,"end":100,"target":"t:tmux_schema:relation_metadata/0"},{"start":134,"end":146,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Entity","type":"entity()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_schema:entity/0"}]}],"returns":"{ok, #{atom() => relation_metadata()}} |\n {error, error_detail()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":7,"end":11,"target":"t:erlang:atom/0"},{"start":17,"end":34,"target":"t:tmux_schema:relation_metadata/0"},{"start":59,"end":71,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return generated relationship metadata, including target entities and one/many cardinality. Performs no I/O."},"source":{"line":67,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_schema-relations-1"},{"id":"tmux_schema:value/2","publicId":"tmux_schema:value/2","qualifiedName":"tmux_schema:value/2","name":"value/2","namespace":"tmux_schema","parent":"tmux_schema","kind":"function","modifiers":[],"signatures":[{"raw":"value/2\n-spec value(map(), term()) ->\n {ok, term()} | {error, error_detail()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":27,"end":31,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":58,"end":62,"target":"t:erlang:term/0"},{"start":76,"end":88,"target":"t:tmux_schema:error_detail/0"}],"params":[{"name":"Argument1","type":"map()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":0,"end":3,"target":"t:erlang:map/0"}]},{"name":"Argument2","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]}],"returns":"{ok, term()} | {error, error_detail()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":5,"end":9,"target":"t:erlang:term/0"},{"start":23,"end":35,"target":"t:tmux_schema:error_detail/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate and normalize one value against generated field metadata. Integral JSON numbers obey the exact shared integer range and field bounds; text is validated UTF-8, while bytes remain arbitrary binaries. Performs no I/O."},"source":{"line":109,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_schema-value-2"},{"id":"t:tmux_schema:entity/0","publicId":"t:tmux_schema:entity/0","qualifiedName":"tmux_schema:entity/0","name":"entity/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type entity() :: session | window | window_link | pane.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"The built-in tmux graph entities; window_link represents a session membership."},"source":{"line":18,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_schema-entity-0"},{"id":"t:tmux_schema:error_detail/0","publicId":"t:tmux_schema:error_detail/0","qualifiedName":"tmux_schema:error_detail/0","name":"error_detail/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type error_detail() ::\n #{code := atom(),\n path := [term()],\n atom() => term()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":44,"end":48,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":73,"end":77,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":94,"end":98,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":104,"end":108,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Structured boundary validation errors with a code and input path."},"source":{"line":22,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_schema-error_detail-0"},{"id":"t:tmux_schema:field_metadata/0","publicId":"t:tmux_schema:field_metadata/0","qualifiedName":"tmux_schema:field_metadata/0","name":"field_metadata/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type field_metadata() ::\n #{type := value_type(),\n wire := binary(),\n stable := binary(),\n required := boolean(),\n nullable := boolean(),\n format => binary(),\n capture_codec => escaped_columns_v1,\n minimum => integer()}.","params":[],"references":[{"start":46,"end":56,"target":"t:tmux_schema:value_type/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":80,"end":86,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":112,"end":118,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":146,"end":153,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":181,"end":188,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":214,"end":220,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":296,"end":303,"target":"t:erlang:integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Generated field contract. stable is a versioned portable identity; wire is the JSON key. required controls construction and nullable permits known absence. format is present only for directly observed tmux fields; derived fields omit it. capture_codec identifies an admitted batched source encoding; its absence selects isolated reads for that entity. minimum tightens an integer field's lower bound. Field names themselves are the keys returned by `fields/1`, not this map's wire or stable values."},"source":{"line":35,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_schema-field_metadata-0"},{"id":"t:tmux_schema:operator/0","publicId":"t:tmux_schema:operator/0","qualifiedName":"tmux_schema:operator/0","name":"operator/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type operator() ::\n equals | 'not' | in | not_in | lt | lte | gt |\n gte | contains | starts_with | ends_with | regex |\n present.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validated scalar operators. The field's type and nullability restrict this set."},"source":{"line":46,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_schema-operator-0"},{"id":"t:tmux_schema:relation_metadata/0","publicId":"t:tmux_schema:relation_metadata/0","qualifiedName":"tmux_schema:relation_metadata/0","name":"relation_metadata/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type relation_metadata() ::\n #{kind := one | many,\n target := entity(),\n wire := binary(),\n stable := binary()}.","params":[],"references":[{"start":83,"end":89,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":113,"end":119,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":145,"end":151,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Generated relationship contract: kind is one or many; target names the related entity. wire and stable have the same roles as in `t:field_metadata/0`. Completeness belongs to snapshot coverage, not this static schema."},"source":{"line":43,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_schema-relation_metadata-0"},{"id":"t:tmux_schema:value_type/0","publicId":"t:tmux_schema:value_type/0","qualifiedName":"tmux_schema:value_type/0","name":"value_type/0","namespace":"tmux_schema","parent":"tmux_schema","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type value_type() ::\n session_id | window_id | pane_id | boolean |\n uint | integer | text | bytes.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Scalar categories used by normalization and operator validation; IDs remain binaries."},"source":{"line":24,"file":"apps/libtmux_erlang/src/tmux_schema.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_schema-value_type-0"},{"id":"tmux_scope","publicId":"tmux_scope","qualifiedName":"tmux_scope","name":"tmux_scope","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Run synchronous work and cleanup while preserving both outcomes.","body":"Use `run/2` around a resource whose handle remains in the caller's scope.\nUse `run_or_error/2` for nested scopes or fail-fast programs that need the\ncallback's value directly and raise when cleanup fails.\n`tmux_server:with_server/2` and `tmux_server:with_owned/2` also acquire their\nresources and add recovery handles when cleanup fails. This module owns no\nprocess, timeout or retry policy; the supplied functions own those contracts."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_scope.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_scope"},{"id":"tmux_scope:run/2","publicId":"tmux_scope:run/2","qualifiedName":"tmux_scope:run/2","name":"run/2","namespace":"tmux_scope","parent":"tmux_scope","kind":"function","modifiers":[],"signatures":[{"raw":"run(Function, Cleanup)\n-spec run(fun(() -> Value),\n fun(() -> ok | {error, term()})) ->\n {ok, Value} | {error, failure()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":84,"end":88,"target":"t:erlang:term/0"},{"start":132,"end":139,"target":"t:tmux_scope:failure/0"}],"params":[{"name":"Function","type":"fun(() -> Value)","typeReferences":[]},{"name":"Cleanup","type":"fun(() -> ok | {error, term()})","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":23,"end":27,"target":"t:erlang:term/0"}]}],"returns":"{ok, Value} | {error, failure()}","returnsReferences":[{"start":22,"end":29,"target":"t:tmux_scope:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Run a callback, then attempt cleanup once, synchronously in the calling process. This function performs only the I/O supplied by those functions. The callback has no library duration timer. Abrupt uncatchable caller death remains subject to each resource's existing ownership policy.","body":"Only ok proves cleanup success. Normalize resource-specific successful replies\ninside the cleanup function. With successful cleanup, return {ok, Value} or\nre-raise the original callback exception with its reason and stack. A callback\nreturning an error tuple is an ordinary value. Cleanup failure instead returns\n{error, Failure} with `t:failure/0`, preserving both outcomes. An unexpected\ncleanup return is recorded as invalid_cleanup_result.\n\nHandle an inner scope's error explicitly when nesting scopes. Otherwise it is\nan ordinary outer callback value. Keep resource handles for recovery; this\nfunction does not infer ownership or retry cleanup.","examples":[{"lang":"erlang","code":"1> tmux_scope:run(fun() -> done end, fun() -> ok end).\n{ok,done}\n2> tmux_scope:run(fun() -> done end, fun() -> {error, enoent} end).\n{error,#{code => scope_cleanup_failed,\n primary => {ok,done},cleanup => {error,enoent}}}\n3> Work = fun() -> error(build_failed) end, ok.\nok\n4> {error, F} = tmux_scope:run(Work, fun() -> {error, busy} end), ok.\nok\n5> {exception, error, build_failed, [_ | _]} = maps:get(primary, F), ok.\nok\n6> maps:get(cleanup, F).\n{error,busy}"}]},"source":{"line":61,"file":"apps/libtmux_erlang/src/tmux_scope.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_scope-run-2"},{"id":"tmux_scope:run_or_error/2","publicId":"tmux_scope:run_or_error/2","qualifiedName":"tmux_scope:run_or_error/2","name":"run_or_error/2","namespace":"tmux_scope","parent":"tmux_scope","kind":"function","modifiers":[],"signatures":[{"raw":"run_or_error(Function, Cleanup)\n-spec run_or_error(fun(() -> Value),\n fun(() -> ok | {error, term()})) ->\n Value.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":111,"end":115,"target":"t:erlang:term/0"}],"params":[{"name":"Function","type":"fun(() -> Value)","typeReferences":[]},{"name":"Cleanup","type":"fun(() -> ok | {error, term()})","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":23,"end":27,"target":"t:erlang:term/0"}]}],"returns":"Value","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Run work and cleanup with `run/2`, returning the callback value directly. Raises {scope_cleanup_failed, Failure} if cleanup fails, retaining both outcomes in `t:failure/0`. With successful cleanup, callback exceptions retain their original reason and stack. Nested raising scopes propagate an inner failure through the outer scope while still attempting outer cleanup."},"source":{"line":84,"file":"apps/libtmux_erlang/src/tmux_scope.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_scope-run_or_error-2"},{"id":"t:tmux_scope:exception/0","publicId":"t:tmux_scope:exception/0","qualifiedName":"tmux_scope:exception/0","name":"exception/0","namespace":"tmux_scope","parent":"tmux_scope","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type exception() ::\n {exception,\n error | exit | throw,\n term(),\n erlang:stacktrace()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":87,"end":91,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:stacktrace/0","project":"Erlang/OTP"},"start":106,"end":123,"target":"t:erlang:stacktrace/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"The original exception class, reason and stack, retained as evidence."},"source":{"line":16,"file":"apps/libtmux_erlang/src/tmux_scope.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_scope-exception-0"},{"id":"t:tmux_scope:failure/0","publicId":"t:tmux_scope:failure/0","qualifiedName":"tmux_scope:failure/0","name":"failure/0","namespace":"tmux_scope","parent":"tmux_scope","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type failure() ::\n #{code := scope_cleanup_failed,\n primary := {ok, term()} | exception(),\n cleanup := {error, term()} | exception(),\n atom() => term()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":89,"end":93,"target":"t:erlang:term/0"},{"start":99,"end":108,"target":"t:tmux_scope:exception/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":143,"end":147,"target":"t:erlang:term/0"},{"start":153,"end":162,"target":"t:tmux_scope:exception/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":178,"end":182,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":188,"end":192,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Both outcomes when cleanup failed. primary contains the callback's ordinary return or exception; cleanup contains its separate error or exception. Resource-specific wrappers may add recovery handles to this map."},"source":{"line":22,"file":"apps/libtmux_erlang/src/tmux_scope.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_scope-failure-0"},{"id":"tmux_select","publicId":"tmux_select","qualifiedName":"tmux_select","name":"tmux_select","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Filter ordered captured rows without tmux I/O.","body":"Use `panes/1`, `windows/1`,\n`window_links/1` or `sessions/1` with a\n`m:tmux_snapshot` to retain graph coverage. `from_list/2`\npreserves supplied order, duplicates and row origins; it establishes only\nfields present in every row and loads no relationships. Filtering and\n`take/2` retain the original coverage even if no rows remain.\n\n`where/2` accepts map criteria or a `t:tmux_filter:t/0` portable\nfilter. `filter/2` accepts a unary Boolean function, whose\nexceptions propagate. Cardinality criteria validate the whole expression and\nits coverage before stopping at sufficient evidence. Selections are opaque\nvalues; use `to_list/1` for functions in `m:lists`.\n\nA snapshot-backed selection retains the complete captured graph, including\nrows removed by filtering. After relationship evaluation, store the result of\n`to_list/1` and release other snapshot and selection references to allow that\ncontext to be collected. Row extraction preserves the supplied field binaries;\ncaller-created subbinaries can still retain their backing allocation."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select"},{"id":"tmux_select:count/1","publicId":"tmux_select:count/1","qualifiedName":"tmux_select:count/1","name":"count/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"count(Selection)\n-spec count(t()) -> non_neg_integer().","references":[{"start":29,"end":30,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":37,"end":52,"target":"t:erlang:non_neg_integer/0"}],"params":[{"name":"Selection","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"non_neg_integer()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":0,"end":15,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the current materialized row count without I/O."},"source":{"line":290,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-count-1"},{"id":"tmux_select:count/2","publicId":"tmux_select:count/2","qualifiedName":"tmux_select:count/2","name":"count/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"count/2\n-spec count(criteria(), t()) -> non_neg_integer().","references":[{"start":20,"end":28,"target":"t:tmux_select:criteria/0"},{"start":32,"end":33,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":40,"end":55,"target":"t:erlang:non_neg_integer/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"non_neg_integer()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":0,"end":15,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the exact local match count after full criteria and coverage validation. Performs no I/O."},"source":{"line":296,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-count-2"},{"id":"tmux_select:exists/1","publicId":"tmux_select:exists/1","qualifiedName":"tmux_select:exists/1","name":"exists/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"exists/1\n-spec exists(t()) -> boolean().","references":[{"start":22,"end":23,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":30,"end":37,"target":"t:erlang:boolean/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"boolean()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return whether this materialized selection is nonempty, without I/O."},"source":{"line":279,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-exists-1"},{"id":"tmux_select:exists/2","publicId":"tmux_select:exists/2","qualifiedName":"tmux_select:exists/2","name":"exists/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"exists(Criteria, Selection)\n-spec exists(criteria(), t()) -> boolean().","references":[{"start":41,"end":49,"target":"t:tmux_select:criteria/0"},{"start":53,"end":54,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":61,"end":68,"target":"t:erlang:boolean/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"boolean()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate all criteria/coverage first, then stop at the first local match. Performs no I/O; an empty selection does not bypass validation."},"source":{"line":285,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-exists-2"},{"id":"tmux_select:filter/2","publicId":"tmux_select:filter/2","qualifiedName":"tmux_select:filter/2","name":"filter/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"filter/2\n-spec filter(fun((Row) -> boolean()), t(Row)) -> t(Row)\n when Row :: tmux_model:row().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":35,"end":42,"target":"t:erlang:boolean/0"},{"start":47,"end":48,"target":"t:tmux_select:t/1"},{"start":58,"end":59,"target":"t:tmux_select:t/1"},{"start":93,"end":107,"target":"t:tmux_model:row/0"}],"params":[{"name":"Predicate","type":"fun((Row) -> boolean())","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":13,"end":20,"target":"t:erlang:boolean/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"t(Row)","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Apply an ordinary unary Boolean function locally, preserving row order and context. Non-Booleans and callback failures propagate; they are not false matches. This is executable application code, not portable filter data."},"source":{"line":142,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-filter-2"},{"id":"tmux_select:first/1","publicId":"tmux_select:first/1","qualifiedName":"tmux_select:first/1","name":"first/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"first/1\n-spec first(t(Row)) -> {ok, Row} | none\n when Row :: tmux_model:row().","references":[{"start":20,"end":21,"target":"t:tmux_select:t/1"},{"start":75,"end":89,"target":"t:tmux_model:row/0"}],"params":[{"name":"Argument1","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row} | none","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the first current row or none. Additional matches are allowed. Performs no I/O."},"source":{"line":219,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-first-1"},{"id":"tmux_select:first/2","publicId":"tmux_select:first/2","qualifiedName":"tmux_select:first/2","name":"first/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"first(Criteria, Selection)\n-spec first(criteria(), t(Row)) -> {ok, Row} | none\n when Row :: tmux_model:row().","references":[{"start":39,"end":47,"target":"t:tmux_select:criteria/0"},{"start":51,"end":52,"target":"t:tmux_select:t/1"},{"start":106,"end":120,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row} | none","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate criteria and coverage, then stop at the first local match. Returns none when no row matches; performs no I/O."},"source":{"line":226,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-first-2"},{"id":"tmux_select:fold/3","publicId":"tmux_select:fold/3","qualifiedName":"tmux_select:fold/3","name":"fold/3","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"fold/3\n-spec fold(fun((Row, Acc) -> Acc), Acc, t(Row)) -> Acc\n when Row :: tmux_model:row().","references":[{"start":47,"end":48,"target":"t:tmux_select:t/1"},{"start":88,"end":102,"target":"t:tmux_model:row/0"}],"params":[{"name":"Function","type":"fun((Row, Acc) -> Acc)","typeReferences":[]},{"name":"Accumulator","type":"Acc","typeReferences":[]},{"name":"Argument3","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"Acc","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Fold over current rows in order without I/O, using the function, accumulator, selection argument order. Arbitrary results are ordinary Erlang values."},"source":{"line":179,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-fold-3"},{"id":"tmux_select:from_list/2","publicId":"tmux_select:from_list/2","qualifiedName":"tmux_select:from_list/2","name":"from_list/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"from_list(Entity, Rows)\n-spec from_list(tmux_schema:entity(), [Row]) -> t(Row)\n when Row :: tmux_model:row().","references":[{"start":40,"end":58,"target":"t:tmux_schema:entity/0"},{"start":72,"end":73,"target":"t:tmux_select:t/1"},{"start":110,"end":124,"target":"t:tmux_model:row/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Rows","type":"[Row]","typeReferences":[]}],"returns":"t(Row)","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate an ordinary list without rebinding, reordering or deduplicating it.","examples":[{"lang":"erlang","code":"1> {ok, P} = tmux_model:pane(#{id => <<\"%1\">>, width => 120}), ok.\nok\n2> S = tmux_select:from_list(pane, [P, P]), ok.\nok\n3> tmux_select:size(tmux_select:where(#{width => #{gte => 120}}, S)).\n2\n4> tmux_select:one(S).\n{error,{multiple_matches,#{at_least => 2}}}"}]},"source":{"line":99,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-from_list-2"},{"id":"tmux_select:matching/2","publicId":"tmux_select:matching/2","qualifiedName":"tmux_select:matching/2","name":"matching/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"matching/2\n-spec matching({module(), term()}, t(Row)) ->\n {ok, t(Row)} | {error, term()}\n when Row :: tmux_model:row().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:module/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:module/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":37,"end":41,"target":"t:erlang:term/0"},{"start":46,"end":47,"target":"t:tmux_select:t/1"},{"start":80,"end":81,"target":"t:tmux_select:t/1"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":98,"end":102,"target":"t:erlang:term/0"},{"start":136,"end":150,"target":"t:tmux_model:row/0"}],"params":[{"name":"Argument1","type":"{module(), term()}","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:module/0","project":"Erlang/OTP"},"start":1,"end":7,"target":"t:erlang:module/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":11,"end":15,"target":"t:erlang:term/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, t(Row)} | {error, term()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_select:t/1"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":23,"end":27,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Prepare a trusted behaviour once, then apply its Boolean predicate.","body":"Uses `c:tmux_matcher:prepare/2`; preparation failure returns {error, Detail}.\nExceptions in either callback propagate. A matcher requires a captured\nsnapshot; a `from_list/2` selection returns matcher_requires_snapshot. The\napplication chooses Module."},"source":{"line":154,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-matching-2"},{"id":"tmux_select:one/1","publicId":"tmux_select:one/1","qualifiedName":"tmux_select:one/1","name":"one/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one/1\n-spec one(t(Row)) -> {ok, Row} | cardinality_error()\n when Row :: tmux_model:row().","references":[{"start":16,"end":17,"target":"t:tmux_select:t/1"},{"start":39,"end":56,"target":"t:tmux_select:cardinality_error/0"},{"start":84,"end":98,"target":"t:tmux_model:row/0"}],"params":[{"name":"Argument1","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row} | cardinality_error()","returnsReferences":[{"start":12,"end":29,"target":"t:tmux_select:cardinality_error/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the sole current row or a no_match/multiple_matches error. Ambiguity reports at_least = 2 rather than computing a needless exact count."},"source":{"line":233,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-one-1"},{"id":"tmux_select:one/2","publicId":"tmux_select:one/2","qualifiedName":"tmux_select:one/2","name":"one/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one(Criteria, Selection)\n-spec one(criteria(), t(Row)) ->\n {ok, Row} | cardinality_error()\n when Row :: tmux_model:row().","references":[{"start":35,"end":43,"target":"t:tmux_select:criteria/0"},{"start":47,"end":48,"target":"t:tmux_select:t/1"},{"start":83,"end":100,"target":"t:tmux_select:cardinality_error/0"},{"start":128,"end":142,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row} | cardinality_error()","returnsReferences":[{"start":12,"end":29,"target":"t:tmux_select:cardinality_error/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate criteria and coverage, then stop after enough local matches to establish cardinality. Returns a tagged cardinality result; performs no I/O."},"source":{"line":241,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-one-2"},{"id":"tmux_select:one_or_error/1","publicId":"tmux_select:one_or_error/1","qualifiedName":"tmux_select:one_or_error/1","name":"one_or_error/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one_or_error(Selection)\n-spec one_or_error(t(Row)) -> Row\n when Row :: tmux_model:row().","references":[{"start":43,"end":44,"target":"t:tmux_select:t/1"},{"start":92,"end":106,"target":"t:tmux_model:row/0"}],"params":[{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"Row","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the sole row directly, raising on zero or multiple matches. Use `one/1` for tagged cardinality errors."},"source":{"line":262,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-one_or_error-1"},{"id":"tmux_select:one_or_error/2","publicId":"tmux_select:one_or_error/2","qualifiedName":"tmux_select:one_or_error/2","name":"one_or_error/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one_or_error(Criteria, Selection)\n-spec one_or_error(criteria(), t(Row)) -> Row\n when Row :: tmux_model:row().","references":[{"start":53,"end":61,"target":"t:tmux_select:criteria/0"},{"start":65,"end":66,"target":"t:tmux_select:t/1"},{"start":114,"end":128,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"Row","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Filter locally with complete validation, then return the sole row directly. Raises on zero or multiple matches; performs no I/O."},"source":{"line":273,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-one_or_error-2"},{"id":"tmux_select:one_or_none/1","publicId":"tmux_select:one_or_none/1","qualifiedName":"tmux_select:one_or_none/1","name":"one_or_none/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one_or_none(Selection)\n-spec one_or_none(t(Row)) ->\n {ok, Row | none} | cardinality_error()\n when Row :: tmux_model:row().","references":[{"start":41,"end":42,"target":"t:tmux_select:t/1"},{"start":92,"end":109,"target":"t:tmux_select:cardinality_error/0"},{"start":145,"end":159,"target":"t:tmux_model:row/0"}],"params":[{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row | none} | cardinality_error()","returnsReferences":[{"start":19,"end":36,"target":"t:tmux_select:cardinality_error/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the sole current row, {ok, none} on absence, or a multiple-match error. Performs no I/O."},"source":{"line":248,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-one_or_none-1"},{"id":"tmux_select:one_or_none/2","publicId":"tmux_select:one_or_none/2","qualifiedName":"tmux_select:one_or_none/2","name":"one_or_none/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"one_or_none(Criteria, Selection)\n-spec one_or_none(criteria(), t(Row)) ->\n {ok, Row | none} | cardinality_error()\n when Row :: tmux_model:row().","references":[{"start":51,"end":59,"target":"t:tmux_select:criteria/0"},{"start":63,"end":64,"target":"t:tmux_select:t/1"},{"start":114,"end":131,"target":"t:tmux_select:cardinality_error/0"},{"start":167,"end":181,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, Row | none} | cardinality_error()","returnsReferences":[{"start":19,"end":36,"target":"t:tmux_select:cardinality_error/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate local criteria and return one row or known absence. A second match is an explicit ambiguity error; performs no I/O."},"source":{"line":255,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-one_or_none-2"},{"id":"tmux_select:panes/1","publicId":"tmux_select:panes/1","qualifiedName":"tmux_select:panes/1","name":"panes/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"panes(Snapshot)\n-spec panes(tmux_snapshot:t()) -> t(tmux_model:pane()).","references":[{"start":28,"end":43,"target":"t:tmux_snapshot:t/0"},{"start":50,"end":51,"target":"t:tmux_select:t/1"},{"start":52,"end":67,"target":"t:tmux_model:pane/0"}],"params":[{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"t(tmux_model:pane())","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"},{"start":2,"end":17,"target":"t:tmux_model:pane/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select captured physical panes while retaining snapshot graph and coverage. Performs no I/O and preserves the snapshot's deterministic order."},"source":{"line":64,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-panes-1"},{"id":"tmux_select:sessions/1","publicId":"tmux_select:sessions/1","qualifiedName":"tmux_select:sessions/1","name":"sessions/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"sessions(Snapshot)\n-spec sessions(tmux_snapshot:t()) ->\n t(tmux_model:session()).","references":[{"start":34,"end":49,"target":"t:tmux_snapshot:t/0"},{"start":74,"end":75,"target":"t:tmux_select:t/1"},{"start":76,"end":94,"target":"t:tmux_model:session/0"}],"params":[{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"t(tmux_model:session())","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"},{"start":2,"end":20,"target":"t:tmux_model:session/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select captured sessions with their relationship and coverage context. Performs no I/O."},"source":{"line":82,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-sessions-1"},{"id":"tmux_select:size/1","publicId":"tmux_select:size/1","qualifiedName":"tmux_select:size/1","name":"size/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"size/1\n-spec size(t()) -> non_neg_integer().","references":[{"start":18,"end":19,"target":"t:tmux_select:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":26,"end":41,"target":"t:erlang:non_neg_integer/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"non_neg_integer()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":0,"end":15,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the cached number of materialized rows in this selection without traversing tmux or re-evaluating criteria."},"source":{"line":192,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-size-1"},{"id":"tmux_select:summary/1","publicId":"tmux_select:summary/1","qualifiedName":"tmux_select:summary/1","name":"summary/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"summary/1\n-spec summary(t()) -> summary().","references":[{"start":24,"end":25,"target":"t:tmux_select:t/0"},{"start":32,"end":39,"target":"t:tmux_select:summary/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/0"}]}],"returns":"summary()","returnsReferences":[{"start":0,"end":7,"target":"t:tmux_select:summary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return a compact Erlang diagnostic map with entity, size, capture identity, interval and coverage. Fetched queries include candidate/attempt information. Opaque snapshot references make this a diagnostic value, not a wire format."},"source":{"line":200,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-summary-1"},{"id":"tmux_select:take/2","publicId":"tmux_select:take/2","qualifiedName":"tmux_select:take/2","name":"take/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"take/2\n-spec take(non_neg_integer(), t(Row)) -> t(Row)\n when Row :: tmux_model:row().","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":18,"end":33,"target":"t:erlang:non_neg_integer/0"},{"start":37,"end":38,"target":"t:tmux_select:t/1"},{"start":48,"end":49,"target":"t:tmux_select:t/1"},{"start":81,"end":95,"target":"t:tmux_model:row/0"}],"params":[{"name":"Count","type":"non_neg_integer()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":0,"end":15,"target":"t:erlang:non_neg_integer/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"t(Row)","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Keep the first N rows and retain the original observation and coverage. Performs no I/O; taking a subset cannot establish missing field coverage."},"source":{"line":185,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-take-2"},{"id":"tmux_select:to_list/1","publicId":"tmux_select:to_list/1","qualifiedName":"tmux_select:to_list/1","name":"to_list/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"to_list/1\n-spec to_list(t(Row)) -> [Row] when Row :: tmux_model:row().","references":[{"start":24,"end":25,"target":"t:tmux_select:t/1"},{"start":53,"end":67,"target":"t:tmux_model:row/0"}],"params":[{"name":"Argument1","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"[Row]","returnsReferences":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the current ordered rows as an ordinary Erlang list without I/O. Use list functions or comprehensions for transformations to other value types. Returns the stored rows without copying their binary fields. Keeping only the list allows the selection's snapshot context to be collected; other references can still keep that context alive."},"source":{"line":173,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-to_list-1"},{"id":"tmux_select:try_where/2","publicId":"tmux_select:try_where/2","qualifiedName":"tmux_select:try_where/2","name":"try_where/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"try_where/2\n-spec try_where(criteria(), t(Row)) ->\n {ok, t(Row)} | {error, map()}\n when Row :: tmux_model:row().","references":[{"start":28,"end":36,"target":"t:tmux_select:criteria/0"},{"start":40,"end":41,"target":"t:tmux_select:t/1"},{"start":75,"end":76,"target":"t:tmux_select:t/1"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":93,"end":96,"target":"t:erlang:map/0"},{"start":131,"end":145,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"{ok, t(Row)} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_select:t/1"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":23,"end":26,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Apply the same local criteria and coverage checks as `where/2`, returning tagged validation or evaluation errors. It does not catch arbitrary application callback exceptions and never performs tmux I/O."},"source":{"line":129,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-try_where-2"},{"id":"tmux_select:where/2","publicId":"tmux_select:where/2","qualifiedName":"tmux_select:where/2","name":"where/2","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"where(Criteria, Selection)\n-spec where(criteria(), t(Row)) -> t(Row)\n when Row :: tmux_model:row().","references":[{"start":39,"end":47,"target":"t:tmux_select:criteria/0"},{"start":51,"end":52,"target":"t:tmux_select:t/1"},{"start":62,"end":63,"target":"t:tmux_select:t/1"},{"start":96,"end":110,"target":"t:tmux_model:row/0"}],"params":[{"name":"Criteria","type":"criteria()","typeReferences":[{"start":0,"end":8,"target":"t:tmux_select:criteria/0"}]},{"name":"Selection","type":"t(Row)","typeReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"returns":"t(Row)","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Validate portable criteria and coverage, then preserve matching rows in order. Performs no I/O. Malformed trusted criteria raise bad_filter; missing coverage and runtime evaluation failures remain distinct exceptions. Use `try_where/2` for tagged library errors."},"source":{"line":117,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-where-2"},{"id":"tmux_select:window_links/1","publicId":"tmux_select:window_links/1","qualifiedName":"tmux_select:window_links/1","name":"window_links/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"window_links(Snapshot)\n-spec window_links(tmux_snapshot:t()) ->\n t(tmux_model:window_link()).","references":[{"start":42,"end":57,"target":"t:tmux_snapshot:t/0"},{"start":86,"end":87,"target":"t:tmux_select:t/1"},{"start":88,"end":110,"target":"t:tmux_model:window_link/0"}],"params":[{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"t(tmux_model:window_link())","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"},{"start":2,"end":24,"target":"t:tmux_model:window_link/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select all captured session memberships, retaining repeated physical windows and session-relative indexes. Performs no I/O."},"source":{"line":76,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-window_links-1"},{"id":"tmux_select:windows/1","publicId":"tmux_select:windows/1","qualifiedName":"tmux_select:windows/1","name":"windows/1","namespace":"tmux_select","parent":"tmux_select","kind":"function","modifiers":[],"signatures":[{"raw":"windows(Snapshot)\n-spec windows(tmux_snapshot:t()) -> t(tmux_model:window()).","references":[{"start":32,"end":47,"target":"t:tmux_snapshot:t/0"},{"start":54,"end":55,"target":"t:tmux_select:t/1"},{"start":56,"end":73,"target":"t:tmux_model:window/0"}],"params":[{"name":"Snapshot","type":"tmux_snapshot:t()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_snapshot:t/0"}]}],"returns":"t(tmux_model:window())","returnsReferences":[{"start":0,"end":1,"target":"t:tmux_select:t/1"},{"start":2,"end":19,"target":"t:tmux_model:window/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select unique captured physical windows with their complete graph context. Performs no I/O; session memberships remain separate window-link rows."},"source":{"line":70,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_select-windows-1"},{"id":"t:tmux_select:cardinality_error/0","publicId":"t:tmux_select:cardinality_error/0","qualifiedName":"tmux_select:cardinality_error/0","name":"cardinality_error/0","namespace":"tmux_select","parent":"tmux_select","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type cardinality_error() ::\n {error,\n no_match | {multiple_matches, #{at_least := 2}}}.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"supporting","source":{"line":47,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_select-cardinality_error-0"},{"id":"t:tmux_select:criteria/0","publicId":"t:tmux_select:criteria/0","qualifiedName":"tmux_select:criteria/0","name":"criteria/0","namespace":"tmux_select","parent":"tmux_select","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type criteria() :: map() | tmux_filter:t().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"},{"start":28,"end":41,"target":"t:tmux_filter:t/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"supporting","source":{"line":46,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_select-criteria-0"},{"id":"t:tmux_select:summary/0","publicId":"t:tmux_select:summary/0","qualifiedName":"tmux_select:summary/0","name":"summary/0","namespace":"tmux_select","parent":"tmux_select","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type summary() ::\n #{entity := tmux_schema:entity(),\n size := non_neg_integer(),\n snapshot_id := reference() | none,\n coverage := tmux_snapshot:entity_coverage(),\n capture_started => integer(),\n capture_finished => integer(),\n time_unit => microsecond,\n query => tmux_snapshot:query_metadata()}.","params":[],"references":[{"start":41,"end":59,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":83,"end":98,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":129,"end":138,"target":"t:erlang:reference/0"},{"start":173,"end":202,"target":"t:tmux_snapshot:entity_coverage/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":237,"end":244,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":280,"end":287,"target":"t:erlang:integer/0"},{"start":350,"end":378,"target":"t:tmux_snapshot:query_metadata/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Compact local inspection. size counts current materialized rows; coverage still describes the original captured context after filtering or take. snapshot_id is none for a list-backed selection. Capture bounds and query diagnostics are included only when that source metadata exists."},"source":{"line":54,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_select-summary-0"},{"id":"t:tmux_select:t/0","publicId":"t:tmux_select:t/0","qualifiedName":"tmux_select:t/0","name":"t/0","namespace":"tmux_select","parent":"tmux_select","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type t() :: t(tmux_model:row()).","params":[],"references":[{"start":13,"end":14,"target":"t:tmux_select:t/1"},{"start":15,"end":29,"target":"t:tmux_model:row/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A selection over schema-defined native domain records."},"source":{"line":45,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_select-t-0"},{"id":"t:tmux_select:t/1","publicId":"t:tmux_select:t/1","qualifiedName":"tmux_select:t/1","name":"t/1","namespace":"tmux_select","parent":"tmux_select","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t(Row).","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Ordered captured rows with observation and coverage context, not an extensible list protocol. The parameter describes the intended row type. OTP 29 Dialyzer can widen generic return variables to their declared bounds; it does not prove every entity relationship through `one/1` or `to_list/1`. Runtime schema, coverage and action checks remain necessary."},"source":{"line":41,"file":"apps/libtmux_erlang/src/tmux_select.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_select-t-1"},{"id":"tmux_server","publicId":"tmux_server","qualifiedName":"tmux_server","name":"tmux_server","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Open tmux endpoints and execute explicit command values.","body":"`open/1` validates an absolute socket path and the\nexecutable/server versions. It never creates a tmux server or attaches a\ncontrol client. Each command rechecks the observed Linux process incarnation\nbefore dispatch. Replacement between that observation and a later client\nconnection remains possible; same_connection requests are rejected until\npersistent dispatch qualifies.\n\n`start_owned/1` creates a separate private daemon and returns an ownership\ntoken for `stop_owned/1`. The [ownership guide](ownership.md) explains caller\ndeath, application shutdown and namespace cleanup.\n\nUse `with_server/2` or `with_owned/2` for a callback scope. They attempt cleanup\nafter its return or exception and preserve both outcomes if cleanup fails.\n\nThe calling process owns the endpoint. `close/1` cancels queued\nwork, retires its one-shot clients and preserves the borrowed server. Cleanup\nfailure remains explicit and keeps the supervised owner alive. Successful close is\nidempotent during the 60-second handle retention period. Separate\n`m:tmux_control` attachments receive an invalidation notice and begin their\nown retirement. Close those attachments explicitly to prove their native\ncleanup. Command results preserve stdout, stderr and status; cancellation\nafter dispatch cannot undo\nremote effects. Clients explicitly select tmux's UTF-8 mode so Unicode and the\nidentity probe's tab do not depend on the caller's locale. Command-specific\nescaping still applies to raw command output.\n\nUse `snapshot/1` to capture a graph for `m:tmux_snapshot` and\n`m:tmux_select`. Use `m:tmux_operation` for non-blocking submission and\nexplicit waits; the [job guide](jobs.md) explains ownership and cleanup.\n\n## What is on here\n\nThis module holds the endpoint handle that tasks on a tmux server start from.\nMost of those tasks are calls in sibling modules, so each group below lists its\ncalls wherever they live.\n\n**Connecting.** `open/1` binds a handle to a daemon that is already running,\nnamed by an absolute socket path, and never starts one. `start_owned/1` starts\nan empty private daemon and returns a separate `t:ownership/0` token with the\nhandle. `status/1`, `version/1` and `origin/1` read the handle's own state\nwithout contacting tmux. `tmux_control:attach/3` attaches a control client to\none captured session; it does not yet submit commands or stream output.\n\n`open/1`, `start_owned/1`, `status/1`, `version/1`, `origin/1`,\n`tmux_control:attach/3`, `t:t/0`, `t:open_options/0`, `t:owned_options/0` and\n`t:state/0`\n\n**Closing and scopes.** `close/1` retires a handle's queued work and one-shot\nclients and leaves a borrowed daemon running; `stop_owned/1` stops an owned\ndaemon and returns ok only once its cleanup is proved. `with_server/2` and\n`with_owned/2` run a callback between opening and closing a borrowed endpoint,\nor between starting and stopping an owned one. A failed cleanup there returns\n`t:scope_failure/0` with the handles needed to retry. `tmux_scope:run/2` pairs\nwork with cleanup for any other resource, and control attachments close with\n`tmux_control:close/1` before the endpoint does.\n\n`close/1`, `stop_owned/1`, `with_server/2`, `with_owned/2`,\n`t:ownership/0`, `t:scope_failure/0`, `tmux_scope:run/2` and\n`tmux_control:close/1`\n\n**Listing everything.** `snapshot/1` captures sessions, physical windows,\nwindow links and panes as one immutable graph, and `snapshot/2` adds capture\nbounds and a `t:hydration/0` strategy. The capture spans several tmux commands\nand is not atomic: it reports the disagreements it detects as\n`inconsistent_capture`. Reading the snapshot afterwards performs no I/O.\n\n- Capture: `snapshot/1`, `snapshot/2`, `t:capture_options/0`, `t:hydration/0`\n and `t:tmux_snapshot:t/0`\n- Read: `tmux_snapshot:sessions/1`, `tmux_snapshot:windows/1`,\n `tmux_snapshot:window_links/1`, `tmux_snapshot:panes/1`,\n `tmux_snapshot:related/3`, `tmux_snapshot:metadata/1` and\n `tmux_snapshot:coverage/1`\n\n**Querying and finding.** `tmux_query:panes/1` and its siblings describe a read\nof this endpoint without performing it. `tmux_query:where/2` narrows the read,\n`tmux_query:explain/1` shows its plan without contacting tmux and\n`tmux_query:fetch/1` runs it. On a snapshot already in hand,\n`tmux_select:where/2` narrows a selection in memory and `tmux_select:one/1`\nreturns the sole row or reports no match or several as errors. `bind/2` re-reads\na row's fields from this server and registers the fresh value, which is how a\ndetached row built with `m:tmux_model` becomes actionable.\n\n- Query: `tmux_query:panes/1`, `tmux_query:windows/1`,\n `tmux_query:window_links/1`, `tmux_query:sessions/1`, `tmux_query:where/2`,\n `tmux_query:limit/2`, `tmux_query:pushdown/2`, `tmux_query:explain/1`,\n `tmux_query:fetch/1` and `tmux_query:fetch/2`\n- Select: `tmux_select:panes/1`, `tmux_select:windows/1`,\n `tmux_select:window_links/1`, `tmux_select:sessions/1`,\n `tmux_select:where/2`, `tmux_select:filter/2`, `tmux_select:one/1`,\n `tmux_select:one_or_none/1`, `tmux_select:first/1`, `tmux_select:exists/1`\n and `tmux_select:count/1`\n- Bind: `bind/2`\n\n**Changing things.** `tmux_session:create/2` creates a session on this\nendpoint, detached by default, and returns its row. `tmux_window:create/2` adds\na window to a session row and `tmux_pane:split/2` splits a pane or window row.\n`tmux_session:select/3` switches one explicitly named attached client to a\nsession. Renaming, killing, resizing, sending input and rearranging act on rows\nthrough the session, window, pane and window-link modules.\n\n`tmux_session:create/2`, `tmux_window:create/2`, `tmux_pane:split/2`,\n`tmux_session:select/2`, `tmux_session:select/3`, `m:tmux_session`,\n`m:tmux_window`, `m:tmux_pane` and `m:tmux_window_link`\n\n**Options and hooks.** `tmux_option:get/3` reads, and `tmux_option:set/3` and\n`tmux_option:unset/2` change, one option in an explicit table. A session,\nwindow or pane row selects its local table; `{server, Server}`,\n`{session_defaults, Server}` and `{window_defaults, Server}` select this\nserver's own table and the two global defaults. `tmux_hook:set/3`,\n`tmux_hook:append/3` and `tmux_hook:clear/2` store hook commands in a local\ntable or a global defaults table, and `tmux_hook:run/2` runs them in an\nexplicit context.\n\n- Options: `tmux_option:get/3`, `tmux_option:get_many/3`,\n `tmux_option:set/3`, `tmux_option:set/4`, `tmux_option:unset/2`,\n `tmux_option:describe/2` and `tmux_option:catalogue/1`\n- Hooks: `tmux_hook:get/3`, `tmux_hook:set/3`, `tmux_hook:append/3`,\n `tmux_hook:clear/2`, `tmux_hook:unset/2` and `tmux_hook:run/2`\n\n**Running commands.** `command/3` runs one validated command value and waits\nfor its result; `t:command_options/0` sets its deadline, output limits and\nstdin. `tmux_command:raw/2` builds a command from a name and arguments, and\n`tmux_command:sequence/1` combines several into one execution that is not\natomic. `tmux_operation:start/3` submits a command without waiting,\n`tmux_operation:await/2` collects its result and `tmux_operation:cancel/1`\ncancels it, though cancellation cannot undo effects already sent to tmux.\n\n`command/3`, `t:command_options/0`, `tmux_command:raw/2`,\n`tmux_command:sequence/1`, `tmux_operation:start/3`, `tmux_operation:await/2`,\n`tmux_operation:status/1` and `tmux_operation:cancel/1`\n\n**Everything else tmux keeps.** `m:tmux_buffer` loads, reads, lists, renames,\ndeletes and pastes named byte buffers. `m:tmux_key` binds and unbinds keys in\nexplicit server key tables. `tmux_command:source_file/2` and\n`tmux_command:wait_for/2` build the commands that load a configuration file and\nthat signal, wait on or lock a wait-for channel; submit them with `command/3`.\n\n- Buffers: `tmux_buffer:load/3`, `tmux_buffer:show/2`, `tmux_buffer:show/3`,\n `tmux_buffer:list/1`, `tmux_buffer:delete/2`, `tmux_buffer:rename/3` and\n `tmux_buffer:paste/3`\n- Key bindings: `tmux_key:bind/3`, `tmux_key:bind/4`, `tmux_key:unbind/2`,\n `tmux_key:unbind/3`, `tmux_key:clear_table/2`, `tmux_key:listing/1` and\n `tmux_key:listing/2`\n- Configuration and waits: `tmux_command:source_file/2` and\n `tmux_command:wait_for/2`"},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server"},{"id":"tmux_server:bind/2","publicId":"tmux_server:bind/2","qualifiedName":"tmux_server:bind/2","name":"bind/2","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"bind(Server, Row)\n-spec bind(t(), tmux_model:row()) ->\n {ok, tmux_model:row()} | {error, map()}.","references":[{"start":29,"end":30,"target":"t:tmux_server:t/0"},{"start":34,"end":48,"target":"t:tmux_model:row/0"},{"start":74,"end":88,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":102,"end":105,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]},{"name":"Row","type":"tmux_model:row()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_model:row/0"}]}],"returns":"{ok, tmux_model:row()} | {error, map()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":33,"end":36,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Explicitly read current fields from this server and register the new value. For sessions, physical windows and panes, the read uses the stable ID and discards the supplied field observations. This explicit call accepts an edited target; ordinary actions require its captured target association to match and reject mismatches before dispatch. The returned row carries a new private observation association; see `m:tmux_model`. It provides no atomic identity check. Window-link binding checks its session/index and expected physical window. A replaced or missing membership returns stale_link. This observed preflight does not make a later action atomic.","body":"Invalid rows are rejected before I/O:","examples":[{"lang":"erlang","code":"1> tmux_server:bind(invalid_server, invalid_row).\n{error,#{code => invalid_row,path => []}}"}]},"source":{"line":466,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-bind-2"},{"id":"tmux_server:close/1","publicId":"tmux_server:close/1","qualifiedName":"tmux_server:close/1","name":"close/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"close(Server)\n-spec close(t()) -> ok | {error, map()}.","references":[{"start":26,"end":27,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":47,"end":50,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Retire this endpoint's operations and one-shot clients, preserving the borrowed tmux server. Returns ok only after their cleanup completes; incomplete cleanup remains an explicit error. Closing an already closed retained handle is idempotent. The initiator controls endpoint lifetime. Separate control attachments are invalidated and asked to retire; use `tmux_control:close/1` before this call to verify those clients' cleanup too."},"source":{"line":383,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-close-1"},{"id":"tmux_server:command/3","publicId":"tmux_server:command/3","qualifiedName":"tmux_server:command/3","name":"command/3","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"command(Server, Command, Options)\n-spec command(t(), tmux_command:t(), command_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":48,"end":49,"target":"t:tmux_server:t/0"},{"start":53,"end":67,"target":"t:tmux_command:t/0"},{"start":71,"end":86,"target":"t:tmux_server:command_options/0"},{"start":115,"end":139,"target":"t:tmux_operation:completed/0"},{"start":170,"end":192,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]},{"name":"Command","type":"tmux_command:t()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_command:t/0"}]},{"name":"Options","type":"command_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_server:command_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Execute one validated command and await its result. Performs I/O. The result preserves stdout, stderr, exit status and cleanup certainty. Use `tmux_operation:start/3` to submit without blocking this caller. A timeout or cancellation cannot reverse effects that may already have reached tmux. Values from domain command builders keep their captured endpoint origin. Another endpoint returns different_owner with submitted = false before any native preflight or execution. Raw commands do not carry that origin."},"source":{"line":368,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-command-3"},{"id":"tmux_server:open/1","publicId":"tmux_server:open/1","qualifiedName":"tmux_server:open/1","name":"open/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"open(Options)\n-spec open(open_options()) -> {ok, t()} | {error, map()}.","references":[{"start":25,"end":37,"target":"t:tmux_server:open_options/0"},{"start":49,"end":50,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":64,"end":67,"target":"t:erlang:map/0"}],"params":[{"name":"Options","type":"open_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_server:open_options/0"}]}],"returns":"{ok, t()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":20,"end":23,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Open a borrowed socket endpoint and start its supervised library owner. The caller owns that handle. This probes the executable, daemon version and observed Linux process incarnation; it never starts a tmux server or attaches a control client. Pass an absolute socket_path and optionally an executable."},"source":{"line":230,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-open-1"},{"id":"tmux_server:origin/1","publicId":"tmux_server:origin/1","qualifiedName":"tmux_server:origin/1","name":"origin/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"origin(Server)\n-spec origin(t()) -> {ok, reference()} | {error, map()}.","references":[{"start":28,"end":29,"target":"t:tmux_server:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":41,"end":50,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":64,"end":67,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, reference()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":5,"end":14,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":28,"end":31,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the registered opaque origin for this open endpoint. The token provides library provenance and generation checks, not authorization against trusted Erlang code. It is not a portable identifier."},"source":{"line":398,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-origin-1"},{"id":"tmux_server:snapshot/1","publicId":"tmux_server:snapshot/1","qualifiedName":"tmux_server:snapshot/1","name":"snapshot/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"snapshot(Server)\n-spec snapshot(t()) ->\n {ok, tmux_snapshot:t()} | {error, map()}.","references":[{"start":32,"end":33,"target":"t:tmux_server:t/0"},{"start":63,"end":78,"target":"t:tmux_snapshot:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":92,"end":95,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, tmux_snapshot:t()} | {error, map()}","returnsReferences":[{"start":5,"end":20,"target":"t:tmux_snapshot:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":34,"end":37,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture a complete immutable graph with default capture limits. Performs I/O. See `snapshot/2` for bounds, consistency and conflict errors."},"source":{"line":413,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-snapshot-1"},{"id":"tmux_server:snapshot/2","publicId":"tmux_server:snapshot/2","qualifiedName":"tmux_server:snapshot/2","name":"snapshot/2","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"snapshot(Server, Options)\n-spec snapshot(t(), capture_options()) ->\n {ok, tmux_snapshot:t()} | {error, map()}.","references":[{"start":41,"end":42,"target":"t:tmux_server:t/0"},{"start":46,"end":61,"target":"t:tmux_server:capture_options/0"},{"start":91,"end":106,"target":"t:tmux_snapshot:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":120,"end":123,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]},{"name":"Options","type":"capture_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_server:capture_options/0"}]}],"returns":"{ok, tmux_snapshot:t()} | {error, map()}","returnsReferences":[{"start":5,"end":20,"target":"t:tmux_snapshot:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":34,"end":37,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture the server's sessions, physical windows, window links and panes.","body":"This performs explicit I/O and records each command's observation interval.\nIdentity scans bracket field reads; detected topology or value disagreements\nreturn inconsistent_capture. Changes between reads can remain undetected,\nincluding changes followed by a reversal. Atomic capture is unsupported.\n\nOptions are consistency (observed only), deadline_ms (default 2500, maximum\n600000), max_rows (4096, maximum 65536 raw observations per scan and aggregate\nspine) and max_bytes (8 MiB, maximum 64 MiB total stdout across capture\ncommands). Repeated memberships count before deduplication. The\n`t:hydration/0` strategy defaults to batched. Each command is limited to 1 MiB;\nisolated hydration distributes larger entity output across individual fields.\nThese are data limits, not a VM heap limit. Capturing performs no retry. Local\nreads of the resulting value do no I/O. `tmux_snapshot:metadata/1` records the\nstrategy and actual source calls.\n\nUnsupported consistency is rejected before contacting a server:","examples":[{"lang":"erlang","code":"1> tmux_server:snapshot(invalid_server, #{consistency => atomic}).\n{error,#{code => unsupported_consistency}}"}]},"source":{"line":441,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-snapshot-2"},{"id":"tmux_server:start_owned/1","publicId":"tmux_server:start_owned/1","qualifiedName":"tmux_server:start_owned/1","name":"start_owned/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"start_owned(Options)\n-spec start_owned(owned_options()) ->\n {ok, t(), ownership()} |\n {error, map()}.","references":[{"start":39,"end":52,"target":"t:tmux_server:owned_options/0"},{"start":85,"end":86,"target":"t:tmux_server:t/0"},{"start":90,"end":99,"target":"t:tmux_server:ownership/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":134,"end":137,"target":"t:erlang:map/0"}],"params":[{"name":"Options","type":"owned_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:owned_options/0"}]}],"returns":"{ok, t(), ownership()} | {error, map()}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_server:t/0"},{"start":10,"end":19,"target":"t:tmux_server:ownership/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":33,"end":36,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Start an empty owned daemon in a fresh private Linux socket directory. Performs I/O and waits for bounded startup; no session or attached observer is created. Returns an ordinary endpoint and a separate `t:ownership/0` token. The caller owns the daemon lifetime: caller death or `stop_owned/1` retires its helper tree. `close/1` only closes the endpoint and preserves the daemon.","body":"The daemon starts without a user config, with `exit-empty` disabled. One idle,\nunattached bootstrap client keeps the owned helper tree alive. Startup includes\nreadiness and endpoint incarnation binding, not just executable launch.\nIncomplete cleanup remains explicit; it is never permission to kill by path.\nAn incomplete startup error includes an ownership token and captured resources\nfor `stop_owned/1` recovery. The token does not serialize across VM lifetimes."},"source":{"line":258,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-start_owned-1"},{"id":"tmux_server:status/1","publicId":"tmux_server:status/1","qualifiedName":"tmux_server:status/1","name":"status/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"status(Server)\n-spec status(t()) ->\n {ok, state()} |\n {error, tmux_operation:failure()}.","references":[{"start":28,"end":29,"target":"t:tmux_server:t/0"},{"start":57,"end":62,"target":"t:tmux_server:state/0"},{"start":92,"end":114,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, state()} | {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":10,"target":"t:tmux_server:state/0"},{"start":24,"end":46,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read the endpoint owner's lifecycle and resource summary. This contacts the library owner, not tmux, and does not refresh captured rows."},"source":{"line":390,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-status-1"},{"id":"tmux_server:stop_owned/1","publicId":"tmux_server:stop_owned/1","qualifiedName":"tmux_server:stop_owned/1","name":"stop_owned/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"stop_owned(Ownership)\n-spec stop_owned(ownership()) -> ok | {error, map()}.","references":[{"start":39,"end":48,"target":"t:tmux_server:ownership/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":68,"end":71,"target":"t:erlang:map/0"}],"params":[{"name":"Ownership","type":"ownership()","typeReferences":[{"start":0,"end":9,"target":"t:tmux_server:ownership/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Stop the daemon and endpoint associated with a `t:ownership/0` token. Performs I/O and returns ok only after endpoint/client/helper retirement and namespace cleanup are proved. It never sends kill-server to a socket path.","body":"A replaced socket/directory or unexpected directory contents are preserved and\nreturn `cleanup_incomplete` with process and namespace details. A supervised\ntombstone retains uncertain cleanup; call again to inspect/retry after external\nrepair. Filesystem identity checks are observations, not atomic reservations\nagainst another trusted process replacing a path during unlink.\n\nSuccessful stop is idempotent during the 60-second token retention period.\nAfter token expiry or application shutdown, returns `ownership_expired`.\nStop explicitly before application shutdown when the caller needs a verified\ncleanup result. OTP application shutdown itself does not prove native cleanup.\nIncomplete shutdown writes a private recovery report outside the owned socket\ndirectory and logs its location or write failure; no automatic recovery runs."},"source":{"line":279,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-stop_owned-1"},{"id":"tmux_server:version/1","publicId":"tmux_server:version/1","qualifiedName":"tmux_server:version/1","name":"version/1","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"version(Server)\n-spec version(t()) ->\n {ok, tmux_version:t()} | {error, map()}.","references":[{"start":30,"end":31,"target":"t:tmux_server:t/0"},{"start":60,"end":74,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":88,"end":91,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, tmux_version:t()} | {error, map()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":33,"end":36,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return the daemon version observed when the endpoint opened. This reads owner state and does not execute a fresh version command or qualify another tmux release."},"source":{"line":406,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-version-1"},{"id":"tmux_server:with_owned/2","publicId":"tmux_server:with_owned/2","qualifiedName":"tmux_server:with_owned/2","name":"with_owned/2","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"with_owned(Options, Function)\n-spec with_owned(owned_options(), fun((t()) -> Value)) ->\n {ok, Value} |\n {error, scope_failure() | map()}.","references":[{"start":47,"end":60,"target":"t:tmux_server:owned_options/0"},{"start":69,"end":70,"target":"t:tmux_server:t/0"},{"start":150,"end":163,"target":"t:tmux_server:scope_failure/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":168,"end":171,"target":"t:erlang:map/0"}],"params":[{"name":"Options","type":"owned_options()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:owned_options/0"}]},{"name":"Function","type":"fun((t()) -> Value)","typeReferences":[{"start":5,"end":6,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, Value} | {error, scope_failure() | map()}","returnsReferences":[{"start":22,"end":35,"target":"t:tmux_server:scope_failure/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":40,"end":43,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Start an owned daemon, run a callback in the calling process, then stop it. Performs `start_owned/1` and token-based `stop_owned/1` around the callback. With successful cleanup, returns {ok, Value} or re-raises the original callback exception. A returned error tuple is an ordinary callback value. Startup failure passes through without invoking the callback.","body":"Cleanup failure returns `t:scope_failure/0`, including both server and ownership\nhandles for inspection and an explicit stop retry. It preserves the callback\noutcome and cleanup evidence separately; it never claims timeout is retirement.\nSee `with_server/2` for callback and separately allocated resource obligations."},"source":{"line":320,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-with_owned-2"},{"id":"tmux_server:with_server/2","publicId":"tmux_server:with_server/2","qualifiedName":"tmux_server:with_server/2","name":"with_server/2","namespace":"tmux_server","parent":"tmux_server","kind":"function","modifiers":[],"signatures":[{"raw":"with_server(Options, Function)\n-spec with_server(open_options(), fun((t()) -> Value)) ->\n {ok, Value} |\n {error, scope_failure() | map()}.","references":[{"start":49,"end":61,"target":"t:tmux_server:open_options/0"},{"start":70,"end":71,"target":"t:tmux_server:t/0"},{"start":153,"end":166,"target":"t:tmux_server:scope_failure/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":171,"end":174,"target":"t:erlang:map/0"}],"params":[{"name":"Options","type":"open_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_server:open_options/0"}]},{"name":"Function","type":"fun((t()) -> Value)","typeReferences":[{"start":5,"end":6,"target":"t:tmux_server:t/0"}]}],"returns":"{ok, Value} | {error, scope_failure() | map()}","returnsReferences":[{"start":22,"end":35,"target":"t:tmux_server:scope_failure/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":40,"end":43,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Open a borrowed endpoint, run a callback in the calling process, then close it. Performs the same I/O as `open/1` and `close/1`; the borrowed daemon survives. Startup failure passes through without invoking the callback.","body":"With successful cleanup, returns {ok, Value} for any callback return value,\nincluding a returned error tuple. Callback error, throw and exit exceptions\nare re-raised with their original reason and stack. If cleanup fails, returns\n{error, Failure} with `t:scope_failure/0`, preserving both outcomes and the\nendpoint for explicit recovery. It attempts cleanup once; a timeout does not\nprove retirement. Existing supervised cleanup ownership remains in force.\n\nThe callback must retire separately created resources such as `m:tmux_control`\nattachments. This scope closes its endpoint, not every resource the callback\nmay allocate. Use `with_owned/2` when the scope should own the daemon too."},"source":{"line":299,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_server-with_server-2"},{"id":"t:tmux_server:capture_options/0","publicId":"t:tmux_server:capture_options/0","qualifiedName":"tmux_server:capture_options/0","name":"capture_options/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type capture_options() ::\n #{deadline_ms => 1..600000,\n max_rows => 1..65536,\n max_bytes => 1..67108864,\n hydration => hydration(),\n consistency => observed | atomic}.","params":[],"references":[{"start":162,"end":171,"target":"t:tmux_server:hydration/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture bounds, hydration strategy and consistency request. Atomic capture is unsupported."},"source":{"line":201,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_server-capture_options-0"},{"id":"t:tmux_server:command_options/0","publicId":"t:tmux_server:command_options/0","qualifiedName":"tmux_server:command_options/0","name":"command_options/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type command_options() ::\n #{deadline_ms => 1..600000,\n max_stdout => 0..1048576,\n max_stderr => 0..65536,\n stdin => binary(),\n identity => observed | same_connection}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":160,"end":166,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Command options: deadline_ms defaults to 2500, max_stdout to 1 MiB, max_stderr to 64 KiB, stdin to an empty binary and identity to observed. The deadline includes admission, preflight and execution. stdin is limited to 256 KiB; stdin plus the rendered argument reservation must also fit 256 KiB. Each endpoint admits at most 64 operations and 256 KiB of command payload; exhaustion returns busy. same_connection is recognized but unsupported."},"source":{"line":190,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_server-command_options-0"},{"id":"t:tmux_server:hydration/0","publicId":"t:tmux_server:hydration/0","qualifiedName":"tmux_server:hydration/0","name":"hydration/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type hydration() :: batched | isolated.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture text/bytes with one framed scan per entity (batched, the default), or one field per physical row (isolated). Both retain complete graph coverage and interval semantics. Each command has the same 1 MiB stdout bound; isolated can distribute large entity output across commands at greater source cost. See `snapshot/2` and `tmux_query:explain/1`."},"source":{"line":199,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_server-hydration-0"},{"id":"t:tmux_server:open_options/0","publicId":"t:tmux_server:open_options/0","qualifiedName":"tmux_server:open_options/0","name":"open_options/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type open_options() ::\n #{socket_path := binary(),\n executable => binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":51,"end":57,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":87,"end":93,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"An explicit absolute socket endpoint and optional absolute tmux executable path."},"source":{"line":174,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_server-open_options-0"},{"id":"t:tmux_server:owned_options/0","publicId":"t:tmux_server:owned_options/0","qualifiedName":"tmux_server:owned_options/0","name":"owned_options/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type owned_options() ::\n #{executable => binary(),\n startup_timeout_ms => 1..600000}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":51,"end":57,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Owned startup options. The finite startup budget defaults to 2500 milliseconds."},"source":{"line":176,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_server-owned_options-0"},{"id":"t:tmux_server:ownership/0","publicId":"t:tmux_server:ownership/0","qualifiedName":"tmux_server:ownership/0","name":"ownership/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque ownership().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Opaque ownership token for `stop_owned/1`. An ordinary endpoint or row origin does not convey this token. Trusted code can pass it to another process."},"source":{"line":181,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_server-ownership-0"},{"id":"t:tmux_server:scope_failure/0","publicId":"t:tmux_server:scope_failure/0","qualifiedName":"tmux_server:scope_failure/0","name":"scope_failure/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type scope_failure() ::\n #{code := scope_cleanup_failed,\n primary :=\n {ok, term()} |\n {exception,\n error | exit | throw,\n term(),\n erlang:stacktrace()},\n cleanup :=\n {error, map()} |\n {exception,\n error | exit | throw,\n term(),\n erlang:stacktrace()},\n server := t(),\n ownership => ownership()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":111,"end":115,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":205,"end":209,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:stacktrace/0","project":"Erlang/OTP"},"start":230,"end":247,"target":"t:erlang:stacktrace/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":299,"end":302,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":392,"end":396,"target":"t:erlang:term/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:stacktrace/0","project":"Erlang/OTP"},"start":417,"end":434,"target":"t:erlang:stacktrace/0"},{"start":461,"end":462,"target":"t:tmux_server:t/0"},{"start":491,"end":500,"target":"t:tmux_server:ownership/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Both callback and cleanup evidence when a scope cannot prove retirement. primary is the callback value or its exception class, reason and original stack. cleanup preserves the operational error or a separate cleanup exception. server permits `close/1` reconciliation; owned scopes also include ownership for `stop_owned/1`. Retain these handles until cleanup is resolved."},"source":{"line":169,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_server-scope_failure-0"},{"id":"t:tmux_server:state/0","publicId":"t:tmux_server:state/0","qualifiedName":"tmux_server:state/0","name":"state/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type state() ::\n #{phase := open | closing | closed,\n generation := reference(),\n owner := pid(),\n operations := non_neg_integer(),\n command_bytes := non_neg_integer(),\n active_bytes := non_neg_integer(),\n retained_results := non_neg_integer(),\n result_bytes := non_neg_integer()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":89,"end":98,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:pid/0","project":"Erlang/OTP"},"start":123,"end":126,"target":"t:erlang:pid/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":156,"end":171,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":204,"end":219,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":251,"end":266,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":302,"end":317,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":349,"end":364,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Endpoint resource summary. owner is the supervised endpoint process, not its initiating caller. operations and command_bytes count active admission leases; active_bytes reserves output capacity. Retired results are bounded separately by retained_results and result_bytes. These are accounting limits, not VM heap measurements. generation identifies this endpoint handle's lifetime."},"source":{"line":210,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_server-state-0"},{"id":"t:tmux_server:t/0","publicId":"t:tmux_server:t/0","qualifiedName":"tmux_server:t/0","name":"t/0","namespace":"tmux_server","parent":"tmux_server","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A supervised borrowed-endpoint handle bound to an owner generation and admission state."},"source":{"line":219,"file":"apps/libtmux_erlang/src/tmux_server.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_server-t-0"},{"id":"tmux_session","publicId":"tmux_session","qualifiedName":"tmux_session","name":"tmux_session","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Create and observe sessions, or act on a session's registered stable ID.","body":"`create/2` accepts name, window_name, width, height, cwd, env,\nlaunch and detach. Creation defaults to detached with tmux's configured\nshell/command. launch is default_shell, an argv map, or an explicit shell map.\nenv augments tmux's inherited environment. tmux supplies PATH, SHELL, PWD and\nTMUX_PANE after that merge, so those entries may be replaced. Names and cwd\nare literal format values; tmux's stored name rules still apply. Creation\nnever adopts an existing session by name.\n\nAn empty shell command can exit immediately and remove its session. It does\nnot request the empty-pane behavior of split-window. Use a running program\nwhen later operations require the session to remain alive.\n\n`create/2` and `get/2` explicitly read the\nnew/current row through several one-shot commands. These reads are not atomic.\nIf creation succeeds but observation fails, the error retains mutation =\ncompleted and the original command result. `rename/2` and\n`kill/1` return command results without refreshing the input\nrecord. Detached rows require `tmux_server:bind/2` before actions.\n`rename_command/2` builds a reusable value without tmux I/O; the other calls\nperform I/O after validation.\n\n`select/2` switches one explicitly named attached client to a session. It\nnever attaches a client or infers the current client. Use\n`tmux_window_link:select/1` to select a session's window membership instead."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_session"},{"id":"tmux_session:create/2","publicId":"tmux_session:create/2","qualifiedName":"tmux_session:create/2","name":"create/2","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"create(Server, Options)\n-spec create(tmux_server:t(), create_options()) ->\n {ok, tmux_model:session()} | {error, map()}.","references":[{"start":37,"end":50,"target":"t:tmux_server:t/0"},{"start":54,"end":68,"target":"t:tmux_session:create_options/0"},{"start":96,"end":114,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":128,"end":131,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Options","type":"create_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_session:create_options/0"}]}],"returns":"{ok, tmux_model:session()} | {error, map()}","returnsReferences":[{"start":5,"end":23,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":37,"end":40,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Create a detached session by default and explicitly observe the returned row. Options include name, window_name, dimensions, cwd, env and launch. Performs I/O; an observation failure after successful creation retains mutation = completed and the original command result. Existing names are not adopted."},"source":{"line":48,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_session-create-2"},{"id":"tmux_session:get/2","publicId":"tmux_session:get/2","qualifiedName":"tmux_session:get/2","name":"get/2","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"get(Server, Id)\n-spec get(tmux_server:t(), tmux_model:session_id()) ->\n {ok, tmux_model:session()} | {error, map()}.","references":[{"start":26,"end":39,"target":"t:tmux_server:t/0"},{"start":43,"end":64,"target":"t:tmux_model:session_id/0"},{"start":89,"end":107,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":121,"end":124,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Id","type":"tmux_model:session_id()","typeReferences":[{"start":0,"end":21,"target":"t:tmux_model:session_id/0"}]}],"returns":"{ok, tmux_model:session()} | {error, map()}","returnsReferences":[{"start":5,"end":23,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":37,"end":40,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read fresh session fields through explicit one-shot commands. The session ID is stable within the observed server incarnation. Returns target_gone when tmux no longer has that session; it never refreshes an existing record."},"source":{"line":64,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_session-get-2"},{"id":"tmux_session:kill/1","publicId":"tmux_session:kill/1","qualifiedName":"tmux_session:kill/1","name":"kill/1","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"kill(Session)\n-spec kill(tmux_model:session()) ->\n {ok, map()} | {error, map()}.","references":[{"start":25,"end":43,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":69,"end":72,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":86,"end":89,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Destroy this registered session. Performs I/O and returns the command result; this is a destructive session action, not endpoint cleanup. References must belong to a live registered owner."},"source":{"line":170,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_session-kill-1"},{"id":"tmux_session:rename/2","publicId":"tmux_session:rename/2","qualifiedName":"tmux_session:rename/2","name":"rename/2","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"rename(Session, Name)\n-spec rename(tmux_model:session(), binary()) ->\n {ok, map()} | {error, map()}.","references":[{"start":35,"end":53,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":57,"end":63,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":91,"end":94,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":108,"end":111,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Rename the registered session using a literal name and return the command result. Performs I/O. Previously captured records keep their old names; detached or stale references fail validation before the action."},"source":{"line":72,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_session-rename-2"},{"id":"tmux_session:rename_command/2","publicId":"tmux_session:rename_command/2","qualifiedName":"tmux_session:rename_command/2","name":"rename_command/2","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"rename_command(Session, Name)\n-spec rename_command(tmux_model:session(), binary()) ->\n {ok, tmux_command:t()} |\n {error, map()}.","references":[{"start":51,"end":69,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":73,"end":79,"target":"t:erlang:binary/0"},{"start":115,"end":129,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":167,"end":170,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, tmux_command:t()} | {error, map()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_command:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":33,"end":36,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Build a literal rename command without tmux I/O. Validates the row and keeps its captured origin; endpoint liveness is checked during execution. Submit the value to `tmux_server:command/3` or `tmux_operation:start/3` with its original endpoint. Existing session records retain their captured name.","body":"Detached rows require `tmux_server:bind/2` first. Building a command does not\nexecute it or make a repeated mutation safe.","examples":[{"lang":"erlang","code":"1> tmux_session:rename_command(invalid_row, <<\"work\">>).\n{error,#{code => invalid_row,path => []}}"}]},"source":{"line":93,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_session-rename_command-2"},{"id":"tmux_session:select/2","publicId":"tmux_session:select/2","qualifiedName":"tmux_session:select/2","name":"select/2","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"select(Session, Client)\n-spec select(tmux_model:session(), binary()) ->\n {ok, map()} | {error, map()}.","references":[{"start":37,"end":55,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":59,"end":65,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":93,"end":96,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":110,"end":113,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Client","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Switch an explicitly named attached client to this registered session, preserving the session environment. Performs I/O. See `select/3` for client lookup, environment updates and disconnection races.","body":"An empty client name cannot select an implicit current client:","examples":[{"lang":"erlang","code":"1> tmux_session:select(invalid_session, <<>>).\n{error,#{code => invalid_client,path => [client]}}"}]},"source":{"line":113,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_session-select-2"},{"id":"tmux_session:select/3","publicId":"tmux_session:select/3","qualifiedName":"tmux_session:select/3","name":"select/3","namespace":"tmux_session","parent":"tmux_session","kind":"function","modifiers":[],"signatures":[{"raw":"select(Session, Client, Options)\n-spec select(tmux_model:session(),\n binary(),\n select_options()) ->\n {ok, map()} | {error, map()}.","references":[{"start":46,"end":64,"target":"t:tmux_model:session/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":81,"end":87,"target":"t:erlang:binary/0"},{"start":104,"end":118,"target":"t:tmux_session:select_options/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":146,"end":149,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":163,"end":166,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Client","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]},{"name":"Options","type":"select_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_session:select_options/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Switch one attached client, selected by its literal native client name or TTY path, to the session's registered stable ID. Performs I/O and returns the command result; existing rows remain captured values. Obtain the name from the caller's own client context, such as tmux's `client_name` format. There is no default client and this call never attaches one.","body":"`update_environment` defaults to false (`switch-client -E`). When true, tmux\nupdates the destination session environment using its `update-environment`\noption and that client's environment; listed variables absent from the client\ncan be marked for removal. Running pane processes retain their environment.\n\nNames are nonempty NUL-free binaries of at most 32 KiB. Trailing-colon aliases\nare rejected. Native lookup matches an exact name or TTY path, including its\n`/dev/`-relative alias; there is no prefix or pattern matching. A disconnected\nname returns `client_not_found`. Names and TTY paths can be reused by a later\nconnection; this API does not identify a client incarnation atomically. A\nmissing destination returns `target_gone`. See `tmux_server:bind/2` for detached\nsession rows and `tmux_window_link:select/1` for window selection."},"source":{"line":137,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_session-select-3"},{"id":"t:tmux_session:create_options/0","publicId":"t:tmux_session:create_options/0","qualifiedName":"tmux_session:create_options/0","name":"create_options/0","namespace":"tmux_session","parent":"tmux_session","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type create_options() ::\n #{name => binary(),\n window_name => binary(),\n width => 1..65535,\n height => 1..65535,\n cwd => binary(),\n env => #{binary() => binary()},\n launch => tmux_command:launch_spec(),\n detach => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":46,"end":52,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":83,"end":89,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":175,"end":181,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":206,"end":212,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":218,"end":224,"target":"t:erlang:binary/0"},{"start":251,"end":275,"target":"t:tmux_command:launch_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":301,"end":308,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Session creation options. Launch defaults to the configured shell; creation defaults to detached."},"source":{"line":34,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_session-create_options-0"},{"id":"t:tmux_session:select_options/0","publicId":"t:tmux_session:select_options/0","qualifiedName":"tmux_session:select_options/0","name":"select_options/0","namespace":"tmux_session","parent":"tmux_session","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type select_options() ::\n #{update_environment => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":60,"end":67,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Session selection options. update_environment defaults to false, preserving the destination environment."},"source":{"line":39,"file":"apps/libtmux_erlang/src/tmux_session.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_session-select_options-0"},{"id":"tmux_snapshot","publicId":"tmux_snapshot","qualifiedName":"tmux_snapshot","name":"tmux_snapshot","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Read an immutable captured graph without performing tmux I/O.","body":"Server-wide lists use numeric ID order. Window links retain every membership,\nincluding multiple indexes for the same window in one session. Session windows\nare unique in first-link order; panes within a window use pane index order.\n`related/3` accepts a row from this snapshot and returns a\ntagged result. A row from another observation cannot silently select a\nrelationship in this one.\n\n`metadata/1` records source calls, the capture interval,\nendpoint generation and the observed server incarnation. Captures span\ncommands and are not atomic. Values remain readable after their endpoint\ncloses; actions still validate the row's registered origin. Coverage\ndistinguishes unloaded data from an empty collection and unavailable fields\nfrom known absence. See the [graph guide](graph.md) for physical windows and\nsession memberships."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_snapshot"},{"id":"tmux_snapshot:coverage/1","publicId":"tmux_snapshot:coverage/1","qualifiedName":"tmux_snapshot:coverage/1","name":"coverage/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"coverage/1\n-spec coverage(t()) -> coverage().","references":[{"start":26,"end":27,"target":"t:tmux_snapshot:t/0"},{"start":34,"end":42,"target":"t:tmux_snapshot:coverage/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"coverage()","returnsReferences":[{"start":0,"end":8,"target":"t:tmux_snapshot:coverage/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return per-collection, field and relationship coverage. Loaded values, known absence, not_loaded and unavailable capabilities have distinct meanings. Performs no I/O."},"source":{"line":181,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_snapshot-coverage-1"},{"id":"tmux_snapshot:get/3","publicId":"tmux_snapshot:get/3","qualifiedName":"tmux_snapshot:get/3","name":"get/3","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"get/3\n-spec get(tmux_schema:entity(), term(), t()) ->\n {ok, tmux_model:row()} | none | {error, map()}.","references":[{"start":16,"end":34,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":38,"end":42,"target":"t:erlang:term/0"},{"start":46,"end":47,"target":"t:tmux_snapshot:t/0"},{"start":72,"end":86,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":107,"end":110,"target":"t:erlang:map/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Key","type":"term()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:term/0"}]},{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"{ok, tmux_model:row()} | none | {error, map()}","returnsReferences":[{"start":5,"end":19,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":40,"end":43,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Look up a row in this capture by ID, or a session/index/window tuple for a window link. Returns none for a known missing identity and a tagged coverage error for an unloaded collection. Performs no I/O."},"source":{"line":132,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_snapshot-get-3"},{"id":"tmux_snapshot:metadata/1","publicId":"tmux_snapshot:metadata/1","qualifiedName":"tmux_snapshot:metadata/1","name":"metadata/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"metadata/1\n-spec metadata(t()) -> metadata().","references":[{"start":26,"end":27,"target":"t:tmux_snapshot:t/0"},{"start":34,"end":42,"target":"t:tmux_snapshot:metadata/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"metadata()","returnsReferences":[{"start":0,"end":8,"target":"t:tmux_snapshot:metadata/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return capture identity, server generation, source calls, capabilities and read interval metadata. Does not refresh the graph or imply atomic capture."},"source":{"line":174,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_snapshot-metadata-1"},{"id":"tmux_snapshot:panes/1","publicId":"tmux_snapshot:panes/1","qualifiedName":"tmux_snapshot:panes/1","name":"panes/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"panes(Snapshot)\n-spec panes(t()) -> [tmux_model:pane()].","references":[{"start":28,"end":29,"target":"t:tmux_snapshot:t/0"},{"start":37,"end":52,"target":"t:tmux_model:pane/0"}],"params":[{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"[tmux_model:pane()]","returnsReferences":[{"start":1,"end":16,"target":"t:tmux_model:pane/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return unique captured physical panes in numeric ID order without I/O. `related/3` orders panes within a window by pane index."},"source":{"line":111,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_snapshot-panes-1"},{"id":"tmux_snapshot:related/3","publicId":"tmux_snapshot:related/3","qualifiedName":"tmux_snapshot:related/3","name":"related/3","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"related/3\n-spec related(atom(), tmux_model:row(), t()) ->\n {ok,\n [tmux_model:row()] |\n tmux_model:row() |\n none} |\n {error, map()}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":24,"end":28,"target":"t:erlang:atom/0"},{"start":32,"end":46,"target":"t:tmux_model:row/0"},{"start":50,"end":51,"target":"t:tmux_snapshot:t/0"},{"start":99,"end":113,"target":"t:tmux_model:row/0"},{"start":137,"end":151,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":207,"end":210,"target":"t:erlang:map/0"}],"params":[{"name":"Relation","type":"atom()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":0,"end":4,"target":"t:erlang:atom/0"}]},{"name":"Row","type":"tmux_model:row()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_model:row/0"}]},{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"{ok,\n [tmux_model:row()] | tmux_model:row() | none} |\n {error, map()}","returnsReferences":[{"start":17,"end":31,"target":"t:tmux_model:row/0"},{"start":37,"end":51,"target":"t:tmux_model:row/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":82,"end":85,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Traverse a complete captured relationship without I/O. To-many relations return lists; to-one relations return a row or known absence. The input row must belong to this snapshot. Unloaded relations and mismatched rows return tagged errors."},"source":{"line":149,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_snapshot-related-3"},{"id":"tmux_snapshot:require/2","publicId":"tmux_snapshot:require/2","qualifiedName":"tmux_snapshot:require/2","name":"require/2","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"require/2\n-spec require([requirement()], t()) -> ok | {error, map()}.","references":[{"start":25,"end":36,"target":"t:tmux_snapshot:requirement/0"},{"start":41,"end":42,"target":"t:tmux_snapshot:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":62,"end":65,"target":"t:erlang:map/0"}],"params":[{"name":"Requirements","type":"[requirement()]","typeReferences":[{"start":1,"end":12,"target":"t:tmux_snapshot:requirement/0"}]},{"name":"Argument2","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"ok | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":13,"end":16,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Check every declared collection/field/relationship requirement before local evaluation. Returns an incomplete_snapshot error with missing requirements when the capture cannot answer faithfully. Performs no I/O, even on empty data."},"source":{"line":190,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_snapshot-require-2"},{"id":"tmux_snapshot:rows/2","publicId":"tmux_snapshot:rows/2","qualifiedName":"tmux_snapshot:rows/2","name":"rows/2","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"rows/2\n-spec rows(tmux_schema:entity(), t()) -> [tmux_model:row()].","references":[{"start":18,"end":36,"target":"t:tmux_schema:entity/0"},{"start":40,"end":41,"target":"t:tmux_snapshot:t/0"},{"start":49,"end":63,"target":"t:tmux_model:row/0"}],"params":[{"name":"Entity","type":"tmux_schema:entity()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_schema:entity/0"}]},{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"[tmux_model:row()]","returnsReferences":[{"start":1,"end":15,"target":"t:tmux_model:row/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return a captured collection by schema entity. Performs no I/O. An unloaded collection raises incomplete_snapshot rather than appearing empty."},"source":{"line":118,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_snapshot-rows-2"},{"id":"tmux_snapshot:sessions/1","publicId":"tmux_snapshot:sessions/1","qualifiedName":"tmux_snapshot:sessions/1","name":"sessions/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"sessions(Snapshot)\n-spec sessions(t()) -> [tmux_model:session()].","references":[{"start":34,"end":35,"target":"t:tmux_snapshot:t/0"},{"start":43,"end":61,"target":"t:tmux_model:session/0"}],"params":[{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"[tmux_model:session()]","returnsReferences":[{"start":1,"end":19,"target":"t:tmux_model:session/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return captured sessions in numeric ID order. Performs no I/O and raises incomplete_snapshot when that collection was not captured."},"source":{"line":92,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_snapshot-sessions-1"},{"id":"tmux_snapshot:window_links/1","publicId":"tmux_snapshot:window_links/1","qualifiedName":"tmux_snapshot:window_links/1","name":"window_links/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"window_links(Snapshot)\n-spec window_links(t()) -> [tmux_model:window_link()].","references":[{"start":42,"end":43,"target":"t:tmux_snapshot:t/0"},{"start":51,"end":73,"target":"t:tmux_model:window_link/0"}],"params":[{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"[tmux_model:window_link()]","returnsReferences":[{"start":1,"end":23,"target":"t:tmux_model:window_link/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return every captured membership, ordered by numeric session ID, index and window ID. Multiple links to the same physical window are preserved. Performs no I/O; link identity belongs to this snapshot."},"source":{"line":105,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_snapshot-window_links-1"},{"id":"tmux_snapshot:windows/1","publicId":"tmux_snapshot:windows/1","qualifiedName":"tmux_snapshot:windows/1","name":"windows/1","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"function","modifiers":[],"signatures":[{"raw":"windows(Snapshot)\n-spec windows(t()) -> [tmux_model:window()].","references":[{"start":32,"end":33,"target":"t:tmux_snapshot:t/0"},{"start":41,"end":58,"target":"t:tmux_model:window/0"}],"params":[{"name":"Snapshot","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_snapshot:t/0"}]}],"returns":"[tmux_model:window()]","returnsReferences":[{"start":1,"end":18,"target":"t:tmux_model:window/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Return unique captured physical windows in numeric ID order. Performs no I/O. Use `window_links/1` for session-relative membership and indexes."},"source":{"line":98,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_snapshot-windows-1"},{"id":"t:tmux_snapshot:coverage/0","publicId":"t:tmux_snapshot:coverage/0","qualifiedName":"tmux_snapshot:coverage/0","name":"coverage/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type coverage() ::\n #{tmux_schema:entity() => entity_coverage()}.","params":[],"references":[{"start":32,"end":50,"target":"t:tmux_schema:entity/0"},{"start":56,"end":71,"target":"t:tmux_snapshot:entity_coverage/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Per-entity coverage. Use `require/2` to check requirements before evaluation."},"source":{"line":53,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_snapshot-coverage-0"},{"id":"t:tmux_snapshot:entity_coverage/0","publicId":"t:tmux_snapshot:entity_coverage/0","qualifiedName":"tmux_snapshot:entity_coverage/0","name":"entity_coverage/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type entity_coverage() ::\n #{collection := complete | not_loaded,\n fields :=\n #{atom() =>\n loaded | not_loaded | unavailable},\n relations :=\n #{atom() => complete | not_loaded}}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":116,"end":120,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":227,"end":231,"target":"t:erlang:atom/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Collection completeness, field availability and relationship completeness. A loaded field can hold a known value or known absence; inspect the row to distinguish them. not_loaded never means empty, and unavailable never means known absence. Completeness is relative to the captured source collection."},"source":{"line":49,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_snapshot-entity_coverage-0"},{"id":"t:tmux_snapshot:metadata/0","publicId":"t:tmux_snapshot:metadata/0","qualifiedName":"tmux_snapshot:metadata/0","name":"metadata/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type metadata() ::\n #{id := reference(),\n origin := reference(),\n model_version := 2,\n graph := complete | partial,\n generation => reference(),\n endpoint => #{socket_path := binary()},\n server_instance => tmux_identity:t(),\n tmux_version => tmux_version:t(),\n capture_started => integer(),\n capture_finished => integer(),\n time_unit => microsecond,\n source_calls => [source_call()],\n observed_bytes => non_neg_integer(),\n consistency => observed,\n hydration => tmux_server:hydration(),\n capabilities =>\n #{field_schema := 1,\n identity := observed,\n capture := observed},\n query => query_metadata(),\n atom() => term()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":38,"end":47,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":73,"end":82,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:reference/0","project":"Erlang/OTP"},"start":185,"end":194,"target":"t:erlang:reference/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":239,"end":245,"target":"t:erlang:binary/0"},{"start":281,"end":296,"target":"t:tmux_identity:t/0"},{"start":328,"end":342,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":377,"end":384,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":420,"end":427,"target":"t:erlang:integer/0"},{"start":498,"end":509,"target":"t:tmux_snapshot:source_call/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":544,"end":559,"target":"t:erlang:non_neg_integer/0"},{"start":625,"end":646,"target":"t:tmux_server:hydration/0"},{"start":816,"end":830,"target":"t:tmux_snapshot:query_metadata/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":846,"end":850,"target":"t:erlang:atom/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":856,"end":860,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Capture identity and provenance. id identifies this snapshot, origin its registered endpoint and generation the endpoint lifetime. model_version names the row representation. graph describes relationship coverage, not atomicity.","body":"Live captures include endpoint, observed server_instance, tmux_version,\nmonotonic capture bounds in time_unit, source_calls, observed stdout bytes and\ncapabilities. Those fields can be absent in internally constructed partial\ncaptures. Query captures also include `t:query_metadata/0`. Opaque references\nand process identities are local values, not portable wire identifiers.\nhydration records the requested `t:tmux_server:hydration/0` strategy; source_calls\nshows which commands actually ran, including any schema-driven fallback."},"source":{"line":77,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_snapshot-metadata-0"},{"id":"t:tmux_snapshot:query_metadata/0","publicId":"t:tmux_snapshot:query_metadata/0","qualifiedName":"tmux_snapshot:query_metadata/0","name":"query_metadata/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type query_metadata() ::\n #{candidate_count := non_neg_integer(),\n pushed_down := boolean(),\n attempt := 1 | 2,\n consistency := observed}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":57,"end":72,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":103,"end":110,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Source-query capture diagnostics. candidate_count is the deduplicated candidate identity count before local residuals and limits. pushed_down records a nontrivial native condition in the plan, not proof that its command ran: empty collections can skip it. source_calls records actual capture commands. The flag does not mean the full predicate was translated. attempt starts at one and increases only for an explicitly requested retry."},"source":{"line":62,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_snapshot-query_metadata-0"},{"id":"t:tmux_snapshot:requirement/0","publicId":"t:tmux_snapshot:requirement/0","qualifiedName":"tmux_snapshot:requirement/0","name":"requirement/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type requirement() ::\n {collection, tmux_schema:entity()} |\n {field | relation, tmux_schema:entity(), atom()}.","params":[],"references":[{"start":46,"end":64,"target":"t:tmux_schema:entity/0"},{"start":99,"end":117,"target":"t:tmux_schema:entity/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0","project":"Erlang/OTP"},"start":121,"end":125,"target":"t:erlang:atom/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A collection, field or complete relationship needed for faithful local evaluation."},"source":{"line":34,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_snapshot-requirement-0"},{"id":"t:tmux_snapshot:source_call/0","publicId":"t:tmux_snapshot:source_call/0","qualifiedName":"tmux_snapshot:source_call/0","name":"source_call/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type source_call() ::\n #{command := binary(),\n args := [binary()],\n started := integer(),\n finished := integer(),\n stdout_bytes := non_neg_integer()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":46,"end":52,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":77,"end":83,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":111,"end":118,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:integer/0","project":"Erlang/OTP"},"start":146,"end":153,"target":"t:erlang:integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":185,"end":200,"target":"t:erlang:non_neg_integer/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"One completed capture command and its stdout byte count. started and finished are local monotonic microseconds, not wall-clock timestamps. The interval includes identity preflight and command completion; it is not an atomic read."},"source":{"line":41,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_snapshot-source_call-0"},{"id":"t:tmux_snapshot:t/0","publicId":"t:tmux_snapshot:t/0","qualifiedName":"tmux_snapshot:t/0","name":"t/0","namespace":"tmux_snapshot","parent":"tmux_snapshot","kind":"typealias","modifiers":["opaque"],"signatures":[{"raw":"-opaque t().","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"An immutable captured graph with identity, indexes, coverage and source intervals."},"source":{"line":28,"file":"apps/libtmux_erlang/src/tmux_snapshot.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_snapshot-t-0"},{"id":"tmux_version","publicId":"tmux_version","qualifiedName":"tmux_version","name":"tmux_version","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Parse the output of tmux -V without invoking tmux.","body":"Support covers tmux 3.3a through 3.8, including intermediate releases. The\nminimum-version check includes the patch letter; numeric feature comparisons\nuse major/minor components. CI tests the endpoints of the supported range. Use\n`tmux_server:version/1` for the daemon version observed by an endpoint."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_version.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_version"},{"id":"tmux_version:at_least/2","publicId":"tmux_version:at_least/2","qualifiedName":"tmux_version:at_least/2","name":"at_least/2","namespace":"tmux_version","parent":"tmux_version","kind":"function","modifiers":[],"signatures":[{"raw":"at_least/2\n-spec at_least(t(),\n {non_neg_integer(), non_neg_integer()}) ->\n boolean().","references":[{"start":26,"end":27,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":47,"end":62,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":66,"end":81,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":107,"end":114,"target":"t:erlang:boolean/0"}],"params":[{"name":"Argument1","type":"t()","typeReferences":[{"start":0,"end":1,"target":"t:tmux_version:t/0"}]},{"name":"Argument2","type":"{non_neg_integer(), non_neg_integer()}","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":1,"end":16,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":20,"end":35,"target":"t:erlang:non_neg_integer/0"}]}],"returns":"boolean()","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":0,"end":7,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Compare numeric major/minor components with a required floor. Patch letters do not promote an older minor release. Performs no I/O."},"source":{"line":73,"file":"apps/libtmux_erlang/src/tmux_version.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_version-at_least-2"},{"id":"tmux_version:parse/1","publicId":"tmux_version:parse/1","qualifiedName":"tmux_version:parse/1","name":"parse/1","namespace":"tmux_version","parent":"tmux_version","kind":"function","modifiers":[],"signatures":[{"raw":"parse/1\n-spec parse(binary()) ->\n {ok, t()} |\n {error, {invalid_tmux_version, term()}}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":20,"end":26,"target":"t:erlang:binary/0"},{"start":53,"end":54,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":106,"end":110,"target":"t:erlang:term/0"}],"params":[{"name":"Raw","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, t()} |\n {error, {invalid_tmux_version, term()}}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":53,"end":57,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Parse bounded tmux -V output into numeric components and patch/tracking metadata. This is pure parsing, not a probe or compatibility qualification."},"source":{"line":25,"file":"apps/libtmux_erlang/src/tmux_version.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_version-parse-1"},{"id":"tmux_version:require/1","publicId":"tmux_version:require/1","qualifiedName":"tmux_version:require/1","name":"require/1","namespace":"tmux_version","parent":"tmux_version","kind":"function","modifiers":[],"signatures":[{"raw":"require(Raw)\n-spec require(binary()) ->\n {ok, t()} |\n {error,\n {invalid_tmux_version |\n unsupported_tmux_version,\n term()}}.","references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":27,"end":33,"target":"t:erlang:binary/0"},{"start":62,"end":63,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":200,"end":204,"target":"t:erlang:term/0"}],"params":[{"name":"Raw","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, t()} |\n {error,\n {invalid_tmux_version | unsupported_tmux_version,\n term()}}","returnsReferences":[{"start":5,"end":6,"target":"t:tmux_version:t/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:term/0","project":"Erlang/OTP"},"start":103,"end":107,"target":"t:erlang:term/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Reject a tmux release below the supported floor.","examples":[{"lang":"erlang","code":"1> {ok, Version} = tmux_version:require(<<\"tmux 3.3a\">>), ok.\nok\n2> tmux_version:at_least(Version, {3, 4}).\nfalse"}]},"source":{"line":58,"file":"apps/libtmux_erlang/src/tmux_version.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_version-require-1"},{"id":"t:tmux_version:t/0","publicId":"t:tmux_version:t/0","qualifiedName":"tmux_version:t/0","name":"t/0","namespace":"tmux_version","parent":"tmux_version","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type t() ::\n #{major := non_neg_integer(),\n minor := non_neg_integer(),\n patch := binary(),\n tracking := boolean(),\n raw := binary()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":34,"end":49,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:non_neg_integer/0","project":"Erlang/OTP"},"start":74,"end":89,"target":"t:erlang:non_neg_integer/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":114,"end":120,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":148,"end":155,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":178,"end":184,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Parsed numeric daemon version plus patch, tracking and original-output metadata."},"source":{"line":17,"file":"apps/libtmux_erlang/src/tmux_version.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_version-t-0"},{"id":"tmux_window","publicId":"tmux_window","qualifiedName":"tmux_window","name":"tmux_window","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Create physical windows in a session and act through their registered IDs.","body":"`create/2` accepts name, cwd, env, launch and detach, using the\nsession's next available index. It defaults to detached. `get/2`\nreads current fields; `rename/2` returns the command result and\nleaves previous records unchanged. Launch and environment options follow\n`tmux_session:create/2`. An empty shell command does not portably keep the\nwindow alive: older tmux releases execute it as a shell command. Use a running\nprogram when needed. Creation returns a fresh observed row or an error\nretaining a completed mutation and its result if the follow-up observation\nfails.\n\n`kill/1` destroys the physical window and all its links. Use\n`tmux_window_link:unlink/2` to remove one session membership. These calls\nperform I/O after validating their inputs. `select_layout/2`\nchanges the physical window's layout across all its session links; previously\nobserved pane geometry remains unchanged in captured values."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window"},{"id":"tmux_window:create/2","publicId":"tmux_window:create/2","qualifiedName":"tmux_window:create/2","name":"create/2","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"create(Session, Options)\n-spec create(tmux_model:session(), create_options()) ->\n {ok, tmux_model:window()} | {error, map()}.","references":[{"start":38,"end":56,"target":"t:tmux_model:session/0"},{"start":60,"end":74,"target":"t:tmux_window:create_options/0"},{"start":102,"end":119,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":133,"end":136,"target":"t:erlang:map/0"}],"params":[{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Options","type":"create_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_window:create_options/0"}]}],"returns":"{ok, tmux_model:window()} | {error, map()}","returnsReferences":[{"start":5,"end":22,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":36,"end":39,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Create a physical window in the session's next free index and observe it. Defaults to detached. Launch, cwd and environment follow `tmux_session:create/2`. Performs I/O and retains completed-mutation details if observation fails."},"source":{"line":41,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window-create-2"},{"id":"tmux_window:get/2","publicId":"tmux_window:get/2","qualifiedName":"tmux_window:get/2","name":"get/2","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"get(Server, Id)\n-spec get(tmux_server:t(), tmux_model:window_id()) ->\n {ok, tmux_model:window()} | {error, map()}.","references":[{"start":26,"end":39,"target":"t:tmux_server:t/0"},{"start":43,"end":63,"target":"t:tmux_model:window_id/0"},{"start":88,"end":105,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":119,"end":122,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"Id","type":"tmux_model:window_id()","typeReferences":[{"start":0,"end":20,"target":"t:tmux_model:window_id/0"}]}],"returns":"{ok, tmux_model:window()} | {error, map()}","returnsReferences":[{"start":5,"end":22,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":36,"end":39,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Explicitly read a physical window by stable ID. Returns a fresh record or target_gone. Physical windows do not have a universal session or window index."},"source":{"line":56,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window-get-2"},{"id":"tmux_window:kill/1","publicId":"tmux_window:kill/1","qualifiedName":"tmux_window:kill/1","name":"kill/1","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"kill(Window)\n-spec kill(tmux_model:window()) ->\n {ok, map()} | {error, map()}.","references":[{"start":24,"end":41,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":67,"end":70,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":84,"end":87,"target":"t:erlang:map/0"}],"params":[{"name":"Window","type":"tmux_model:window()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_model:window/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Destroy the physical window and all of its session links. This does not unlink only one membership. Performs I/O after origin and target validation."},"source":{"line":74,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window-kill-1"},{"id":"tmux_window:rename/2","publicId":"tmux_window:rename/2","qualifiedName":"tmux_window:rename/2","name":"rename/2","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"rename(Window, Name)\n-spec rename(tmux_model:window(), binary()) ->\n {ok, map()} | {error, map()}.","references":[{"start":34,"end":51,"target":"t:tmux_model:window/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":55,"end":61,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":89,"end":92,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":106,"end":109,"target":"t:erlang:map/0"}],"params":[{"name":"Window","type":"tmux_model:window()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_model:window/0"}]},{"name":"Name","type":"binary()","typeReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":0,"end":6,"target":"t:erlang:binary/0"}]}],"returns":"{ok, map()} | {error, map()}","returnsReferences":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":5,"end":8,"target":"t:erlang:map/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":22,"end":25,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Rename the registered physical window with a literal name. Performs I/O and returns the command result. Captured rows and snapshots remain unchanged."},"source":{"line":63,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window-rename-2"},{"id":"tmux_window:respawn/2","publicId":"tmux_window:respawn/2","qualifiedName":"tmux_window:respawn/2","name":"respawn/2","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"respawn(Window, Options)\n-spec respawn(tmux_model:window(), respawn_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":39,"end":56,"target":"t:tmux_model:window/0"},{"start":60,"end":75,"target":"t:tmux_window:respawn_options/0"},{"start":104,"end":128,"target":"t:tmux_operation:completed/0"},{"start":159,"end":181,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Window","type":"tmux_model:window()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_model:window/0"}]},{"name":"Options","type":"respawn_options()","typeReferences":[{"start":0,"end":15,"target":"t:tmux_window:respawn_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Respawn a registered physical window across all its session links. tmux keeps the first pane's ID, removes the other panes and rebuilds a single-pane layout. force defaults false: a window with a running pane normally returns command_error. force = true permits closing existing PTYs. Command completion does not establish former-job termination or application readiness. Other panes can already be removed if a later spawn step fails. Respawn also selects this window in tmux's resolved session. For a window linked into several sessions, tmux chooses that context from the physical ID; this facade does not pin selection or environment to a captured membership.","body":"launch defaults to previous and reuses the retained pane's saved command.\nExplicit argv and shell maps, saved cwd and fresh-spawn environment rules\nfollow `tmux_pane:respawn/2`, using the resolved session's environment. This\nphysical-window mutation affects every link. Performs I/O after validation and\nreturns the command result without refreshing rows. Use `get/2` or a new\nsnapshot for current data."},"source":{"line":96,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window-respawn-2"},{"id":"tmux_window:select_layout/2","publicId":"tmux_window:select_layout/2","qualifiedName":"tmux_window:select_layout/2","name":"select_layout/2","namespace":"tmux_window","parent":"tmux_window","kind":"function","modifiers":[],"signatures":[{"raw":"select_layout(Window, Layout)\n-spec select_layout(tmux_model:window(), layout()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":50,"end":67,"target":"t:tmux_model:window/0"},{"start":71,"end":77,"target":"t:tmux_window:layout/0"},{"start":112,"end":136,"target":"t:tmux_operation:completed/0"},{"start":173,"end":195,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Window","type":"tmux_model:window()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_model:window/0"}]},{"name":"Layout","type":"layout()","typeReferences":[{"start":0,"end":6,"target":"t:tmux_window:layout/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select a built-in arrangement or restore a literal serialized layout for this registered physical window. Binary names must exactly match one of the five built-ins; abbreviations and other names are rejected. Legacy serialized layouts need four hexadecimal checksum digits, a comma and nonempty data. This guard avoids a malformed-header crash in tmux 3.3 and 3.3a.","body":"Native JSON v2 layouts require a bounded JSON object with V = 2 and an L\nobject. They return unsupported_capability on tmux before 3.8 without\ndispatching a tmux command. This preserves `get/2` layout restoration on newer\nservers.\n\nExecution unzooms the window and changes it in every linked session. tmux\nvalidates serialized geometry; malformed geometry can return a command error.\nThe layout argument uses no shell or format expansion. Existing rows are not\nrefreshed; use `get/2` or a fresh snapshot to observe layout and pane\ngeometry.\n\nUnsupported atom names fail before dispatch:","examples":[{"lang":"erlang","code":"1> tmux_window:select_layout(invalid_row, unknown_layout).\n{error,#{code => invalid_layout,path => [layout]}}"}]},"source":{"line":131,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window-select_layout-2"},{"id":"t:tmux_window:create_options/0","publicId":"t:tmux_window:create_options/0","qualifiedName":"tmux_window:create_options/0","name":"create_options/0","namespace":"tmux_window","parent":"tmux_window","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type create_options() ::\n #{name => binary(),\n cwd => binary(),\n env => #{binary() => binary()},\n launch => tmux_command:launch_spec(),\n detach => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":46,"end":52,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":75,"end":81,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":106,"end":112,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":118,"end":124,"target":"t:erlang:binary/0"},{"start":151,"end":175,"target":"t:tmux_command:launch_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":201,"end":208,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Physical-window creation options; defaults to a detached window at the next free session index."},"source":{"line":25,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_window-create_options-0"},{"id":"t:tmux_window:layout/0","publicId":"t:tmux_window:layout/0","qualifiedName":"tmux_window:layout/0","name":"layout/0","namespace":"tmux_window","parent":"tmux_window","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type layout() ::\n even_horizontal | even_vertical |\n main_horizontal | main_vertical | tiled |\n binary().","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":124,"end":130,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"A built-in arrangement, its exact binary name, or a serialized layout. Native JSON v2 requires tmux 3.8."},"source":{"line":31,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_window-layout-0"},{"id":"t:tmux_window:respawn_options/0","publicId":"t:tmux_window:respawn_options/0","qualifiedName":"tmux_window:respawn_options/0","name":"respawn_options/0","namespace":"tmux_window","parent":"tmux_window","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type respawn_options() ::\n #{force => boolean(),\n launch => tmux_command:respawn_spec(),\n cwd => binary(),\n env => #{binary() => binary()}}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":48,"end":55,"target":"t:erlang:boolean/0"},{"start":81,"end":106,"target":"t:tmux_command:respawn_spec/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":129,"end":135,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":160,"end":166,"target":"t:erlang:binary/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:binary/0","project":"Erlang/OTP"},"start":172,"end":178,"target":"t:erlang:binary/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Physical-window respawn options. Defaults: force false, launch previous, saved cwd. A forced respawn removes other panes."},"source":{"line":28,"file":"apps/libtmux_erlang/src/tmux_window.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_window-respawn_options-0"},{"id":"tmux_window_link","publicId":"tmux_window_link","qualifiedName":"tmux_window_link","name":"tmux_window_link","kind":"module","modifiers":[],"signatures":[],"apiScope":"exported","package":"libtmux_erlang","product":"core","doc":{"summary":"Act on a physical window's observed membership in a particular session.","body":"A window link is identified by session ID, window index and expected physical\nwindow ID. It has no stable tmux link ID. These calls check that the observed\nmembership still names the expected window before dispatching an action.\nMissing or replaced membership returns stale_link. A link that moves away and\nback to the same coordinates and physical window cannot be distinguished.\n\nThe preflight and action use separate one-shot commands. Concurrent changes\nafter preflight can still affect the action; this is not atomic\ncompare-and-act. All input rows must belong to the same registered owner.\nRe-read or explicitly bind rows when using another owner. Closed owners and\nknown restarts invalidate their rows. Every call performs explicit I/O after\nvalidating its arguments.\n\nUse `tmux_window:kill/1` to destroy a physical window across all memberships.\nUse `unlink/2` to remove one membership. Existing rows and\nsnapshots are never refreshed by actions; use `get/3` or a\nnew snapshot for current memberships."},"source":{"line":1,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window_link"},{"id":"tmux_window_link:get/3","publicId":"tmux_window_link:get/3","qualifiedName":"tmux_window_link:get/3","name":"get/3","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"get(Server, SessionId, Index)\n-spec get(tmux_server:t(),\n tmux_model:session_id(),\n index()) ->\n {ok, tmux_model:window_link()} |\n {error, map()}.","references":[{"start":40,"end":53,"target":"t:tmux_server:t/0"},{"start":67,"end":88,"target":"t:tmux_model:session_id/0"},{"start":102,"end":107,"target":"t:tmux_window_link:index/0"},{"start":132,"end":154,"target":"t:tmux_model:window_link/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":181,"end":184,"target":"t:erlang:map/0"}],"params":[{"name":"Server","type":"tmux_server:t()","typeReferences":[{"start":0,"end":13,"target":"t:tmux_server:t/0"}]},{"name":"SessionId","type":"tmux_model:session_id()","typeReferences":[{"start":0,"end":21,"target":"t:tmux_model:session_id/0"}]},{"name":"Index","type":"index()","typeReferences":[{"start":0,"end":5,"target":"t:tmux_window_link:index/0"}]}],"returns":"{ok, tmux_model:window_link()} | {error, map()}","returnsReferences":[{"start":5,"end":27,"target":"t:tmux_model:window_link/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:map/0","project":"Erlang/OTP"},"start":41,"end":44,"target":"t:erlang:map/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Read a current membership at the explicit session ID and index. The returned native row carries its registered owner and a new observation identity. Returns target_gone if the session or index is absent. This read does not make later actions atomic and does not refresh previously captured links.","body":"Invalid indexes are rejected before I/O:","examples":[{"lang":"erlang","code":"1> tmux_window_link:get(invalid_server, <<\"$0\">>, -1).\n{error,#{code => invalid_option,path => [index]}}"}]},"source":{"line":50,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window_link-get-3"},{"id":"tmux_window_link:link/3","publicId":"tmux_window_link:link/3","qualifiedName":"tmux_window_link:link/3","name":"link/3","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"link(Link, Session, Options)\n-spec link(tmux_model:window_link(),\n tmux_model:session(),\n placement_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":40,"end":62,"target":"t:tmux_model:window_link/0"},{"start":77,"end":95,"target":"t:tmux_model:session/0"},{"start":110,"end":127,"target":"t:tmux_window_link:placement_options/0"},{"start":153,"end":177,"target":"t:tmux_operation:completed/0"},{"start":205,"end":227,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Link","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Options","type":"placement_options()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_window_link:placement_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Add another membership of this link's physical window to the destination session and explicit index. Defaults to detached and refuses an occupied index. replace = true maps to tmux -k and can destroy the occupied window. Returns the command result; use `get/3` to observe the new membership. The source membership remains. Session groups and renumber-windows retain their tmux semantics. Performs I/O after owner and membership checks."},"source":{"line":87,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window_link-link-3"},{"id":"tmux_window_link:move/3","publicId":"tmux_window_link:move/3","qualifiedName":"tmux_window_link:move/3","name":"move/3","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"move(Link, Session, Options)\n-spec move(tmux_model:window_link(),\n tmux_model:session(),\n placement_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":40,"end":62,"target":"t:tmux_model:window_link/0"},{"start":77,"end":95,"target":"t:tmux_model:session/0"},{"start":110,"end":127,"target":"t:tmux_window_link:placement_options/0"},{"start":153,"end":177,"target":"t:tmux_operation:completed/0"},{"start":205,"end":227,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Link","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Session","type":"tmux_model:session()","typeReferences":[{"start":0,"end":18,"target":"t:tmux_model:session/0"}]},{"name":"Options","type":"placement_options()","typeReferences":[{"start":0,"end":17,"target":"t:tmux_window_link:placement_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Move this membership to the destination session and explicit index, leaving its physical window's other links intact. Placement options follow `link/3`. Moving the final window out of a session can destroy that session; automatic renumbering and session groups can change other memberships. Captured rows remain unchanged. Returns the command result after observed preflight."},"source":{"line":98,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window_link-move-3"},{"id":"tmux_window_link:select/1","publicId":"tmux_window_link:select/1","qualifiedName":"tmux_window_link:select/1","name":"select/1","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"select(Link)\n-spec select(tmux_model:window_link()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":26,"end":48,"target":"t:tmux_model:window_link/0"},{"start":76,"end":100,"target":"t:tmux_operation:completed/0"},{"start":130,"end":152,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Link","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Select this membership as its session's current window after checking the expected physical window. Performs I/O and returns the command result."},"source":{"line":70,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window_link-select-1"},{"id":"tmux_window_link:swap/3","publicId":"tmux_window_link:swap/3","qualifiedName":"tmux_window_link:swap/3","name":"swap/3","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"swap(Source, Destination, Options)\n-spec swap(tmux_model:window_link(),\n tmux_model:window_link(),\n swap_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":46,"end":68,"target":"t:tmux_model:window_link/0"},{"start":83,"end":105,"target":"t:tmux_model:window_link/0"},{"start":120,"end":132,"target":"t:tmux_window_link:swap_options/0"},{"start":158,"end":182,"target":"t:tmux_operation:completed/0"},{"start":210,"end":232,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Source","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Destination","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Options","type":"swap_options()","typeReferences":[{"start":0,"end":12,"target":"t:tmux_window_link:swap_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Swap the physical windows at two checked memberships. Other links to either window remain intact. detach maps to tmux -d and defaults true. tmux applies its session-selection and group-synchronization rules. Returns the command result; old rows still name their original expected windows and can become stale. Performs I/O, with the documented gap between preflight and action."},"source":{"line":109,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window_link-swap-3"},{"id":"tmux_window_link:unlink/2","publicId":"tmux_window_link:unlink/2","qualifiedName":"tmux_window_link:unlink/2","name":"unlink/2","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"function","modifiers":[],"signatures":[{"raw":"unlink(Link, Options)\n-spec unlink(tmux_model:window_link(), unlink_options()) ->\n {ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}.","references":[{"start":35,"end":57,"target":"t:tmux_model:window_link/0"},{"start":61,"end":75,"target":"t:tmux_window_link:unlink_options/0"},{"start":103,"end":127,"target":"t:tmux_operation:completed/0"},{"start":157,"end":179,"target":"t:tmux_operation:failure/0"}],"params":[{"name":"Link","type":"tmux_model:window_link()","typeReferences":[{"start":0,"end":22,"target":"t:tmux_model:window_link/0"}]},{"name":"Options","type":"unlink_options()","typeReferences":[{"start":0,"end":14,"target":"t:tmux_window_link:unlink_options/0"}]}],"returns":"{ok, tmux_operation:completed()} |\n {error, tmux_operation:failure()}","returnsReferences":[{"start":5,"end":29,"target":"t:tmux_operation:completed/0"},{"start":53,"end":75,"target":"t:tmux_operation:failure/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Remove one checked membership. force defaults false, retaining tmux's protection for windows linked to only one session. force = true permits removing the last link, destroying that physical window and possibly its session. Duplicate links within one session retain tmux's native protection rules. Performs I/O and returns the command result without refreshing rows."},"source":{"line":128,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"tmux_window_link-unlink-2"},{"id":"t:tmux_window_link:index/0","publicId":"t:tmux_window_link:index/0","qualifiedName":"tmux_window_link:index/0","name":"index/0","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type index() :: 0..2147483647.","params":[],"references":[]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"An explicit tmux window index; relative and next-free selectors are not accepted."},"source":{"line":27,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_window_link-index-0"},{"id":"t:tmux_window_link:placement_options/0","publicId":"t:tmux_window_link:placement_options/0","qualifiedName":"tmux_window_link:placement_options/0","name":"placement_options/0","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type placement_options() ::\n #{index := index(),\n detach => boolean(),\n replace => boolean()}.","params":[],"references":[{"start":50,"end":55,"target":"t:tmux_window_link:index/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":81,"end":88,"target":"t:erlang:boolean/0"},{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":115,"end":122,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Destination index is required. Defaults: detach true, replace false. Replacement may destroy the destination window."},"source":{"line":29,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_window_link-placement_options-0"},{"id":"t:tmux_window_link:swap_options/0","publicId":"t:tmux_window_link:swap_options/0","qualifiedName":"tmux_window_link:swap_options/0","name":"swap_options/0","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type swap_options() :: #{detach => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":36,"end":43,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Maps detach to tmux's -d flag, default true."},"source":{"line":31,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_window_link-swap_options-0"},{"id":"t:tmux_window_link:unlink_options/0","publicId":"t:tmux_window_link:unlink_options/0","qualifiedName":"tmux_window_link:unlink_options/0","name":"unlink_options/0","namespace":"tmux_window_link","parent":"tmux_window_link","kind":"typealias","modifiers":[],"signatures":[{"raw":"-type unlink_options() :: #{force => boolean()}.","params":[],"references":[{"external":{"href":"https://www.erlang.org/doc/apps/erts/erlang.html#t:boolean/0","project":"Erlang/OTP"},"start":37,"end":44,"target":"t:erlang:boolean/0"}]}],"package":"libtmux_erlang","product":"core","apiScope":"exported","doc":{"summary":"Force defaults false. Force permits unlinking the last membership and destroying its physical window."},"source":{"line":33,"file":"apps/libtmux_erlang/src/tmux_window_link.erl","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","extractedRevision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5"},"slug":"t-tmux_window_link-unlink_options-0"}]} diff --git a/site/src/data/api/erlang.paths.json b/site/src/data/api/erlang.paths.json index 3a0fe6506..4fa09e727 100644 --- a/site/src/data/api/erlang.paths.json +++ b/site/src/data/api/erlang.paths.json @@ -1 +1 @@ -{"port":"erlang","repo":"libtmux/libtmux-erlang","revision":"539c7297ceae65a1cf683e0836eae0a1ccd34d64","paths":[".github/CONTRIBUTING.md",".github/RELEASE.md",".github/WRITING.md",".github/dependabot.yml",".github/example-width.toml",".github/repository.json",".github/social-preview.png",".github/workflows/ci.yml",".github/workflows/docs.yml",".github/workflows/release.yml",".gitignore",".tool-versions","AGENTS.md","CHANGELOG.md","CLAUDE.md","LICENSE","README.md","apps/libtmux_erlang/CHANGELOG.md","apps/libtmux_erlang/LICENSE","apps/libtmux_erlang/README.md","apps/libtmux_erlang/assets/logo-128.png","apps/libtmux_erlang/assets/logo-512.png","apps/libtmux_erlang/assets/logo.svg","apps/libtmux_erlang/assets/source.json","apps/libtmux_erlang/c_src/LICENSE","apps/libtmux_erlang/c_src/Makefile","apps/libtmux_erlang/c_src/README.md","apps/libtmux_erlang/c_src/owned_io.c","apps/libtmux_erlang/c_src/provenance.json","apps/libtmux_erlang/rebar.config","apps/libtmux_erlang/src/libtmux_erlang.app.src","apps/libtmux_erlang/src/libtmux_erlang_app.erl","apps/libtmux_erlang/src/tmux_admission.erl","apps/libtmux_erlang/src/tmux_args.erl","apps/libtmux_erlang/src/tmux_buffer.erl","apps/libtmux_erlang/src/tmux_buffer_codec.erl","apps/libtmux_erlang/src/tmux_capability.erl","apps/libtmux_erlang/src/tmux_capability_data.erl","apps/libtmux_erlang/src/tmux_command.erl","apps/libtmux_erlang/src/tmux_control.erl","apps/libtmux_erlang/src/tmux_control_codec.erl","apps/libtmux_erlang/src/tmux_error.erl","apps/libtmux_erlang/src/tmux_filter.erl","apps/libtmux_erlang/src/tmux_filter_eval.erl","apps/libtmux_erlang/src/tmux_hook.erl","apps/libtmux_erlang/src/tmux_identity.erl","apps/libtmux_erlang/src/tmux_json.erl","apps/libtmux_erlang/src/tmux_key.erl","apps/libtmux_erlang/src/tmux_log.erl","apps/libtmux_erlang/src/tmux_matcher.erl","apps/libtmux_erlang/src/tmux_model.erl","apps/libtmux_erlang/src/tmux_observe.erl","apps/libtmux_erlang/src/tmux_operation.erl","apps/libtmux_erlang/src/tmux_option.erl","apps/libtmux_erlang/src/tmux_option_batch.erl","apps/libtmux_erlang/src/tmux_option_codec.erl","apps/libtmux_erlang/src/tmux_option_data.erl","apps/libtmux_erlang/src/tmux_option_scope.erl","apps/libtmux_erlang/src/tmux_owned_server.erl","apps/libtmux_erlang/src/tmux_pane.erl","apps/libtmux_erlang/src/tmux_query.erl","apps/libtmux_erlang/src/tmux_query_plan.erl","apps/libtmux_erlang/src/tmux_regex.erl","apps/libtmux_erlang/src/tmux_registry.erl","apps/libtmux_erlang/src/tmux_schema.erl","apps/libtmux_erlang/src/tmux_schema_data.erl","apps/libtmux_erlang/src/tmux_scope.erl","apps/libtmux_erlang/src/tmux_select.erl","apps/libtmux_erlang/src/tmux_server.erl","apps/libtmux_erlang/src/tmux_session.erl","apps/libtmux_erlang/src/tmux_snapshot.erl","apps/libtmux_erlang/src/tmux_sup.erl","apps/libtmux_erlang/src/tmux_target.erl","apps/libtmux_erlang/src/tmux_text_codec.erl","apps/libtmux_erlang/src/tmux_transport.erl","apps/libtmux_erlang/src/tmux_transport_codec.erl","apps/libtmux_erlang/src/tmux_version.erl","apps/libtmux_erlang/src/tmux_window.erl","apps/libtmux_erlang/src/tmux_window_link.erl","apps/libtmux_erlang/test/tmux_admission_tests.erl","apps/libtmux_erlang/test/tmux_buffer_tests.erl","apps/libtmux_erlang/test/tmux_capability_tests.erl","apps/libtmux_erlang/test/tmux_command_tests.erl","apps/libtmux_erlang/test/tmux_domain_tests.erl","apps/libtmux_erlang/test/tmux_error_tests.erl","apps/libtmux_erlang/test/tmux_filter_fixture_tests.erl","apps/libtmux_erlang/test/tmux_filter_tests.erl","apps/libtmux_erlang/test/tmux_hook_tests.erl","apps/libtmux_erlang/test/tmux_identity_tests.erl","apps/libtmux_erlang/test/tmux_json_tests.erl","apps/libtmux_erlang/test/tmux_key_tests.erl","apps/libtmux_erlang/test/tmux_model_tests.erl","apps/libtmux_erlang/test/tmux_option_tests.erl","apps/libtmux_erlang/test/tmux_query_tests.erl","apps/libtmux_erlang/test/tmux_regex_tests.erl","apps/libtmux_erlang/test/tmux_registry_tests.erl","apps/libtmux_erlang/test/tmux_scope_tests.erl","apps/libtmux_erlang/test/tmux_select_tests.erl","apps/libtmux_erlang/test/tmux_snapshot_tests.erl","apps/libtmux_erlang/test/tmux_text_codec_tests.erl","apps/libtmux_erlang/test/tmux_transport_codec_tests.erl","apps/libtmux_erlang/test/tmux_version_tests.erl","docs/adr-0001-architecture.md","docs/adr-0002-batched-hydration.md","docs/adr-0003-scoped-option-batches.md","docs/api.md","docs/assets/app-icon-1024-dark.png","docs/assets/app-icon-1024-light.png","docs/assets/apple-touch-icon-dark.png","docs/assets/apple-touch-icon-light.png","docs/assets/browserconfig-dark.xml","docs/assets/browserconfig.xml","docs/assets/favicon.ico","docs/assets/logo-1024.png","docs/assets/logo-128.png","docs/assets/logo-144.png","docs/assets/logo-152.png","docs/assets/logo-16.png","docs/assets/logo-167.png","docs/assets/logo-180.png","docs/assets/logo-192.png","docs/assets/logo-24.png","docs/assets/logo-256.png","docs/assets/logo-32.png","docs/assets/logo-384.png","docs/assets/logo-48.png","docs/assets/logo-512.png","docs/assets/logo-64.png","docs/assets/logo-96.png","docs/assets/logo.svg","docs/assets/maskable-192-dark.png","docs/assets/maskable-192-light.png","docs/assets/maskable-512-dark.png","docs/assets/maskable-512-light.png","docs/assets/mstile-150-dark.png","docs/assets/mstile-150-light.png","docs/assets/mstile-310-dark.png","docs/assets/mstile-310-light.png","docs/assets/opengraph-dark.jpg","docs/assets/opengraph-dark.png","docs/assets/opengraph-light.jpg","docs/assets/opengraph-light.png","docs/assets/safari-pinned-tab.svg","docs/assets/site-dark.webmanifest","docs/assets/site.webmanifest","docs/assets/social-square-dark.png","docs/assets/social-square-light.png","docs/assets/source.json","docs/assets/twitter-dark.png","docs/assets/twitter-light.png","docs/branding.md","docs/buffers.md","docs/commands-reference.md","docs/commands.md","docs/compatibility.md","docs/configuration.md","docs/control.md","docs/diagnostics.md","docs/fields.md","docs/graph.md","docs/guides.md","docs/hooks.md","docs/installation.md","docs/jobs.md","docs/keys.md","docs/options-reference.md","docs/options.md","docs/ownership.md","docs/panes.md","docs/pipe.md","docs/project-policy.md","docs/querying.md","examples/buffer_demo.erl","examples/command_demo.erl","examples/config_demo.erl","examples/control_demo.erl","examples/filter_demo.erl","examples/hook_demo.erl","examples/inspect_demo.erl","examples/job_demo.erl","examples/key_demo.erl","examples/linked_graph.erl","examples/native_consumer.erl","examples/options_demo.erl","examples/pane_demo.erl","examples/pipe_demo.erl","examples/readme_demo.erl","examples/terminal_job.py","llms.txt","property/prop_tmux_filter.erl","property/prop_tmux_graph.erl","rebar.config","rebar.lock","schema/commands.json","schema/entities.json","schema/options.json","test/ci_cache_tests.py","test/command_catalogue_tests.py","test/consumers/model_types_bad.erl","test/consumers/model_types_ok.erl","test/example_protocol_tests.py","test/fixtures/README.md","test/fixtures/filters-v1.json","test/fixtures/regex-v1.json","test/helper_fuzz.c","test/helper_protocol.py","test/release_tests.py","test/tmux_buffer_SUITE.erl","test/tmux_channel_SUITE.erl","test/tmux_command_SUITE.erl","test/tmux_control_SUITE.erl","test/tmux_control_codec_SUITE.erl","test/tmux_control_codec_tests.erl","test/tmux_diagnostics_SUITE.erl","test/tmux_docs_SUITE.erl","test/tmux_domain_SUITE.erl","test/tmux_fixture_SUITE.erl","test/tmux_fixture_watch.py","test/tmux_hook_SUITE.erl","test/tmux_key_SUITE.erl","test/tmux_key_SUITE_data/client.py","test/tmux_option_SUITE.erl","test/tmux_owned_server_SUITE.erl","test/tmux_pipe_SUITE.erl","test/tmux_query_SUITE.erl","test/tmux_server_SUITE.erl","test/tmux_test_fixture.erl","test/tmux_topology_SUITE.erl","test/tmux_transport_SUITE.erl","tools/build_docs.py","tools/check.py","tools/check_api_docs.escript","tools/check_docs.py","tools/check_example_width.py","tools/check_helper_native.py","tools/check_hex_install.py","tools/check_model_types.escript","tools/check_package.py","tools/check_regex.py","tools/check_release.py","tools/check_source_package.py","tools/ci/README.md","tools/ci/build_tmux.py","tools/ci/tmux-sources.json","tools/docs-tool.json","tools/filter-conformance/README.md","tools/filter-conformance/check.py","tools/filter-conformance/consumer.exs","tools/generate_commands.py","tools/generate_options.py","tools/generate_reference.escript","tools/generate_schema.escript","tools/package-tool.json","tools/regex-conformance/Cargo.lock","tools/regex-conformance/Cargo.toml","tools/regex-conformance/README.md","tools/regex-conformance/generate_fixture.py","tools/regex-conformance/javascript.mjs","tools/regex-conformance/src/main.rs","tools/regex_fixture.escript","tools/run_examples.escript","tools/source_package_registry.escript"]} +{"port":"erlang","repo":"libtmux/libtmux-erlang","revision":"33fd7fe985454e375d5ac8533043cabf4a0b2fa5","paths":[".github/CONTRIBUTING.md",".github/RELEASE.md",".github/WRITING.md",".github/dependabot.yml",".github/example-width.toml",".github/repository.json",".github/social-preview.png",".github/workflows/ci.yml",".github/workflows/docs.yml",".github/workflows/release.yml",".gitignore",".tool-versions","AGENTS.md","CHANGELOG.md","CLAUDE.md","LICENSE","README.md","apps/libtmux_erlang/CHANGELOG.md","apps/libtmux_erlang/LICENSE","apps/libtmux_erlang/README.md","apps/libtmux_erlang/assets/logo-128.png","apps/libtmux_erlang/assets/logo-512.png","apps/libtmux_erlang/assets/logo.svg","apps/libtmux_erlang/assets/source.json","apps/libtmux_erlang/c_src/LICENSE","apps/libtmux_erlang/c_src/Makefile","apps/libtmux_erlang/c_src/README.md","apps/libtmux_erlang/c_src/owned_io.c","apps/libtmux_erlang/c_src/provenance.json","apps/libtmux_erlang/rebar.config","apps/libtmux_erlang/src/libtmux_erlang.app.src","apps/libtmux_erlang/src/libtmux_erlang_app.erl","apps/libtmux_erlang/src/tmux_admission.erl","apps/libtmux_erlang/src/tmux_args.erl","apps/libtmux_erlang/src/tmux_buffer.erl","apps/libtmux_erlang/src/tmux_buffer_codec.erl","apps/libtmux_erlang/src/tmux_capability.erl","apps/libtmux_erlang/src/tmux_capability_data.erl","apps/libtmux_erlang/src/tmux_command.erl","apps/libtmux_erlang/src/tmux_control.erl","apps/libtmux_erlang/src/tmux_control_codec.erl","apps/libtmux_erlang/src/tmux_error.erl","apps/libtmux_erlang/src/tmux_filter.erl","apps/libtmux_erlang/src/tmux_filter_eval.erl","apps/libtmux_erlang/src/tmux_hook.erl","apps/libtmux_erlang/src/tmux_identity.erl","apps/libtmux_erlang/src/tmux_json.erl","apps/libtmux_erlang/src/tmux_key.erl","apps/libtmux_erlang/src/tmux_log.erl","apps/libtmux_erlang/src/tmux_matcher.erl","apps/libtmux_erlang/src/tmux_model.erl","apps/libtmux_erlang/src/tmux_observe.erl","apps/libtmux_erlang/src/tmux_operation.erl","apps/libtmux_erlang/src/tmux_option.erl","apps/libtmux_erlang/src/tmux_option_batch.erl","apps/libtmux_erlang/src/tmux_option_codec.erl","apps/libtmux_erlang/src/tmux_option_data.erl","apps/libtmux_erlang/src/tmux_option_scope.erl","apps/libtmux_erlang/src/tmux_owned_server.erl","apps/libtmux_erlang/src/tmux_pane.erl","apps/libtmux_erlang/src/tmux_query.erl","apps/libtmux_erlang/src/tmux_query_plan.erl","apps/libtmux_erlang/src/tmux_regex.erl","apps/libtmux_erlang/src/tmux_registry.erl","apps/libtmux_erlang/src/tmux_schema.erl","apps/libtmux_erlang/src/tmux_schema_data.erl","apps/libtmux_erlang/src/tmux_scope.erl","apps/libtmux_erlang/src/tmux_select.erl","apps/libtmux_erlang/src/tmux_server.erl","apps/libtmux_erlang/src/tmux_session.erl","apps/libtmux_erlang/src/tmux_snapshot.erl","apps/libtmux_erlang/src/tmux_sup.erl","apps/libtmux_erlang/src/tmux_target.erl","apps/libtmux_erlang/src/tmux_text_codec.erl","apps/libtmux_erlang/src/tmux_transport.erl","apps/libtmux_erlang/src/tmux_transport_codec.erl","apps/libtmux_erlang/src/tmux_version.erl","apps/libtmux_erlang/src/tmux_window.erl","apps/libtmux_erlang/src/tmux_window_link.erl","apps/libtmux_erlang/test/tmux_admission_tests.erl","apps/libtmux_erlang/test/tmux_buffer_tests.erl","apps/libtmux_erlang/test/tmux_capability_tests.erl","apps/libtmux_erlang/test/tmux_command_tests.erl","apps/libtmux_erlang/test/tmux_domain_tests.erl","apps/libtmux_erlang/test/tmux_error_tests.erl","apps/libtmux_erlang/test/tmux_filter_fixture_tests.erl","apps/libtmux_erlang/test/tmux_filter_tests.erl","apps/libtmux_erlang/test/tmux_hook_tests.erl","apps/libtmux_erlang/test/tmux_identity_tests.erl","apps/libtmux_erlang/test/tmux_json_tests.erl","apps/libtmux_erlang/test/tmux_key_tests.erl","apps/libtmux_erlang/test/tmux_model_tests.erl","apps/libtmux_erlang/test/tmux_option_tests.erl","apps/libtmux_erlang/test/tmux_query_tests.erl","apps/libtmux_erlang/test/tmux_regex_tests.erl","apps/libtmux_erlang/test/tmux_registry_tests.erl","apps/libtmux_erlang/test/tmux_scope_tests.erl","apps/libtmux_erlang/test/tmux_select_tests.erl","apps/libtmux_erlang/test/tmux_snapshot_tests.erl","apps/libtmux_erlang/test/tmux_text_codec_tests.erl","apps/libtmux_erlang/test/tmux_transport_codec_tests.erl","apps/libtmux_erlang/test/tmux_version_tests.erl","docs/adr-0001-architecture.md","docs/adr-0002-batched-hydration.md","docs/adr-0003-scoped-option-batches.md","docs/api.md","docs/assets/app-icon-1024-dark.png","docs/assets/app-icon-1024-light.png","docs/assets/apple-touch-icon-dark.png","docs/assets/apple-touch-icon-light.png","docs/assets/browserconfig-dark.xml","docs/assets/browserconfig.xml","docs/assets/favicon.ico","docs/assets/logo-1024.png","docs/assets/logo-128.png","docs/assets/logo-144.png","docs/assets/logo-152.png","docs/assets/logo-16.png","docs/assets/logo-167.png","docs/assets/logo-180.png","docs/assets/logo-192.png","docs/assets/logo-24.png","docs/assets/logo-256.png","docs/assets/logo-32.png","docs/assets/logo-384.png","docs/assets/logo-48.png","docs/assets/logo-512.png","docs/assets/logo-64.png","docs/assets/logo-96.png","docs/assets/logo.svg","docs/assets/maskable-192-dark.png","docs/assets/maskable-192-light.png","docs/assets/maskable-512-dark.png","docs/assets/maskable-512-light.png","docs/assets/mstile-150-dark.png","docs/assets/mstile-150-light.png","docs/assets/mstile-310-dark.png","docs/assets/mstile-310-light.png","docs/assets/opengraph-dark.jpg","docs/assets/opengraph-dark.png","docs/assets/opengraph-light.jpg","docs/assets/opengraph-light.png","docs/assets/safari-pinned-tab.svg","docs/assets/site-dark.webmanifest","docs/assets/site.webmanifest","docs/assets/social-square-dark.png","docs/assets/social-square-light.png","docs/assets/source.json","docs/assets/twitter-dark.png","docs/assets/twitter-light.png","docs/branding.md","docs/buffers.md","docs/commands-reference.md","docs/commands.md","docs/compatibility.md","docs/configuration.md","docs/control.md","docs/diagnostics.md","docs/fields.md","docs/graph.md","docs/guides.md","docs/hooks.md","docs/installation.md","docs/jobs.md","docs/keys.md","docs/options-reference.md","docs/options.md","docs/ownership.md","docs/panes.md","docs/pipe.md","docs/project-policy.md","docs/querying.md","examples/batch_demo.erl","examples/buffer_demo.erl","examples/command_demo.erl","examples/config_demo.erl","examples/control_demo.erl","examples/filter_demo.erl","examples/hook_demo.erl","examples/inspect_demo.erl","examples/job_demo.erl","examples/key_demo.erl","examples/linked_graph.erl","examples/native_consumer.erl","examples/options_demo.erl","examples/pane_demo.erl","examples/pipe_demo.erl","examples/plan_demo.erl","examples/readme_demo.erl","examples/terminal_job.py","examples/typing_demo.erl","llms.txt","property/prop_tmux_filter.erl","property/prop_tmux_graph.erl","rebar.config","rebar.lock","schema/commands.json","schema/entities.json","schema/options.json","test/ci_cache_tests.py","test/command_catalogue_tests.py","test/consumers/model_types_bad.erl","test/consumers/model_types_ok.erl","test/example_protocol_tests.py","test/fixtures/README.md","test/fixtures/filters-v1.json","test/fixtures/regex-v1.json","test/helper_fuzz.c","test/helper_protocol.py","test/release_tests.py","test/tmux_buffer_SUITE.erl","test/tmux_channel_SUITE.erl","test/tmux_command_SUITE.erl","test/tmux_control_SUITE.erl","test/tmux_control_codec_SUITE.erl","test/tmux_control_codec_tests.erl","test/tmux_diagnostics_SUITE.erl","test/tmux_docs_SUITE.erl","test/tmux_domain_SUITE.erl","test/tmux_fixture_SUITE.erl","test/tmux_fixture_watch.py","test/tmux_hook_SUITE.erl","test/tmux_key_SUITE.erl","test/tmux_key_SUITE_data/client.py","test/tmux_option_SUITE.erl","test/tmux_owned_server_SUITE.erl","test/tmux_pipe_SUITE.erl","test/tmux_query_SUITE.erl","test/tmux_server_SUITE.erl","test/tmux_test_fixture.erl","test/tmux_topology_SUITE.erl","test/tmux_transport_SUITE.erl","tools/build_docs.py","tools/check.py","tools/check_api_docs.escript","tools/check_docs.py","tools/check_example_width.py","tools/check_helper_native.py","tools/check_hex_install.py","tools/check_model_types.escript","tools/check_package.py","tools/check_regex.py","tools/check_release.py","tools/check_source_package.py","tools/ci/README.md","tools/ci/build_tmux.py","tools/ci/tmux-sources.json","tools/docs-tool.json","tools/filter-conformance/README.md","tools/filter-conformance/check.py","tools/filter-conformance/consumer.exs","tools/generate_commands.py","tools/generate_options.py","tools/generate_reference.escript","tools/generate_schema.escript","tools/package-tool.json","tools/regex-conformance/Cargo.lock","tools/regex-conformance/Cargo.toml","tools/regex-conformance/README.md","tools/regex-conformance/generate_fixture.py","tools/regex-conformance/javascript.mjs","tools/regex-conformance/src/main.rs","tools/regex_fixture.escript","tools/run_examples.escript","tools/source_package_registry.escript"]} diff --git a/site/src/data/manifest-packages.json b/site/src/data/manifest-packages.json index c3d658580..875092a56 100644 --- a/site/src/data/manifest-packages.json +++ b/site/src/data/manifest-packages.json @@ -142,14 +142,14 @@ }, "erlang": { "repo": "libtmux/libtmux-erlang", - "revision": "539c7297ceae65a1cf683e0836eae0a1ccd34d64", + "revision": "33fd7fe985454e375d5ac8533043cabf4a0b2fa5", "distributions": [ { "name": "libtmux_erlang", "version": "0.0.1", "manifest": "apps/libtmux_erlang/src/libtmux_erlang.app.src", "repo": "libtmux/libtmux-erlang", - "revision": "539c7297ceae65a1cf683e0836eae0a1ccd34d64" + "revision": "33fd7fe985454e375d5ac8533043cabf4a0b2fa5" } ], "units": [] diff --git a/site/src/data/mentions.json b/site/src/data/mentions.json index d2106ec0e..a804e92d9 100644 --- a/site/src/data/mentions.json +++ b/site/src/data/mentions.json @@ -3388,6 +3388,13 @@ "title": "Native API documentation", "section": "guides" }, + { + "port": "erlang", + "symbol": "tmux_filter", + "page": "/erlang/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "erlang", "symbol": "tmux_filter:decode_json/1", @@ -3430,6 +3437,13 @@ "title": "Register a hook and await its effect", "section": "guides" }, + { + "port": "erlang", + "symbol": "tmux_hook:get/3", + "page": "/erlang/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "erlang", "symbol": "tmux_hook:get/3", @@ -3444,6 +3458,13 @@ "title": "Register a hook and await its effect", "section": "guides" }, + { + "port": "erlang", + "symbol": "tmux_hook:set/3", + "page": "/erlang/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "erlang", "symbol": "tmux_hook:set/3", @@ -3647,6 +3668,13 @@ "title": "Read and change scoped options", "section": "guides" }, + { + "port": "erlang", + "symbol": "tmux_option:get_many/3", + "page": "/erlang/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "erlang", "symbol": "tmux_option:get_many/3", @@ -3654,6 +3682,20 @@ "title": "Read and change scoped options", "section": "guides" }, + { + "port": "erlang", + "symbol": "tmux_option:get/3", + "page": "/erlang/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, + { + "port": "erlang", + "symbol": "tmux_option:set/3", + "page": "/erlang/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "erlang", "symbol": "tmux_pane", @@ -3696,6 +3738,13 @@ "title": "Isolate and rejoin a running pane", "section": "guides" }, + { + "port": "erlang", + "symbol": "tmux_pane:kill/1", + "page": "/erlang/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "erlang", "symbol": "tmux_pane:move/3", @@ -3738,6 +3787,13 @@ "title": "Owned operations", "section": "guides" }, + { + "port": "erlang", + "symbol": "tmux_pane:send_keys/2", + "page": "/erlang/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "erlang", "symbol": "tmux_pane:split/2", @@ -3801,6 +3857,13 @@ "title": "Selections and queries", "section": "concepts" }, + { + "port": "erlang", + "symbol": "tmux_query:explain/1", + "page": "/erlang/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "erlang", "symbol": "tmux_query:fetch/2", @@ -4032,6 +4095,13 @@ "title": "Native API documentation", "section": "guides" }, + { + "port": "erlang", + "symbol": "tmux_session:kill/1", + "page": "/erlang/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "erlang", "symbol": "tmux_session:rename/2", @@ -4165,6 +4235,13 @@ "title": "Object graph", "section": "concepts" }, + { + "port": "erlang", + "symbol": "tmux_window:kill/1", + "page": "/erlang/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "fsharp", "symbol": "LibTmux.FSharp.CardinalityError.MultipleMatches", diff --git a/site/src/data/port-guides/erlang.json b/site/src/data/port-guides/erlang.json index 0ffc3e439..acc019361 100644 --- a/site/src/data/port-guides/erlang.json +++ b/site/src/data/port-guides/erlang.json @@ -1,32 +1,32 @@ { "source": { "repository": "libtmux/libtmux-erlang", - "revision": "539c7297ceae65a1cf683e0836eae0a1ccd34d64" + "revision": "33fd7fe985454e375d5ac8533043cabf4a0b2fa5" }, "guides": [ { "path": "README.md", - "content": "\n
\n \n \n \"libtmux\n \n
\n\n\n
\n\n# libtmux for Erlang\n\n

\n Hex.pm ·\n Documentation ·\n API reference ·\n Examples\n

\n\n[![Erlang checks](https://github.com/libtmux/libtmux-erlang/actions/workflows/ci.yml/badge.svg)](https://github.com/libtmux/libtmux-erlang/actions/workflows/ci.yml)\n\n
\n\nlibtmux for Erlang is a tmux client library. Create\n[sessions](https://libtmux.org/en/erlang/latest/reference/tmux_session/),\n[windows](https://libtmux.org/en/erlang/latest/reference/tmux_window/) and\n[panes](https://libtmux.org/en/erlang/latest/reference/tmux_pane/), capture their\n[object graph](https://libtmux.org/en/erlang/latest/reference/tmux_snapshot/),\nfilter it as immutable data, and execute source queries and owned operations\nexplicitly.\n\n[Create, capture and query](#create-capture-and-query) ·\n[Core package](apps/libtmux_erlang/README.md) ·\n[Changelog](CHANGELOG.md)\n\n## Install\n\nUse Erlang/OTP **29.1.2**, Rebar3 **3.28.0**, Linux, tmux **3.3a–3.8**, and\n`make` with a C11 compiler. Native records are experimental in OTP 29. The core\nuses OTP libraries and a compiled external helper, with no NIF or third-party\nruntime packages.\n\nAdd the published core application from [Hex](https://hex.pm/packages/libtmux_erlang)\nto your `rebar.config`:\n\n\n\n```erlang\n{deps, [{libtmux_erlang, \"0.0.1\"}]}.\n```\n\nThe API is still developing; pin an exact version and commit `rebar.lock`.\nThe\n[installation guide](docs/installation.md) covers application startup and\nbuilding a consumer from Hex or a source checkout.\n\n## Create, capture and query\n\n### [`tmux_server:with_owned/2`][api-with-owned]: create a private tmux graph\n\nFrom this checkout, compile with the pinned tools:\n\n```console\n$ mise exec -- rebar3 compile\n```\n\nRun the complete program below on a private tmux server:\n\n```console\n$ mise exec -- escript tools/run_examples.escript readme\n```\n\nThe program starts an empty daemon on a unique private socket, verifies its\nassertions, and retires the owned server and clients. It leaves your existing\ntmux sessions alone. It uses only public core APIs and OTP runtime libraries;\nthe archive check also runs it outside this checkout.\nSave it as `readme_demo.erl` when reusing it in an application.\n\n[`tmux_server`](https://libtmux.org/en/erlang/latest/reference/tmux_server/)\nowns the connection and scoped server lifetime.\n[`tmux_snapshot`](https://libtmux.org/en/erlang/latest/reference/tmux_snapshot/)\nholds captured rows;\n[`tmux_select`](https://libtmux.org/en/erlang/latest/reference/tmux_select/)\nfilters those rows locally. A\n[`tmux_query`](https://libtmux.org/en/erlang/latest/reference/tmux_query/)\nexecutes a new observation when fetched.\n\n\n\n```erlang\n-module(readme_demo).\n-moduledoc \"Create a workspace, query its graph and preserve captured values.\".\n-export([run/1]).\n-import_record(tmux_model, [pane]).\n\n-spec run(binary()) -> map().\nrun(Executable) ->\n Options = #{executable => Executable},\n {ok, Result} = tmux_server:with_owned(Options, fun(Server) ->\n {ok, Session} = tmux_session:create(Server, #{name => <<\"workspace\">>,\n window_name => <<\"editor\">>, width => 120, height => 30,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n {ok, Worker} = tmux_window:create(Session,\n #{name => <<\"workers\">>,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n {ok, Right} = tmux_pane:split(Worker, #{direction => horizontal,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n {ok, _} = tmux_window:select_layout(Worker, even_horizontal),\n {ok, _} = tmux_pane:resize(Right, #{width => 40}),\n {ok, Snapshot} = tmux_server:snapshot(Server),\n Windows = tmux_select:windows(Snapshot),\n Workers = #{name => <<\"workers\">>, panes => #{count => 2,\n every => #{current_command => <<\"cat\">>}}},\n {ok, Captured} = tmux_select:one(Workers, Windows),\n {ok, Children} = tmux_snapshot:related(panes, Captured, Snapshot),\n Ids = [Id || #pane{id = Id} <:- Children],\n 2 = length(Ids),\n Criteria = #{width => #{gte => 20},\n window => #{is => #{name => <<\"workers\">>}}},\n Query = tmux_query:where(Criteria, tmux_query:panes(Server)),\n {ok, Fetched} = tmux_query:fetch(Query),\n 2 = tmux_select:size(Fetched),\n {ok, _} = tmux_window:rename(Worker, <<\"finished\">>),\n <<\"workers\">> = tmux_model:get(name, Captured),\n {ok, Fresh} = tmux_query:fetch(tmux_query:where(\n #{name => <<\"finished\">>}, tmux_query:windows(Server))),\n {ok, Renamed} = tmux_select:one(Fresh),\n <<\"finished\">> = tmux_model:get(name, Renamed),\n 1 = length(tmux_snapshot:sessions(Snapshot)),\n 2 = length(tmux_snapshot:windows(Snapshot)),\n 3 = length(tmux_snapshot:panes(Snapshot)),\n #{sessions => 1, windows => 2, panes => 3, matched_panes => 2,\n captured_name => <<\"workers\">>, immutable => true}\n end),\n Result.\n```\n\nThe result includes this checked output. Captured rows keep their original\nvalues after a rename; actions and `fetch` perform explicit I/O.\n`tmux_server:with_owned/2` returns success after verified daemon cleanup. If cleanup fails,\nits error preserves the callback outcome and ownership token for recovery.\n\n\n\n```json\n{\n \"sessions\": 1,\n \"windows\": 2,\n \"panes\": 3,\n \"matched_panes\": 2,\n \"captured_name\": \"workers\",\n \"immutable\": true\n}\n```\n\n## Follow the graph\n\n### [`tmux_snapshot:related/3`][api-related]: follow shared windows\n\nA window can have several links in one session and belong to more than one\nsession. Physical windows and panes remain unique; window links retain each\nsession/index membership.\n\n- [Linked windows and relationship queries](docs/graph.md): build two sessions,\n link a shared window twice, and verify physical and membership counts.\n\n### [`tmux_select:where/2`][api-where]: filter captured rows\n\n- [Local filters and source queries](docs/querying.md): Boolean criteria,\n quantifiers, portable JSON, cardinality, coverage and execution plans.\n- [Fields and operators](docs/fields.md): generated from the runtime schema.\n\n### [`tmux_query:fetch/1`][api-fetch]: observe tmux explicitly\n\nThe [querying guide](docs/querying.md) follows a source query through planning,\nexecution and a new immutable selection. Local filtering preserves its\ncaptured values; fetching performs I/O.\n\n### [`tmux_server:with_server/2`][api-with-server]: borrow an existing server\n\n- [Daemon ownership](docs/ownership.md): choose private startup or a borrowed\n socket, keep their lifetimes explicit and handle incomplete cleanup.\n- [Control attachments](docs/control.md): verify connection identity, inspect\n attachment effects and retire the client explicitly.\n\n### [`tmux_operation:await/2`][api-await]: wait for submitted work\n\n- [Run a job and capture its result](docs/jobs.md): wait for a pane's completion\n event, check its exit status, capture bytes, and cancel a separate operation.\n- [Build command values](docs/commands.md): prepare a rename and resize, submit\n them explicitly and inspect fresh state without changing captured rows.\n\n## More examples\n\n- [Scoped options](docs/options.md): local ownership markers, explicit\n inheritance and sparse arrays, with a source-pinned option catalogue.\n- [Buffers and paste](docs/buffers.md): preserve binary artifacts, inspect\n names and control terminal delivery.\n- [Rearrange panes](docs/panes.md): isolate a running job in a window and join\n it back, preserving its process and the original snapshot.\n- [Apply configuration and await a signal](docs/configuration.md): load settings\n from stdin, observe the event and verify parse-only behavior.\n- [Pipe terminal output](docs/pipe.md): save a job's bytes, await its consumer\n acknowledgement and verify the resulting log.\n- [Hooks and completion](docs/hooks.md): register a split callback, await its\n acknowledgement and remove the local hook.\n- [Key tables](docs/keys.md): register application bindings, inspect native\n listings and remove the owned table.\n- [Native commands](docs/commands-reference.md): source-derived parser metadata\n and feature minimums, separate from library API and runtime qualification.\n- [API browser and source docs](docs/api.md): build searchable native reference\n pages with specs, types and links to the exact source revision.\n\n## Decide whether it fits\n\nThe current path uses bounded one-shot tmux clients. Operations support\nnon-blocking submission, explicit waits, cancellation and ownership transfer.\nAn await timeout abandons that wait; it does not cancel the operation.\nCancellation after dispatch can leave the tmux outcome unknown.\n\nAn explicit control attachment verifies identity on its persistent connection\nand owns its client cleanup. Control command submission and output streams remain\nimplementation work. The\n[support and gaps](docs/compatibility.md) page lists\nwhat is exercised, what remains open, and the required Linux/tmux matrix.\nThere is no control-versus-streaming performance claim.\n\nThe [project policy](docs/project-policy.md) records the OTP application\nboundary and runtime dependencies.\n\n## Verify and contribute\n\n```console\n$ time python3 tools/check.py mid\n```\n\n```console\n$ time python3 tools/check.py outer\n```\n\nThe outer check owns its tmux fixtures and tests installed consumers. See\n[contributor setup](.github/CONTRIBUTING.md) for prerequisites and test budgets,\n[CI](https://github.com/libtmux/libtmux-erlang/actions/workflows/ci.yml) for\nindividual release/architecture results, and the [MIT license](LICENSE).\nMaintainers can follow the [Hex release instructions](.github/RELEASE.md).\n\n[Branding assets](docs/branding.md) include the logo, icons, and social cards.\n\n[api-with-owned]: https://libtmux.org/en/erlang/latest/reference/tmux_server-with_owned-2/\n[api-related]: https://libtmux.org/en/erlang/latest/reference/tmux_snapshot-related-3/\n[api-where]: https://libtmux.org/en/erlang/latest/reference/tmux_select-where-2/\n[api-fetch]: https://libtmux.org/en/erlang/latest/reference/tmux_query-fetch-1/\n[api-with-server]: https://libtmux.org/en/erlang/latest/reference/tmux_server-with_server-2/\n[api-await]: https://libtmux.org/en/erlang/latest/reference/tmux_operation-await-2/\n" + "content": "\n
\n \n \n \"libtmux\n \n
\n\n\n
\n\n

libtmux for Erlang

\n\n

\n Hex.pm ·\n Documentation ·\n API reference ·\n Examples\n

\n\n

\n \"Erlang\n \"libtmux_erlang\"\n \"libtmux.org\"\n \"license\"\n

\n\n
\n\nDrive tmux from Erlang: create [sessions][tmux-session],\n[windows][tmux-window] and [panes][tmux-pane], capture the\n[object graph][tmux-snapshot] as immutable data, filter it, ask tmux again.\n\n[Install](#install) ·\n[Create, capture and query](#create-capture-and-query) ·\n[Find and filter](#find-and-filter) ·\n[Plan and optimise](#plan-and-optimise-a-query) ·\n[Batch commands](#run-commands-together) ·\n[Own a server](#own-a-server-and-wait-for-work) ·\n[Packages](#packages) ·\n[Core package](apps/libtmux_erlang/README.md) ·\n[Support](#support-and-status) ·\n[Changelog](CHANGELOG.md)\n\n## Install\n\nIt needs:\n\n- Erlang/OTP 29 and Rebar3.\n- tmux 3.3a or newer, on Linux (including WSL).\n- `make` and a C11 compiler, to build the bundled helper.\n\nAdd the core from [Hex](https://hex.pm/packages/libtmux_erlang) to your\n`rebar.config`:\n\n\n\n```erlang\n{deps, [{libtmux_erlang, \"0.0.1\"}]}.\n```\n\nThe API is still developing. Pin an exact version and commit `rebar.lock`.\n\nMore: [installation guide](docs/installation.md).\n\n## Create, capture and query\n\n### [`tmux_server:with_owned/2`][api-with-owned]: create a private tmux graph\n\nThe example below uses four modules:\n\n- [`tmux_server`][tmux-server]: owns the connection and the server's lifetime.\n- [`tmux_snapshot`][tmux-snapshot]: holds captured rows.\n- [`tmux_select`][tmux-select]: filters those rows locally.\n- [`tmux_query`][tmux-query]: asks tmux again when fetched.\n\nFrom a checkout of this repository, compile it:\n\n```console\n$ mise exec -- rebar3 compile\n```\n\nRun it on a private tmux server:\n\n```console\n$ mise exec -- escript tools/run_examples.escript readme\n```\n\nIt starts an empty daemon on its own socket, then stops that daemon and its\nclients. Your existing sessions are untouched. To reuse the program, save it as\n`readme_demo.erl`.\n\n\n\n```erlang\n-module(readme_demo).\n-moduledoc \"Create a workspace, query its graph and preserve captured values.\".\n-export([run/1]).\n-import_record(tmux_model, [pane]).\n\n-spec run(binary()) -> map().\nrun(Executable) ->\n Options = #{executable => Executable},\n {ok, Result} = tmux_server:with_owned(Options, fun(Server) ->\n {ok, Session} = tmux_session:create(Server, #{name => <<\"workspace\">>,\n window_name => <<\"editor\">>, width => 120, height => 30,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n {ok, Worker} = tmux_window:create(Session,\n #{name => <<\"workers\">>,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n {ok, Right} = tmux_pane:split(Worker, #{direction => horizontal,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n {ok, _} = tmux_window:select_layout(Worker, even_horizontal),\n {ok, _} = tmux_pane:resize(Right, #{width => 40}),\n {ok, Snapshot} = tmux_server:snapshot(Server),\n Windows = tmux_select:windows(Snapshot),\n Workers = #{name => <<\"workers\">>, panes => #{count => 2,\n every => #{current_command => <<\"cat\">>}}},\n {ok, Captured} = tmux_select:one(Workers, Windows),\n {ok, Children} = tmux_snapshot:related(panes, Captured, Snapshot),\n Ids = [Id || #pane{id = Id} <:- Children],\n 2 = length(Ids),\n Criteria = #{width => #{gte => 20},\n window => #{is => #{name => <<\"workers\">>}}},\n Query = tmux_query:where(Criteria, tmux_query:panes(Server)),\n {ok, Fetched} = tmux_query:fetch(Query),\n 2 = tmux_select:size(Fetched),\n {ok, _} = tmux_window:rename(Worker, <<\"finished\">>),\n <<\"workers\">> = tmux_model:get(name, Captured),\n {ok, Fresh} = tmux_query:fetch(tmux_query:where(\n #{name => <<\"finished\">>}, tmux_query:windows(Server))),\n {ok, Renamed} = tmux_select:one(Fresh),\n <<\"finished\">> = tmux_model:get(name, Renamed),\n 1 = length(tmux_snapshot:sessions(Snapshot)),\n 2 = length(tmux_snapshot:windows(Snapshot)),\n 3 = length(tmux_snapshot:panes(Snapshot)),\n #{sessions => 1, windows => 2, panes => 3, matched_panes => 2,\n captured_name => <<\"workers\">>, immutable => true}\n end),\n Result.\n```\n\nIt returns:\n\n\n\n```json\n{\n \"sessions\": 1,\n \"windows\": 2,\n \"panes\": 3,\n \"matched_panes\": 2,\n \"captured_name\": \"workers\",\n \"immutable\": true\n}\n```\n\n- Captured rows keep their values after the rename. Actions and `fetch` do I/O.\n- `with_owned/2` returns after verified cleanup. If cleanup fails, the error\n keeps the callback's outcome and the ownership token.\n\nMore: [Daemon ownership](docs/ownership.md).\n\n### [`tmux_pane:send_text/2`][api-send-text] and [`tmux_pane:capture/2`][api-capture]: type into a pane and read it back\n\n[`tmux_pane:send_keys/2`][api-send-keys] sends named keys such as Enter. A send\nreturns before the program reads it, so the shell signals a tmux channel and\nthe program awaits that signal before it captures:\n\n```console\n$ mise exec -- escript tools/run_examples.escript typing\n```\n\n\n\n```erlang\n-module(typing_demo).\n-moduledoc \"Type a command into a shell pane, wait for it, read the screen.\".\n-export([run/1]).\n\n-spec run(binary()) -> map().\nrun(Executable) ->\n {ok, Result} = tmux_server:with_owned(#{executable => Executable},\n fun(Server) ->\n Shell = #{argv => [<<\"/bin/sh\">>]},\n {ok, _} = tmux_session:create(Server, #{name => <<\"typing\">>,\n width => 120, height => 30, launch => Shell}),\n {ok, Snapshot} = tmux_server:snapshot(Server),\n [Pane] = tmux_snapshot:panes(Snapshot),\n % The shell signals a tmux channel once it has printed.\n {ok, Wait} = tmux_command:wait_for(<<\"typed\">>, wait),\n {ok, Operation} = tmux_operation:start(Server, Wait, #{}),\n Signal = <<\"'\", Executable/binary, \"' wait-for -S typed\">>,\n Line = <<\"echo hello; \", Signal/binary>>,\n {ok, _} = tmux_pane:send_text(Pane, Line),\n {ok, _} = tmux_pane:send_keys(Pane, [enter]),\n {ok, _} = tmux_operation:await(Operation, 2000),\n {ok, Screen} = tmux_pane:capture(Pane, #{}),\n Rows = binary:split(Screen, <<\"\\n\">>, [global]),\n true = lists:member(<<\"hello\">>, Rows),\n #{typed => <<\"echo hello\">>, screen_row => <<\"hello\">>}\n end),\n Result.\n```\n\nIt returns:\n\n\n\n```json\n{\n \"typed\": \"echo hello\",\n \"screen_row\": \"hello\"\n}\n```\n\n- [`tmux_pane:kill/1`][api-kill-pane], [`tmux_window:kill/1`][api-kill-window]\n and [`tmux_session:kill/1`][api-kill-session] remove one target.\n- [`tmux_option:set/3`][api-option-set] and [`tmux_option:get/3`][api-option-get]\n write and read options; [`tmux_hook:set/3`][api-hook-set] and\n [`tmux_hook:get/3`][api-hook-get] do the same for hooks.\n\nMore: [Wait for a terminal job, then capture its output](docs/jobs.md).\n\n## Find and filter\n\n### [`tmux_snapshot:related/3`][api-related]: follow shared windows\n\nA window can be linked more than once in a session, and into several sessions.\nPhysical windows and panes stay unique; each link keeps its session and index.\n\nMore: [Linked windows and relationship queries](docs/graph.md).\n\n### [`tmux_select:where/2`][api-where]: filter captured rows\n\nFiltering runs locally on captured rows and never calls tmux.\n[`tmux_filter`][tmux-filter] validates a filter and encodes it as portable\nJSON. This program needs no tmux server:\n\n```console\n$ mise exec -- escript tools/run_examples.escript filter\n```\n\n\n\n```erlang\n-module(filter_demo).\n-moduledoc \"Validate portable JSON and filter captured rows without tmux I/O.\".\n-export([run/0]).\n\n-spec run() -> map().\nrun() ->\n {ok, Editor} = tmux_model:pane(#{id => <<\"%1\">>, active => true,\n width => 120, current_command => <<\"nvim\">>}),\n {ok, Shell} = tmux_model:pane(#{id => <<\"%2\">>, active => false,\n width => 80, current_command => <<\"bash\">>}),\n Panes = tmux_select:from_list(pane, [Editor, Shell]),\n Criteria = #{active => true, 'or' => [\n #{current_command => #{in => [<<\"nvim\">>, <<\"vim\">>]}},\n #{width => #{gte => 160}}\n ]},\n {ok, Filter} = tmux_filter:new(pane, Criteria),\n Encoded = iolist_to_binary(json:encode(tmux_filter:to_wire(Filter))),\n {ok, Document} = tmux_filter:decode_json(Encoded),\n {ok, RoundTrip} = tmux_filter:from_wire(pane, Document),\n {ok, Editor} = tmux_select:one(RoundTrip, Panes),\n [Editor] = tmux_select:to_list(tmux_select:where(Filter, Panes)),\n {error, #{code := duplicate_key}} = tmux_filter:decode_json(\n <<\"{\\\"version\\\":1,\\\"version\\\":2}\">>),\n Invalid = #{active => #{contains => <<\"yes\">>}},\n try tmux_select:where(Invalid, Panes) of\n _ -> error(expected_validation_error)\n catch\n error:{bad_filter, #{code := unsupported_operator} = Detail}:Stack ->\n [active, contains] = maps:get(path, Detail),\n Reason = {bad_filter, Detail},\n Message = erl_error:format_exception(error, Reason, Stack),\n Text = unicode:characters_to_binary(Message),\n {_, _} = binary:match(Text, <<\"Allowed:\">>)\n end,\n #{matched_ids => [tmux_model:get(id, Editor)],\n wire_round_trip => true, duplicate_keys_rejected => true}.\n```\n\nIt returns:\n\n\n\n```json\n{\n \"matched_ids\": [\"%1\"],\n \"wire_round_trip\": true,\n \"duplicate_keys_rejected\": true\n}\n```\n\n- Criteria are maps or Boolean functions, with quantifiers and portable JSON.\n- An unknown field or operator fails before any row is read.\n\nMore: [Local filters and source queries](docs/querying.md) ·\n[Fields and operators](docs/fields.md).\n\n### [`tmux_query:fetch/1`][api-fetch]: read tmux again\n\nA query asks tmux when you fetch it and returns a new immutable selection.\nRows you already hold keep their values.\n\nMore: [Local filters and source queries](docs/querying.md).\n\n## Plan and optimise a query\n\n### [`tmux_query:explain/1`][api-explain]: see what tmux runs\n\n`explain/1` describes a query without calling tmux. This program explains one\nquery twice, then fetches it and checks that the rows agree:\n\n```console\n$ mise exec -- escript tools/run_examples.escript plan\n```\n\n\n\n```erlang\n-module(plan_demo).\n-moduledoc \"Explain a query, let tmux exclude candidates, then fetch it.\".\n-export([run/1]).\n\n-spec run(binary()) -> map().\nrun(Executable) ->\n {ok, Result} = tmux_server:with_owned(#{executable => Executable},\n fun(Server) ->\n Cat = #{launch => #{argv => [<<\"/bin/cat\">>]}},\n Wide = Cat#{name => <<\"plan\">>, width => 120, height => 30},\n {ok, Session} = tmux_session:create(Server, Wide),\n {ok, Window} = tmux_window:create(Session, Cat),\n {ok, _} = tmux_pane:split(Window, Cat#{direction => horizontal}),\n Criteria = #{width => #{lt => 100},\n current_command => <<\"cat\">>},\n Query = tmux_query:where(Criteria, tmux_query:panes(Server)),\n Pushed = tmux_query:pushdown(true, Query),\n % explain/1 does no I/O: it only describes what fetch would run.\n #{candidate := #{format := Local}} = tmux_query:explain(Query),\n #{candidate := #{format := Native, local_only := Kept}} =\n tmux_query:explain(Pushed),\n {ok, Everything} = tmux_query:fetch(Query),\n {ok, Narrowed} = tmux_query:fetch(Pushed),\n {ok, Isolated} = tmux_query:fetch(Pushed,\n #{hydration => isolated}),\n Ids = ids(Narrowed),\n 2 = length(Ids),\n Ids = ids(Everything),\n Ids = ids(Isolated),\n #{local_candidate => Local, native_candidate => Native,\n kept_local => [maps:get(field, Reason) || Reason <- Kept],\n matched_panes => length(Ids), same_rows => true}\n end),\n Result.\n\nids(Selection) ->\n [tmux_model:get(id, Pane) || Pane <- tmux_select:to_list(Selection)].\n```\n\nIt returns:\n\n\n\n```json\n{\n \"local_candidate\": \"1\",\n \"native_candidate\": \"#{e|<|:#{pane_width},100}\",\n \"kept_local\": [\"tmux.pane.currentCommand\"],\n \"matched_panes\": 2,\n \"same_rows\": true\n}\n```\n\n- `local_candidate`: without pushdown, tmux drops nothing.\n- `native_candidate`: the tmux format that drops rows before capture.\n- `kept_local`: fields tmux cannot filter stay in Erlang.\n\nMore: [Source plans](docs/querying.md#source-plans).\n\n### [`tmux_query:pushdown/2`][api-pushdown]: let tmux drop rows first\n\nPushdown is off by default. Turn it on to add a candidate scan that excludes\nrows before capture. The full filter still runs locally, so a candidate can\nadmit extra rows but never hides a match.\n\nThe program above also fetches with `hydration => isolated`, which reads one\nfield per row when a single scan would pass the output limit.\n\nCaptures span several commands and are not atomic.\n\nMore: [Source plans](docs/querying.md#source-plans).\n\n## Run commands together\n\n### [`tmux_command:sequence/1`][api-sequence]: several commands, one call\n\nBuild commands without I/O, join them and run them once. A sequence is not\natomic: a failing member can leave the commands before it applied.\n\n```console\n$ mise exec -- escript tools/run_examples.escript batch\n```\n\n\n\n```erlang\n-module(batch_demo).\n-moduledoc \"Run several commands in one tmux client and read an option batch.\".\n-export([run/1]).\n\n-spec run(binary()) -> map().\nrun(Executable) ->\n {ok, Result} = tmux_server:with_owned(#{executable => Executable},\n fun(Server) ->\n Cat = #{launch => #{argv => [<<\"/bin/cat\">>]}},\n {ok, Session} = tmux_session:create(Server,\n Cat#{name => <<\"batch\">>}),\n {ok, Window} = tmux_window:create(Session, Cat),\n Id = tmux_model:get(id, Session),\n {ok, Rename} = tmux_session:rename_command(Session, <<\"batched\">>),\n {ok, Stage} = tmux_command:raw(<<\"set-option\">>,\n [<<\"-t\">>, Id, <<\"@stage\">>, <<\"built\">>]),\n {ok, Owner} = tmux_command:raw(<<\"set-option\">>,\n [<<\"-t\">>, Id, <<\"@owner\">>, <<\"batch-demo\">>]),\n % Three commands, one native sequence. A failure can leave a prefix.\n {ok, Sequence} = tmux_command:sequence([Rename, Stage, Owner]),\n {ok, #{exit_status := 0}} =\n tmux_server:command(Server, Sequence, #{}),\n {ok, Renamed} = tmux_session:get(Server, Id),\n {ok, [<<\"built\">>, none]} =\n tmux_option:get_many([Session, Window], <<\"@stage\">>, #{}),\n #{commands => 3, session_name => tmux_model:get(name, Renamed),\n stage => <<\"built\">>, window_stage => none}\n end),\n Result.\n```\n\nIt returns:\n\n\n\n```json\n{\n \"commands\": 3,\n \"session_name\": \"batched\",\n \"stage\": \"built\",\n \"window_stage\": \"none\"\n}\n```\n\n- [`tmux_option:get_many/3`][api-get-many] reads one option from up to seven\n rows in one batch.\n\nMore: [Build command values](docs/commands.md) ·\n[Scoped options](docs/options.md).\n\n## Own a server and wait for work\n\n### [`tmux_server:with_server/2`][api-with-server]: borrow an existing server\n\nClosing the handle leaves the borrowed server and its sessions alone.\n[`tmux_server:with_owned/2`][api-with-owned] starts a private one instead.\n\nMore: [Daemon ownership](docs/ownership.md) ·\n[Control attachments](docs/control.md).\n\n### [`tmux_control:attach/3`][api-attach]: hold a control attachment\n\nAttach to a session over a persistent connection, check its identity on that\nconnection, then close it and confirm cleanup. Commands still run through\none-shot clients; control command submission and output streams are not built.\n\n```console\n$ mise exec -- escript tools/run_examples.escript control\n```\n\n\n\n```erlang\n-module(control_demo).\n-moduledoc \"Attach explicitly, inspect captured values and prove detachment.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"control-demo\">>, width => 120, height => 30,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n Id = tmux_model:get(id, Session),\n 0 = tmux_model:get(attached_count, Session),\n {ok, Control} = tmux_control:attach(Server, Session, #{}),\n tmux_scope:run_or_error(fun() ->\n {ok, #{phase := open, identity := same_connection}} =\n tmux_control:status(Control),\n {ok, Attached} = tmux_session:get(Server, Id),\n 1 = tmux_model:get(attached_count, Attached),\n {ok, Graph} = tmux_server:snapshot(Server),\n [Window] = tmux_snapshot:windows(Graph),\n 120 = tmux_model:get(width, Window),\n 30 = tmux_model:get(height, Window),\n ok = tmux_control:close(Control),\n {ok, #{phase := closed, cleanup := complete}} =\n tmux_control:status(Control),\n {ok, Detached} = tmux_session:get(Server, Id),\n 0 = tmux_model:get(attached_count, Detached),\n 0 = tmux_model:get(attached_count, Session),\n #{identity => same_connection, attached_count => 1,\n detached_count => 0, window_size => [120, 30],\n cleanup => complete, session_preserved => true}\n end, fun() ->\n ok = tmux_control:close(Control)\n end)\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\nIt returns:\n\n\n\n```json\n{\n \"identity\": \"same_connection\",\n \"attached_count\": 1,\n \"detached_count\": 0,\n \"window_size\": [120, 30],\n \"cleanup\": \"complete\",\n \"session_preserved\": true\n}\n```\n\nMore: [Control attachments](docs/control.md).\n\n### [`tmux_operation:await/2`][api-await]: wait for submitted work\n\nSubmit an operation without blocking, then await it, cancel it or hand it to\nanother process. Capture a job's exit status and output bytes.\n\nMore: [Run a job and capture its result](docs/jobs.md) ·\n[Build command values](docs/commands.md).\n\n## More examples\n\n- [Scoped options](docs/options.md): local, inherited and sparse-array options.\n- [Buffers and paste](docs/buffers.md): binary data and terminal delivery.\n- [Rearrange panes](docs/panes.md): move a running job to its own window and\n back.\n- [Apply configuration and await a signal](docs/configuration.md): load\n settings from stdin.\n- [Pipe terminal output](docs/pipe.md): save a job's bytes to a log.\n- [Hooks and completion](docs/hooks.md): register a split hook and remove it.\n- [Key tables](docs/keys.md): add application bindings and remove them.\n- [Native commands](docs/commands-reference.md): parser metadata and feature\n minimums for each tmux command.\n- [API browser and source docs](docs/api.md): build the reference pages with\n specs, types and source links.\n\n## Packages\n\n| Package | What it is | Hex |\n| --- | --- | --- |\n| [`libtmux_erlang`](apps/libtmux_erlang/README.md) | The core OTP application: servers, sessions, windows, panes, snapshots and queries. | [![libtmux_erlang](https://img.shields.io/hexpm/v/libtmux_erlang?label=libtmux_erlang)](https://hex.pm/packages/libtmux_erlang) |\n\n### [`libtmux_erlang`](https://github.com/libtmux/libtmux-erlang/tree/master/apps/libtmux_erlang): the core application\n\nServers, sessions, windows, panes, snapshots and queries, with a bundled C\nhelper for bounded tmux I/O.\n\n[![libtmux_erlang](https://img.shields.io/hexpm/v/libtmux_erlang?label=libtmux_erlang)](https://hex.pm/packages/libtmux_erlang)\n[API reference](https://libtmux.org/en/erlang/latest/reference/) ·\n[Documentation](https://libtmux.org/en/erlang/) ·\n[Hex.pm](https://hex.pm/packages/libtmux_erlang) ·\n[Changelog](apps/libtmux_erlang/CHANGELOG.md)\n\nMore: [package README](apps/libtmux_erlang/README.md) inspects an existing\nsocket.\n\n## Support and status\n\n- **Status:** early. Any release may change the API.\n- **Platform:** Linux, including WSL. macOS and native Windows are not\n advertised.\n- **tmux:** 3.3a or newer. A release newer than the tested ones returns\n `unsupported_option_catalogue` for built-in options and hooks.\n- **Erlang/OTP:** 29 only. The application refuses to start on another release.\n Rows are native records, which OTP 29 marks experimental.\n- **Dependencies:** OTP only. The helper is an external program, not a NIF.\n- **Operations:** an await timeout abandons the wait; it does not cancel the\n operation. Cancelling after dispatch can leave the tmux outcome unknown.\n\nMore: [Support and gaps](docs/compatibility.md) ·\n[Project policy](docs/project-policy.md).\n\n## What it leaves out\n\n- **Control command submission and output streams.** Control attachments\n verify their connection and clean up their client; commands still run\n through one-shot clients.\n\n## Contribute\n\nRun `mid` while you work and `outer` before a pull request:\n\n```console\n$ time python3 tools/check.py mid\n```\n\n```console\n$ time python3 tools/check.py outer\n```\n\n- [Contributor setup](.github/CONTRIBUTING.md): prerequisites and test budgets.\n- [CI](https://github.com/libtmux/libtmux-erlang/actions/workflows/ci.yml):\n results per commit.\n- [Hex release instructions](.github/RELEASE.md), for maintainers.\n- [Branding assets](docs/branding.md): logo, icons and social cards.\n- [MIT license](LICENSE).\n\n[tmux-session]: https://libtmux.org/en/erlang/latest/reference/tmux_session/\n[tmux-window]: https://libtmux.org/en/erlang/latest/reference/tmux_window/\n[tmux-pane]: https://libtmux.org/en/erlang/latest/reference/tmux_pane/\n[tmux-server]: https://libtmux.org/en/erlang/latest/reference/tmux_server/\n[tmux-snapshot]: https://libtmux.org/en/erlang/latest/reference/tmux_snapshot/\n[tmux-select]: https://libtmux.org/en/erlang/latest/reference/tmux_select/\n[tmux-query]: https://libtmux.org/en/erlang/latest/reference/tmux_query/\n[tmux-filter]: https://libtmux.org/en/erlang/latest/reference/tmux_filter/\n[api-with-owned]: https://libtmux.org/en/erlang/latest/reference/tmux_server-with_owned-2/\n[api-related]: https://libtmux.org/en/erlang/latest/reference/tmux_snapshot-related-3/\n[api-where]: https://libtmux.org/en/erlang/latest/reference/tmux_select-where-2/\n[api-fetch]: https://libtmux.org/en/erlang/latest/reference/tmux_query-fetch-1/\n[api-with-server]: https://libtmux.org/en/erlang/latest/reference/tmux_server-with_server-2/\n[api-await]: https://libtmux.org/en/erlang/latest/reference/tmux_operation-await-2/\n[api-explain]: https://libtmux.org/en/erlang/latest/reference/tmux_query-explain-1/\n[api-pushdown]: https://libtmux.org/en/erlang/latest/reference/tmux_query-pushdown-2/\n[api-sequence]: https://libtmux.org/en/erlang/latest/reference/tmux_command-sequence-1/\n[api-get-many]: https://libtmux.org/en/erlang/latest/reference/tmux_option-get_many-3/\n[api-attach]: https://libtmux.org/en/erlang/latest/reference/tmux_control-attach-3/\n[api-send-text]: https://libtmux.org/en/erlang/latest/reference/tmux_pane-send_text-2/\n[api-send-keys]: https://libtmux.org/en/erlang/latest/reference/tmux_pane-send_keys-2/\n[api-capture]: https://libtmux.org/en/erlang/latest/reference/tmux_pane-capture-2/\n[api-kill-pane]: https://libtmux.org/en/erlang/latest/reference/tmux_pane-kill-1/\n[api-kill-window]: https://libtmux.org/en/erlang/latest/reference/tmux_window-kill-1/\n[api-kill-session]: https://libtmux.org/en/erlang/latest/reference/tmux_session-kill-1/\n[api-option-set]: https://libtmux.org/en/erlang/latest/reference/tmux_option-set-3/\n[api-option-get]: https://libtmux.org/en/erlang/latest/reference/tmux_option-get-3/\n[api-hook-set]: https://libtmux.org/en/erlang/latest/reference/tmux_hook-set-3/\n[api-hook-get]: https://libtmux.org/en/erlang/latest/reference/tmux_hook-get-3/\n" }, { "path": "docs/installation.md", - "content": "# Install the core application\n\nThe core OTP application is\n[`libtmux_erlang`](https://hex.pm/packages/libtmux_erlang) on Hex.\n\nThe [README](../README.md#install) contains the dependency declaration tested\nin an isolated Rebar3 consumer. Pin an exact version while the API develops\nand commit `rebar.lock` to retain the resolved package checksum.\n\nAdd `libtmux_erlang` to your application's `applications` list in its\n`.app.src`. For an interactive consumer, compile and start the Rebar3 shell:\n\n```console\n$ rebar3 compile\n```\n\n```console\n$ rebar3 shell\n```\n\n## Install a source checkout\n\nThe repository is an umbrella. For development from source, use `git_subdir`\nto select `apps/libtmux_erlang`:\n\n\n\n```erlang\n{deps, [\n {libtmux_erlang, {git_subdir,\n \"https://github.com/libtmux/libtmux-erlang.git\",\n {branch, \"master\"}, \"apps/libtmux_erlang\"}}\n]}.\n```\n\nRebar3 records the branch's resolved commit in `rebar.lock`. To select a\nreviewed commit directly, use `{ref, Commit}` instead of `{branch, \"master\"}`.\n\n## Inspect an existing server\n\n`open/1` borrows an existing daemon. It does not start tmux or create a session.\nFrom a shell attached to the server you intend to inspect, obtain its socket:\n\n```console\n$ export LIBTMUX_SOCKET=\"$(tmux display-message -p '#{socket_path}')\"\n```\n\nSave this module as `src/inspect_demo.erl` in the consumer application:\n\n\n\n```erlang\n-module(inspect_demo).\n-moduledoc \"Inspect an existing tmux socket without changing its sessions.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, _} = application:ensure_all_started(libtmux_erlang),\n Endpoint = #{socket_path => Socket, executable => Executable},\n {ok, Result} = tmux_server:with_server(Endpoint, fun(Server) ->\n {ok, Snapshot} = tmux_server:snapshot(Server),\n #{sessions => length(tmux_snapshot:sessions(Snapshot)),\n windows => length(tmux_snapshot:windows(Snapshot)),\n panes => length(tmux_snapshot:panes(Snapshot))}\n end),\n Result.\n```\n\nRun it through the consumer's Rebar shell. The executable path comes from PATH;\nthe socket must be the absolute path selected above:\n\n```console\n$ rebar3 shell \\\n --eval '\n Socket = list_to_binary(os:getenv(\"LIBTMUX_SOCKET\")),\n Tmux = list_to_binary(os:find_executable(\"tmux\")),\n io:format(\"~p~n\", [inspect_demo:run(Socket, Tmux)]),\n halt().'\n```\n\nThe returned map counts physical objects in one captured view. Closing the\nlibrary handle preserves the borrowed daemon and its sessions. This module\nalso runs against the installed archive in the outer check. The private-server\n[README program](../README.md#create-capture-and-query) adds creation, native\nrecord patterns, graph traversal and a fresh query.\n\nDirect native-record construction needs `tmux_model` loaded first; its\nconstructors load normally and validate observations. Do not distribute record\nheaders or serialize record internals as a wire format.\n\n## Requirements\n\n| Component | Current requirement |\n| --- | --- |\n| Erlang/OTP | Exactly the qualified latest-stable baseline, 29.1.2 |\n| Build tool | Rebar3 3.28.0 |\n| tmux | 3.3a–3.8, including intermediate releases; CI tests both endpoints |\n| Runtime platform | Linux x86_64 and arm64 qualification cells |\n| Native build | C11 compiler, libc headers and make |\n| Core dependencies | OTP kernel, stdlib and crypto; no JSON package or NIF |\n| Checkout example runner | Python 3.12+ for owned-server readiness observation |\n\nThe helper builds from its packaged C source. Installation must fail if that\nbuild fails; there is no runtime executable download. The helper's original\nlicense is retained separately from the project's MIT license.\n\nHex serves the core package; HexDocs is not published. The hosted\n[API reference](https://libtmux.org/en/erlang/latest/reference/) lives on the\n[shared documentation site](https://libtmux.org/en/erlang/), and\n[API docs](api.md) describe the local browser build.\n[Compatibility](compatibility.md) separates current checks from the remaining\nsuite and delivery gates.\n" + "content": "# Install the core application\n\nThe core OTP application is\n[`libtmux_erlang`](https://hex.pm/packages/libtmux_erlang) on Hex.\n\nThe [README](../README.md#install) has the dependency declaration. Pin an exact\nversion while the API develops, and commit `rebar.lock` to keep the resolved\npackage checksum.\n\nAdd `libtmux_erlang` to your application's `applications` list in its\n`.app.src`. To try it interactively, compile and start the Rebar3 shell:\n\n```console\n$ rebar3 compile\n```\n\n```console\n$ rebar3 shell\n```\n\n## Install a source checkout\n\nThe repository is an umbrella. Use `git_subdir` to select\n`apps/libtmux_erlang`:\n\n\n\n```erlang\n{deps, [\n {libtmux_erlang, {git_subdir,\n \"https://github.com/libtmux/libtmux-erlang.git\",\n {branch, \"master\"}, \"apps/libtmux_erlang\"}}\n]}.\n```\n\n- Rebar3 records the branch's resolved commit in `rebar.lock`.\n- To pin a reviewed commit, use `{ref, Commit}` instead of\n `{branch, \"master\"}`.\n\n## Inspect an existing server\n\n`open/1` borrows an existing daemon. It starts no tmux and creates no session.\nThe library needs the socket's absolute path. From a shell attached to the\nserver you want to inspect, get it:\n\n```console\n$ export LIBTMUX_SOCKET=\"$(tmux display-message -p '#{socket_path}')\"\n```\n\nSave this module as `src/inspect_demo.erl` in the consumer application:\n\n\n\n```erlang\n-module(inspect_demo).\n-moduledoc \"Inspect an existing tmux socket without changing its sessions.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, _} = application:ensure_all_started(libtmux_erlang),\n Endpoint = #{socket_path => Socket, executable => Executable},\n {ok, Result} = tmux_server:with_server(Endpoint, fun(Server) ->\n {ok, Snapshot} = tmux_server:snapshot(Server),\n #{sessions => length(tmux_snapshot:sessions(Snapshot)),\n windows => length(tmux_snapshot:windows(Snapshot)),\n panes => length(tmux_snapshot:panes(Snapshot))}\n end),\n Result.\n```\n\nRun it through the consumer's Rebar shell. The tmux executable comes from\n`PATH`. The socket must be the absolute path above:\n\n```console\n$ rebar3 shell \\\n --eval '\n Socket = list_to_binary(os:getenv(\"LIBTMUX_SOCKET\")),\n Tmux = list_to_binary(os:find_executable(\"tmux\")),\n io:format(\"~p~n\", [inspect_demo:run(Socket, Tmux)]),\n halt().'\n```\n\n- The returned map counts physical objects in one captured view.\n- Closing the library handle leaves the borrowed daemon and its sessions.\n- The [README program](../README.md#create-capture-and-query) starts its own\n private server. It adds creation, native record patterns, graph traversal\n and a fresh query.\n- To build a native record yourself, load `tmux_model` first. Its constructors\n load normally and validate observations.\n- Do not distribute record headers or serialize record internals as a wire\n format.\n\n## Requirements\n\n| Component | Requirement |\n| --- | --- |\n| Erlang/OTP | 29 |\n| Build tool | Rebar3 |\n| tmux | 3.3a or newer |\n| Platform | Linux, including WSL |\n| Native build | C11 compiler, libc headers and make |\n| Core dependencies | OTP kernel, stdlib and crypto; no JSON package or NIF |\n| Checkout example runner | Python 3.12 or newer |\n\n- The helper builds from its packaged C source. Installation fails if that\n build fails. Nothing is downloaded at runtime.\n- The helper's original license is kept apart from the project's MIT license.\n- Hex serves the core. HexDocs is not published. The\n [API reference](https://libtmux.org/en/erlang/latest/reference/) lives on the\n [shared documentation site](https://libtmux.org/en/erlang/), and\n [API docs](api.md) describe the local build.\n\n[Compatibility](compatibility.md) lists the tested cells and the open gaps.\n" }, { "path": "docs/graph.md", - "content": "# Query a shared window without losing its memberships\n\nThis program creates two sessions, a shared two-pane window, and two extra\nwindow links. It then checks the physical object graph and session-relative\nmembership counts. `tmux_window_link` acts on a session/index membership and\nchecks its expected physical window before dispatch.\n\nSelecting a window membership changes that session's current window.\n`tmux_session:select/2` switches one explicitly named attached client to a\nsession. It never attaches a client or chooses a current client implicitly.\nIts `tmux_session:select/3` variant updates the destination environment only\nwhen requested. Client names can be reused after disconnection; this call\ndoes not provide an atomic client-incarnation check. The native API contract\ndocuments name lookup and environment-removal semantics.\n\nRun it on a private server after compiling:\n\n```console\n$ mise exec -- escript tools/run_examples.escript graph\n```\n\n\n\n```erlang\n-module(linked_graph).\n-moduledoc \"Distinguish physical windows from their session memberships.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n Endpoint = #{socket_path => Socket, executable => Executable},\n {ok, Server} = tmux_server:open(Endpoint),\n tmux_scope:run_or_error(fun() ->\n {ok, Work} = tmux_session:create(Server,\n #{name => <<\"work\">>, launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n {ok, Mirror} = tmux_session:create(Server,\n #{name => <<\"mirror\">>, launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n {ok, Shared} = tmux_window:create(Work,\n #{name => <<\"shared\">>,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n Launch = #{launch => #{argv => [<<\"/bin/cat\">>]}},\n {ok, _} = tmux_pane:split(Shared, Launch),\n WorkId = tmux_model:get(id, Work),\n WindowId = tmux_model:get(id, Shared),\n {ok, Before} = tmux_server:snapshot(Server),\n {ok, Source} = tmux_select:one(#{window_id => WindowId},\n tmux_select:window_links(Before)),\n {ok, _} = tmux_window_link:link(Source, Work, #{index => 7}),\n {ok, _} = tmux_window_link:link(\n Source, Mirror, #{index => 9}),\n {ok, Snapshot} = tmux_server:snapshot(Server),\n 3 = length(tmux_snapshot:windows(Snapshot)),\n 4 = length(tmux_snapshot:panes(Snapshot)),\n 5 = length(tmux_snapshot:window_links(Snapshot)),\n {ok, CapturedWork} = tmux_snapshot:get(\n session, WorkId, Snapshot),\n {ok, Physical} = tmux_snapshot:related(\n windows, CapturedWork, Snapshot),\n {ok, Memberships} = tmux_snapshot:related(\n window_links, CapturedWork, Snapshot),\n 2 = length(Physical),\n 3 = length(Memberships),\n Criteria = #{window_links => #{count => 3},\n panes => #{every => #{current_command => <<\"cat\">>},\n count => 2}},\n {ok, Only} = tmux_select:one(\n Criteria, tmux_select:windows(Snapshot)),\n WindowId = tmux_model:get(id, Only),\n #{physical_windows => 3, physical_panes => 4, window_links => 5,\n work_windows => 2, work_memberships => 3,\n shared_window_panes => 2}\n end, fun() ->\n {ok, _} = tmux_session:kill(Mirror),\n ok\n end)\n end, fun() ->\n {ok, _} = tmux_session:kill(Work),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\nThere are three physical windows and four physical panes. Five window links\nremain because the shared window occurs at two indexes in `work` and once\nin `mirror`. The windows relationship yields two unique windows for `work`;\nits window_links relationship retains all three memberships. Both traversals\nuse `tmux_snapshot:related/3`.\n\nA link is identified within a capture by session, index and expected physical\nwindow. It has no stable tmux link ID. Captured index references cannot promise\natomic compare-and-act after another client moves a link.\n\nUse `tmux_window_link:get/3` for a fresh membership. `link/3` adds a membership;\n`move/3` moves just the checked membership; `swap/3` exchanges two memberships'\nphysical windows. Their input rows must share one registered owner. Actions\nreturn command results and leave captured values unchanged.\n\n`select/1` selects the checked window in its session. `unlink/2` removes one\nmembership, retaining tmux's last-link protection by default. Explicit\n`force => true` can destroy the physical window if its final membership goes.\n`tmux_window:kill/1` destroys that window across all links.\n\nIf a captured index disappears or names another physical window, actions\nreturn `stale_link` before dispatch. `tmux_server:bind/2` applies this same\nprecondition when rebinding a link to an owner. It does not adopt the new\noccupant of an old index. The one-shot preflight and action are separate;\nanother client can still change that membership between them.\n\nThe relation query checks the full captured graph. Filtering a window selection\ndoes not replace its panes with only matching panes. `some`, `every`, `none`\nand `count` require complete membership coverage, including empty selections.\nThe [query guide](querying.md) explains validation and correlation.\n\n## Compare captured server incarnations\n\nLive `tmux_snapshot:metadata/1` includes an opaque server_instance value.\n`tmux_identity:fingerprint/1` derives a versioned binary comparison key from\nthat captured identity without I/O. The key survives reconnecting through\nanother endpoint handle and changes when the observed process incarnation\nchanges. The installed consumer checks its JSON round trip.\n\nAn endpoint's generation identifies that handle's lifetime; it changes when\nthe handle is reopened. A persisted incarnation key serves a different\npurpose: comparing the server observed by those handles. It cannot make a\nstale row actionable, establish current liveness or authorize an action.\nUse `tmux_server:bind/2` to obtain a fresh actionable row.\n" + "content": "# Query a shared window without losing its memberships\n\nBuild two sessions, a shared two-pane window and two extra links to it. Then\ncount physical objects and session memberships.\n\n- A window link is one session and index. A physical window can have many.\n- `tmux_window_link` acts on one link and checks its expected window first.\n\nRun it on a private server after compiling:\n\n```console\n$ mise exec -- escript tools/run_examples.escript graph\n```\n\n\n\n```erlang\n-module(linked_graph).\n-moduledoc \"Distinguish physical windows from their session memberships.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n Endpoint = #{socket_path => Socket, executable => Executable},\n {ok, Server} = tmux_server:open(Endpoint),\n tmux_scope:run_or_error(fun() ->\n {ok, Work} = tmux_session:create(Server,\n #{name => <<\"work\">>, launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n {ok, Mirror} = tmux_session:create(Server,\n #{name => <<\"mirror\">>, launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n {ok, Shared} = tmux_window:create(Work,\n #{name => <<\"shared\">>,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n Launch = #{launch => #{argv => [<<\"/bin/cat\">>]}},\n {ok, _} = tmux_pane:split(Shared, Launch),\n WorkId = tmux_model:get(id, Work),\n WindowId = tmux_model:get(id, Shared),\n {ok, Before} = tmux_server:snapshot(Server),\n {ok, Source} = tmux_select:one(#{window_id => WindowId},\n tmux_select:window_links(Before)),\n {ok, _} = tmux_window_link:link(Source, Work, #{index => 7}),\n {ok, _} = tmux_window_link:link(\n Source, Mirror, #{index => 9}),\n {ok, Snapshot} = tmux_server:snapshot(Server),\n 3 = length(tmux_snapshot:windows(Snapshot)),\n 4 = length(tmux_snapshot:panes(Snapshot)),\n 5 = length(tmux_snapshot:window_links(Snapshot)),\n {ok, CapturedWork} = tmux_snapshot:get(\n session, WorkId, Snapshot),\n {ok, Physical} = tmux_snapshot:related(\n windows, CapturedWork, Snapshot),\n {ok, Memberships} = tmux_snapshot:related(\n window_links, CapturedWork, Snapshot),\n 2 = length(Physical),\n 3 = length(Memberships),\n Criteria = #{window_links => #{count => 3},\n panes => #{every => #{current_command => <<\"cat\">>},\n count => 2}},\n {ok, Only} = tmux_select:one(\n Criteria, tmux_select:windows(Snapshot)),\n WindowId = tmux_model:get(id, Only),\n #{physical_windows => 3, physical_panes => 4, window_links => 5,\n work_windows => 2, work_memberships => 3,\n shared_window_panes => 2}\n end, fun() ->\n {ok, _} = tmux_session:kill(Mirror),\n ok\n end)\n end, fun() ->\n {ok, _} = tmux_session:kill(Work),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n- The graph has 3 physical windows, 4 physical panes and 5 window links. The\n shared window sits at two indexes in `work` and one in `mirror`.\n- For `work`, `tmux_snapshot:related/3` returns 2 unique windows through\n `windows` and all 3 memberships through `window_links`.\n\n## Act on a membership\n\n- `tmux_window_link:get/3` reads a fresh membership.\n- `link/3` adds one. `move/3` moves just the checked membership. `swap/3`\n exchanges two memberships' physical windows.\n- Input rows must share one registered owner.\n- `select/1` selects the checked window, which changes that session's current\n window.\n- `unlink/2` removes one membership. tmux's last-link protection stays on\n unless `force => true`, which can destroy the physical window.\n- `tmux_window:kill/1` destroys the window across all links.\n- Actions return command results and leave captured values unchanged.\n\n## Expect stale links\n\n- tmux gives a link no ID. A capture identifies it by session, index and\n expected physical window.\n- If the index vanished or names another window, an action returns\n `stale_link` before dispatch. `tmux_server:bind/2` applies the same check;\n it does not adopt the index's new occupant.\n- The check and the action are separate commands. Another client can still\n change the link between them.\n\n## Switch a client\n\n- `tmux_session:select/2` switches one named, attached client to a session. It\n never attaches a client or picks one for you.\n- `tmux_session:select/3` updates the destination environment only on request.\n- Client names can be reused after a disconnect, and the call does not check\n the client's incarnation.\n\n## Filter by relation\n\n- A relation query checks the full captured graph. Filtering windows does not\n trim their panes to the matching ones.\n- `some`, `every`, `none` and `count` need complete membership coverage,\n including empty selections.\n\nMore: [query guide](querying.md).\n\n## Compare captured server incarnations\n\n- Live `tmux_snapshot:metadata/1` holds an opaque `server_instance` value.\n `tmux_identity:fingerprint/1` turns it into a versioned binary key without\n I/O.\n- The key survives reconnecting through another endpoint handle and changes\n when the observed process changes.\n- An endpoint generation identifies one handle's lifetime. The key compares\n the servers those handles observed.\n- A key cannot make a stale row actionable, show liveness or authorize an\n action. Use `tmux_server:bind/2` for a fresh actionable row.\n" }, { "path": "docs/querying.md", - "content": "# Capture locally; fetch explicitly\n\nA snapshot is observed data. A selection is ordered rows plus their captured\ncontext. A filter is portable predicate data. A query describes a future tmux\nobservation. Only `fetch` executes a query.\n\nThe [README program](../examples/readme_demo.erl) shows both paths against\nreal tmux. It retains a captured name after renaming the live window, then\nexecutes a fresh source query. All ordinary snapshot and selection reads stay\nlocal, even after the endpoint closes.\n\n## Criteria\n\nLocal criteria use atom-keyed maps and binary text. Bare scalars mean equality;\nfields and operators in one map conjoin. Boolean branches use quoted `'and'`,\n`'or'` and `'not'`. Empty AND is true and empty OR is false. Callbacks belong\nto `tmux_select:filter/2` and must return Booleans; callback failures propagate.\n\nRelations use `some/every/none/count` for to-many values and `is/is_not` for\nto-one values. One `some` containing two conditions requires the same related\nrow. Two separate `some` conditions can match different rows. Empty to-many\nrelations make `some` false and `every` and `none` true.\n\n[Fields and operators](fields.md) come from the runtime validator. Unknown\nfields, invalid operations, type mismatches and incomplete coverage fail before\nrow traversal. An unloaded relationship never becomes an empty relationship.\n`from_list` keeps supplied order and duplicates but cannot infer relationships.\n\n## Cardinality\n\n| Call | Result |\n| --- | --- |\n| `first` | `{ok, Row}` or `none`; more matches are allowed |\n| `one` | `{ok, Row}`, `{error, no_match}`, or a multiple-match error |\n| `one_or_none` | `{ok, Row}`, `{ok, none}`, or a multiple-match error |\n| `one_or_error` | Row directly; raises on zero or multiple matches |\n| `size` | Cached materialized size |\n| `count` | Current size, or exact count after supplied criteria |\n\nCriteria come first and the selection last. Ambiguity stops after the second\nmatch once validation is complete. `to_list/1` and `fold/3` keep ordinary Erlang\nlist consumers available; a selection is not a list protocol.\n\n## Portable input\n\n`tmux_filter:decode_json/1` rejects duplicate keys, trailing input and excessive\nsize/depth. `from_wire/2` maps generated wire names explicitly; it never creates\natoms from payload keys. `to_wire/1` exports filter data, not closures or native\nrecord internals. Integral numbers normalize only within the exact shared JSON\ninteger range. Text is case-sensitive and is not implicitly normalized.\n\nRun this complete local recipe. It uses captured rows and needs no tmux server:\n\n```console\n$ mise exec -- escript tools/run_examples.escript filter\n```\n\n\n\n```erlang\n-module(filter_demo).\n-moduledoc \"Validate portable JSON and filter captured rows without tmux I/O.\".\n-export([run/0]).\n\n-spec run() -> map().\nrun() ->\n {ok, Editor} = tmux_model:pane(#{id => <<\"%1\">>, active => true,\n width => 120, current_command => <<\"nvim\">>}),\n {ok, Shell} = tmux_model:pane(#{id => <<\"%2\">>, active => false,\n width => 80, current_command => <<\"bash\">>}),\n Panes = tmux_select:from_list(pane, [Editor, Shell]),\n Criteria = #{active => true, 'or' => [\n #{current_command => #{in => [<<\"nvim\">>, <<\"vim\">>]}},\n #{width => #{gte => 160}}\n ]},\n {ok, Filter} = tmux_filter:new(pane, Criteria),\n Encoded = iolist_to_binary(json:encode(tmux_filter:to_wire(Filter))),\n {ok, Document} = tmux_filter:decode_json(Encoded),\n {ok, RoundTrip} = tmux_filter:from_wire(pane, Document),\n {ok, Editor} = tmux_select:one(RoundTrip, Panes),\n [Editor] = tmux_select:to_list(tmux_select:where(Filter, Panes)),\n {error, #{code := duplicate_key}} = tmux_filter:decode_json(\n <<\"{\\\"version\\\":1,\\\"version\\\":2}\">>),\n Invalid = #{active => #{contains => <<\"yes\">>}},\n try tmux_select:where(Invalid, Panes) of\n _ -> error(expected_validation_error)\n catch\n error:{bad_filter, #{code := unsupported_operator} = Detail}:Stack ->\n [active, contains] = maps:get(path, Detail),\n Reason = {bad_filter, Detail},\n Message = erl_error:format_exception(error, Reason, Stack),\n Text = unicode:characters_to_binary(Message),\n {_, _} = binary:match(Text, <<\"Allowed:\">>)\n end,\n #{matched_ids => [tmux_model:get(id, Editor)],\n wire_round_trip => true, duplicate_keys_rejected => true}.\n```\n\nIt selects `%1`, preserves the meaning of the JSON round trip, and rejects\nambiguous duplicate keys. The installed-archive check runs the same program.\n\nThe [restricted ASCII regex guide](../tools/regex-conformance/README.md) gives\nits grammar and resource limits. Non-ASCII subjects and exhausted match limits\nare errors, not nonmatches. Local callbacks provide other regex semantics.\n\n## Source plans\n\nQueries filter the complete captured graph locally by default. Enable native\ncandidate exclusion explicitly with `tmux_query:pushdown(true, Query)`. It can add\na candidate scan and an earlier observation without reducing graph hydration.\n`tmux_query:explain/1` reports the choice in its `pushdown` field.\n\n`tmux_query:explain/1` performs no I/O. It reports command templates, native\ncandidate conditions, full residual data, complete hydration, required fields,\nordering, identity policy and temporal assumptions. ID, Boolean and qualified\nunsigned numeric conditions can reach tmux's `-f`. Text, nullable fields and\nrelations remain local. Numeric comparisons use tmux arithmetic formats,\nnot string ordering.\n\nHydration defaults to one framed list scan per nonempty entity collection.\nEach field is expanded once and escaped before row/column framing, preserving\npaths containing tabs, newlines and non-UTF-8 bytes. A successful nonempty\ncapture uses nine logical commands, plus an optional candidate scan. Identity\npreflights add one tmux client per command. Linked memberships can increase\nthe bytes returned even though physical rows remain unique.\n\nEach command remains bounded to 1 MiB of stdout. If a whole entity exceeds\nthat bound, use `hydration => isolated` in snapshot or fetch options to read\none field per physical row. The total capture bound and deadline still apply.\nThe hydration entry of the commands metadata describes the default templates;\nits isolated_hydration entry describes isolated reads and unqualified-schema\nfallback. Snapshot metadata records the chosen strategy and actual calls.\n[ADR 0002](adr-0002-batched-hydration.md) records the framing, measurements and\ntradeoffs.\n\nA candidate is a necessary condition: it can admit extra rows but must not\nexclude a same-state full-filter match. Unsupported leaves become true;\nAND and OR compose conservatively; NOT translates only exact children.\nMembership trees are balanced to respect tmux's recursion limit.\n\nFetch retains a complete captured graph, validates any candidate scalar agreement,\nevaluates the full local filter, and only then applies limits. Physical entities\ndeduplicate by ID; window links retain membership identity. `pushdown(false, Q)`\ndisables earlier candidate exclusion. Capture options bound rows, output and\ntime; `retry => 1` requests at most one inconsistent-capture retry within the\noriginal capture deadline. The default is no retry.\n\nCaptures span several commands and are not atomic. Local re-evaluation cannot\nrecover rows excluded before their state changed. Atomic consistency and a\nsame-connection identity promise remain unsupported by this one-shot path.\n" + "content": "# Capture locally; fetch explicitly\n\n- A **snapshot** is observed data.\n- A **selection** is ordered rows plus their captured context.\n- A **filter** is portable predicate data.\n- A **query** describes a future tmux observation. Only `fetch` runs it.\n\nThe [README program](../examples/readme_demo.erl) shows both paths on real\ntmux: it keeps a captured name after renaming the live window, then runs a\nfresh query. Snapshot and selection reads stay local, even after close.\n\n## Criteria\n\n- Criteria are atom-keyed maps with binary text. A bare scalar means equality;\n fields and operators in one map conjoin.\n- Boolean branches are the quoted atoms `'and'`, `'or'` and `'not'`. Empty\n AND is true; empty OR is false.\n- Callbacks go to `tmux_select:filter/2`, must return Booleans, and propagate\n their failures.\n- To-many relations take `some`, `every`, `none` and `count`. To-one relations\n take `is` and `is_not`.\n- One `some` with two conditions needs the same related row. Two separate\n `some` conditions can match different rows.\n- On an empty to-many relation, `some` is false and `every` and `none` are\n true.\n- Unknown fields, invalid operations, type mismatches and incomplete coverage\n fail before any row is read. An unloaded relationship is never an empty one.\n- `from_list` keeps order and duplicates but cannot infer relationships.\n\n[Fields and operators](fields.md) come from the runtime validator.\n\n## Cardinality\n\n| Call | Result |\n| --- | --- |\n| `first` | `{ok, Row}` or `none`; more matches are allowed |\n| `one` | `{ok, Row}`, `{error, no_match}`, or a multiple-match error |\n| `one_or_none` | `{ok, Row}`, `{ok, none}`, or a multiple-match error |\n| `one_or_error` | Row directly; raises on zero or multiple matches |\n| `size` | Cached materialized size |\n| `count` | Current size, or exact count after supplied criteria |\n\n- Criteria come first and the selection last.\n- An ambiguity check stops at the second match, after validation.\n- `to_list/1` and `fold/3` hand rows to list code. A selection is not a list.\n\n## Portable input\n\n- `tmux_filter:decode_json/1` rejects duplicate keys, trailing input and\n excess size or depth.\n- `from_wire/2` maps wire names explicitly. It never creates atoms from\n payload keys.\n- `to_wire/1` exports filter data, not closures or record internals.\n- Integers normalize only inside the shared JSON integer range. Text is\n case-sensitive.\n\nRun this local recipe. It uses captured rows and needs no tmux server:\n\n```console\n$ mise exec -- escript tools/run_examples.escript filter\n```\n\n\n\n```erlang\n-module(filter_demo).\n-moduledoc \"Validate portable JSON and filter captured rows without tmux I/O.\".\n-export([run/0]).\n\n-spec run() -> map().\nrun() ->\n {ok, Editor} = tmux_model:pane(#{id => <<\"%1\">>, active => true,\n width => 120, current_command => <<\"nvim\">>}),\n {ok, Shell} = tmux_model:pane(#{id => <<\"%2\">>, active => false,\n width => 80, current_command => <<\"bash\">>}),\n Panes = tmux_select:from_list(pane, [Editor, Shell]),\n Criteria = #{active => true, 'or' => [\n #{current_command => #{in => [<<\"nvim\">>, <<\"vim\">>]}},\n #{width => #{gte => 160}}\n ]},\n {ok, Filter} = tmux_filter:new(pane, Criteria),\n Encoded = iolist_to_binary(json:encode(tmux_filter:to_wire(Filter))),\n {ok, Document} = tmux_filter:decode_json(Encoded),\n {ok, RoundTrip} = tmux_filter:from_wire(pane, Document),\n {ok, Editor} = tmux_select:one(RoundTrip, Panes),\n [Editor] = tmux_select:to_list(tmux_select:where(Filter, Panes)),\n {error, #{code := duplicate_key}} = tmux_filter:decode_json(\n <<\"{\\\"version\\\":1,\\\"version\\\":2}\">>),\n Invalid = #{active => #{contains => <<\"yes\">>}},\n try tmux_select:where(Invalid, Panes) of\n _ -> error(expected_validation_error)\n catch\n error:{bad_filter, #{code := unsupported_operator} = Detail}:Stack ->\n [active, contains] = maps:get(path, Detail),\n Reason = {bad_filter, Detail},\n Message = erl_error:format_exception(error, Reason, Stack),\n Text = unicode:characters_to_binary(Message),\n {_, _} = binary:match(Text, <<\"Allowed:\">>)\n end,\n #{matched_ids => [tmux_model:get(id, Editor)],\n wire_round_trip => true, duplicate_keys_rejected => true}.\n```\n\nIt selects `%1`, round-trips the JSON and rejects the duplicate key.\n\nThe [restricted ASCII regex guide](../tools/regex-conformance/README.md) gives\nits grammar and limits. Non-ASCII subjects and exhausted match limits are\nerrors, not nonmatches. Local callbacks provide other regex semantics.\n\n## Source plans\n\n- A query filters the whole captured graph locally by default.\n- `tmux_query:pushdown(true, Query)` asks tmux to exclude candidates first. It\n can add a scan and an earlier observation; hydration is unchanged.\n `pushdown(false, Query)` turns it off.\n- `tmux_query:explain/1` does no I/O. It reports the `pushdown` choice, command\n templates, candidate conditions, the full residual filter, hydration, fields,\n ordering and identity policy.\n- ID, Boolean and qualified unsigned numeric conditions reach tmux's `-f`.\n Text, nullable fields and relations stay local. Numbers compare with tmux\n arithmetic, not string order.\n- A candidate can admit extra rows but never excludes a match. Unsupported\n leaves become true. AND and OR compose conservatively; NOT translates only\n exact children.\n\n### Hydration\n\n- Hydration defaults to one framed list scan per nonempty entity collection.\n Each field is expanded once and escaped, so paths with tabs, newlines and\n non-UTF-8 bytes survive.\n- An identity preflight adds one tmux client per command. Linked memberships\n add bytes, not rows.\n- Each command is bounded to 1 MiB of stdout. If an entity exceeds that, pass\n `hydration => isolated` in the snapshot or fetch options to read one field\n per physical row. The total bound and deadline still apply.\n- The commands metadata describes default templates under `hydration` and\n isolated reads under `isolated_hydration`. Snapshot metadata records the\n strategy used and the actual calls.\n\nMore: [ADR 0002](adr-0002-batched-hydration.md) has the framing and\nmeasurements.\n\n### Fetch\n\n- Fetch keeps the complete captured graph, checks candidate scalars, evaluates\n the full local filter, and only then applies limits.\n- Physical entities deduplicate by ID. Window links keep membership identity.\n- Capture options bound rows, output and time. `retry => 1` allows one retry\n of an inconsistent capture within the original deadline. The default is none.\n- Captures span several commands and are not atomic. Local re-evaluation cannot\n recover rows excluded before their state changed.\n- This one-shot path offers no atomic consistency or same-connection identity.\n" }, { "path": "docs/ownership.md", - "content": "# Own a daemon or borrow an endpoint\n\nUse `tmux_server:with_owned/2` for work inside a new private daemon and\n`tmux_server:with_server/2` for a callback using an existing socket. Use\n`tmux_server:start_owned/1` and `tmux_server:open/1` when your application\nmanages those lifetimes explicitly. The\n[README program](../README.md#create-capture-and-query) uses public owned\nstartup, graph queries and cleanup; it also runs against the installed archive.\n\nOwned startup returns an endpoint and an ownership token. The daemon starts\nempty, without a user config, in a fresh private directory. It disables\n`exit-empty` on that daemon and keeps one unattached bootstrap client alive.\nIt does not create a session, attach an observer or change a borrowed daemon's\npolicy. The startup budget includes readiness, a no-start socket identity\nprobe and binding the endpoint to the observed Linux process incarnation.\nThese observations do not make connection replacement atomic.\n\n`tmux_server:close/1` retires endpoint operations and one-shot clients without\nissuing daemon destruction commands. Native policies and hooks may still\nchange state. Separate [control attachments](control.md) receive an\ninvalidation notice and begin their own retirement; close them before their\nendpoint to verify their cleanup too. Closing a row's endpoint never conveys the\nseparate ownership token. `tmux_server:stop_owned/1` requires that token and\nretires the owned endpoint, bootstrap client, daemon and finite descendants.\nIt targets the helper's owned process tree, never a daemon discovered by path.\nThe process that called startup owns this lifetime; its death also starts\ncleanup. A successful stop remains idempotent for 60 seconds.\n\n## Preserve work and cleanup failures\n\nScoped server callbacks run in the calling process. Successful cleanup returns\n`{ok, Value}` or re-raises the callback's original error, throw or exit with its\nstack. A callback returning `{error, Detail}` returns that ordinary value inside\n`{ok, Value}`; the scope does not interpret application-specific results.\n\nIf cleanup fails, the result is `{error, Failure}` with\n`t:tmux_server:scope_failure/0`. Its `primary` field retains the callback value\nor exception, and `cleanup` retains the separate cleanup error or exception.\nThe failure includes `server` and, for an owned scope, `ownership`. Retain these\nhandles for inspection and an explicit cleanup retry. A cleanup timeout leaves\nthe existing supervised owner responsible; it does not establish retirement.\n\nFor nested resources, `tmux_scope:run/2` preserves the same evidence without\nacquiring a resource. `tmux_scope:run_or_error/2` returns the callback value\ndirectly and raises `{scope_cleanup_failed, Failure}` on cleanup failure.\nThe examples use this raising form so an inner failure propagates while outer\ncleanup still runs. Each cleanup closure normalizes its resource's successful\nreply to `ok`. Nested cleanup failures retain their separate evidence.\n\nThese helpers attempt cleanup once. They do not impose callback duration\nlimits, retry work or retire separately allocated resources automatically.\nClose a control attachment explicitly before leaving its endpoint scope.\n\n## Handle incomplete cleanup\n\nA cleanup deadline is an error, not retirement proof. While the application\nruns, the supervised controller retains uncertainty and continues receiving\nretirement events. Errors include separate process, endpoint, probe and\nnamespace results. Incomplete startup also returns the ownership token and\ncaptured resources for inspection and a later stop attempt.\n\nThe controller checks directory and socket filesystem identities before\nremoval. It preserves a changed namespace and unexpected files. It never\nrecursively removes the directory. A replacement socket can therefore remain\nlive after the original daemon retires. A later stop can retry after the\napplication repairs its own namespace. Filesystem checks remain observations;\nthey do not reserve paths against concurrent changes by trusted local code.\n\nStop explicitly before application shutdown when the caller needs a verified\nresult. The application prepares owned cleanup while its supervisors are still\nrunning. If cleanup remains incomplete, it logs a diagnostic and writes a\nprivate recovery report outside the socket directory, or reports the write\nfailure. The report records captured identities and remaining resources; it\nnever authorizes signalling a PID or deleting a path. No automatic recovery\nruns. Stopping the OTP application itself does not establish native cleanup,\nand old ownership tokens expire with that application lifetime.\n\nSee [jobs and operations](jobs.md) for per-command ownership, cancellation and\nuncertain remote effects, and [support and gaps](compatibility.md) for the\nseparate control and streaming qualification work.\n" + "content": "# Own a daemon or borrow an endpoint\n\n- `tmux_server:with_owned/2` runs a callback inside a new private daemon.\n- `tmux_server:with_server/2` runs a callback on an existing socket.\n- `tmux_server:start_owned/1` and `tmux_server:open/1` do the same when your\n application manages the lifetime itself.\n\nThe [README program](../README.md#create-capture-and-query) uses owned\nstartup, graph queries and cleanup.\n\n## Start and stop an owned daemon\n\n- Owned startup returns an endpoint and an ownership token.\n- The daemon starts empty, with no user config, in a fresh private directory.\n It sets `exit-empty` off and keeps one unattached bootstrap client alive.\n- Startup creates no session and attaches no observer. It never changes a\n borrowed daemon's policy.\n- The startup budget covers readiness, a no-start socket identity probe and\n binding the endpoint to the observed Linux process. These observations do\n not make connection replacement atomic.\n- `tmux_server:stop_owned/1` needs the token. It retires the endpoint, the\n bootstrap client, the daemon and its finite descendants. It targets the\n helper's owned process tree, never a daemon found by path.\n- The process that called startup owns the lifetime. Its death also starts\n cleanup.\n- A successful stop stays idempotent for 60 seconds.\n\n## Close an endpoint\n\n- `tmux_server:close/1` retires endpoint operations and one-shot clients. It\n issues no daemon destruction commands. Native policies and hooks can still\n change state.\n- Closing a row's endpoint never conveys the separate ownership token.\n- A [control attachment](control.md) gets an invalidation notice and starts its\n own retirement. Close it before its endpoint to verify its cleanup too.\n\n## Preserve work and cleanup failures\n\n- A scoped server callback runs in the calling process.\n- On successful cleanup, the scope returns `{ok, Value}` or re-raises the\n callback's original error, throw or exit with its stack.\n- A callback that returns `{error, Detail}` still yields `{ok, Value}`. The\n scope does not interpret your results.\n- If cleanup fails, the result is `{error, Failure}` with\n `t:tmux_server:scope_failure/0`. Its `primary` field holds the callback value\n or exception and `cleanup` holds the cleanup error.\n- The failure also holds `server` and, for an owned scope, `ownership`. Keep\n them to inspect and retry cleanup.\n- A cleanup timeout leaves the supervised owner responsible. It does not prove\n retirement.\n\nFor nested resources:\n\n- `tmux_scope:run/2` keeps the same evidence without acquiring a resource.\n- `tmux_scope:run_or_error/2` returns the callback value directly and raises\n `{scope_cleanup_failed, Failure}` when cleanup fails. The examples use it so\n an inner failure propagates while outer cleanup still runs.\n- Each cleanup closure turns its resource's successful reply into `ok`. Nested\n failures keep separate evidence.\n- These helpers try cleanup once. They set no callback time limit, retry\n nothing and do not retire separately allocated resources.\n- Close a control attachment before leaving its endpoint scope.\n\n## Handle incomplete cleanup\n\n- A cleanup deadline is an error, not proof of retirement. While the\n application runs, the supervised controller keeps the uncertainty and keeps\n receiving retirement events.\n- Errors carry separate process, endpoint, probe and namespace results.\n Incomplete startup also returns the token and captured resources for a later\n stop attempt.\n- Before removing anything, the controller checks directory and socket\n filesystem identities. It keeps a changed namespace and unexpected files and\n never removes a directory recursively.\n- A replacement socket can stay live after the original daemon retires. A later\n stop can retry once the application repairs its namespace.\n- Those checks are observations. They do not reserve paths against concurrent\n changes by trusted local code.\n\n## Stop before shutdown\n\n- Stop explicitly before application shutdown when you need a verified result.\n- The application prepares owned cleanup while its supervisors still run. If\n cleanup stays incomplete, it logs a diagnostic and writes a private recovery\n report outside the socket directory, or reports the write failure.\n- The report records captured identities and remaining resources. It never\n authorizes signalling a PID or deleting a path. No automatic recovery runs.\n- Stopping the OTP application does not establish native cleanup. Old\n ownership tokens expire with that application lifetime.\n\nSee [jobs and operations](jobs.md) for per-command ownership, cancellation and\nuncertain remote effects, and [support and gaps](compatibility.md) for control\nand streaming work that is not built.\n" }, { "path": "docs/diagnostics.md", - "content": "# Observe transport, operations and captures\n\nThe core emits structured OTP Logger reports under the `[libtmux]` domain.\nIt adds no handler, telemetry dependency or background logging process.\nYour application's Logger configuration controls delivery and cost.\n\nEnable debug reports with `logger:set_module_level(tmux_log, debug)`. Restore\nthe inherited level with `logger:unset_module_level(tmux_log)`, or restore the\nspecific override returned by `logger:get_module_level/1`. A handler must\nalso admit debug events. Filter its metadata by the `[libtmux]` domain prefix\nor one of its child domains. These are standard\n[OTP Logger configuration](https://www.erlang.org/doc/apps/kernel/logger_chapter.html#configuration)\noperations; they affect the Erlang node.\n\nThe implementation checks the configured module level before constructing a\nreport. Ordinary completion and credit reports use debug. Helper setup\nfailures, incomplete cleanup and owned-daemon failures use warning. An\napplication-shutdown cleanup summary uses error. Use\n`logger:set_module_level(tmux_log, none)` to suppress these reports together.\nReports preserve the recorded outcome and cleanup evidence. Emitting them can\nincrease latency and consume command-deadline or caller-wait budgets.\n\n## Report fields\n\n`[libtmux, transport]` reports `transport_result` after a client result becomes\navailable. `transport` is the client's reference ID. Fields include `result`,\n`code`, `outcome`, `cleanup`, `mode`, `duration_us`, `stdout_bytes`,\n`stderr_bytes` and `stdin_delivered`. Duration starts when the transport owner\ninitializes, including native setup and retirement. A successful transport\nresult can contain a nonzero client exit status; the endpoint determines the\ntmux operation's outcome. A later improvement in cleanup evidence produces\nanother result report with the same reference.\n\nThe same domain reports `transport_credit_held` when a channel delivers a\nchunk and withdraws further read credit until acknowledgement. `stream`,\n`sequence` and `held_bytes` identify that delivery. This records a flow-control\ntransition, not proof that a subscriber is slow. It does not claim a backlog\nsize inside tmux. One-shot output exhaustion instead appears as `output_limit`\nin its result report. See [control attachments](control.md) for the currently\nqualified control surface.\n\n`[libtmux, operation]` reports `operation_result` with `generation` and\n`operation` reference IDs. `phase`, `stage`, `outcome`, `cleanup`, `result`,\n`code` and output byte counts describe the same evidence as\n`tmux_operation:status/1` and `tmux_operation:await/2`. `tracked_duration_us`\nstarts when the endpoint begins tracking the operation; it excludes time\nspent holding an unused admission lease. Incomplete cleanup may first produce\na `responded` report and later a `retired` report. Retirement does not turn an\nunknown remote outcome into success. See [jobs and operations](jobs.md).\n\n`[libtmux, query]` reports `capture_result` for an admitted snapshot or query\ncapture, including rejections after its endpoint context is established.\n`capture` matches the successful snapshot's metadata ID; `generation` matches\nthe endpoint. `duration_us` covers that capture's observation interval and\nvalidation. Success includes logical `source_calls` and `observed_bytes`.\nFailure includes `code` and an atom-valued `reason` when available. Invalid\noptions and failures before endpoint context is available return their normal\nerrors without a capture report. Query retries have separate capture IDs.\nThese counters do not include the transport's identity preflight clients.\nSnapshot metadata also records the hydration strategy. Batched hydration uses\nthree field scans on a nonempty graph; isolated hydration uses one command per\ntext/byte field per physical row. Both retain the six bracketing spine scans.\nSee [source plans](querying.md#source-plans) for bounds and the explicit option.\n\n`[libtmux, ownership]` reports `owned_server_failure`,\n`owned_server_cleanup_incomplete` and `owned_server_recovery_report_failed`.\n`ownership` is a reference ID; `code` and an optional atom-valued `reason`\ndescribe the failure. Retain the original API error for recovery handles and\nresource evidence. The report grants no authority to stop a server.\n\nApplication shutdown reports `owned_server_shutdown_incomplete` in the same\ndomain with `scope => application`, `code` and `failed_owners`. The bounded\nsummary omits nested resource reports. Private recovery files retain the\nseparate cleanup evidence; see [daemon ownership](ownership.md).\n\n## Cost and data boundaries\n\nReports contain a fixed set of reference IDs, atoms and integer counters.\nThey omit executable paths, socket paths, argv, environment values, terminal\nbytes, names, filter criteria and full error maps. They are observations,\nnot durable audit records or a replacement for returned errors. Reference\nIDs identify this VM's lifetimes; they are not persistent resource identities.\n\nCaller-installed Logger metadata, filters and handlers remain under application\ncontrol. Handler callbacks run in the emitting process. Custom handlers can\ndelay it, and standard handlers can switch to synchronous backpressure under\nload. Configure handler levels and overload protection for production.\nEnabling debug on a large capture produces a report per transport and\noperation. Reports describe the implemented one-shot and attachment lanes;\nthey do not qualify deferred command submission or public streams.\n\nThe Common Test diagnostics suite installs an owned Logger handler, exercises\nreal helper and tmux operations, and checks reference correlation, capture\nrejection, read-credit withholding, setup failure, cleanup failure, bounded\nreports, payload exclusion and disabled logging.\n\n## Local programming errors\n\nLibrary-raised validation, coverage, cardinality and explicit raising-helper\nexceptions carry native EEP-54 metadata. `m:tmux_error` adds explanations to\nthe shell and `erl_error:format_exception/3`, including the input path,\nallowed names or missing observations when available. Exception reasons and\ntagged result APIs keep their structured data. Application callback exceptions\nretain their original stack; the library does not relabel them as filter\nfailures. This formatting performs no I/O and is separate from Logger reports.\n\nThe [local filter program](querying.md#portable-input) checks a malformed\ncriterion and formats its native exception through the installed package.\n" + "content": "# Observe transport, operations and captures\n\nThe core emits structured OTP Logger reports under the `[libtmux]` domain.\n\n- It adds no handler, telemetry dependency or background logging process.\n- Your Logger configuration controls delivery and cost.\n\n## Turn reports on\n\n- Enable debug reports with `logger:set_module_level(tmux_log, debug)`.\n- Restore the inherited level with `logger:unset_module_level(tmux_log)`, or\n restore the override that `logger:get_module_level/1` returned.\n- A handler must also admit debug events. Filter its metadata by the\n `[libtmux]` domain prefix or one child domain.\n- These are standard\n [OTP Logger configuration](https://www.erlang.org/doc/apps/kernel/logger_chapter.html#configuration)\n operations. They affect the whole Erlang node.\n- The level is checked before a report is built. Completion and credit reports\n use debug. Helper setup failures, incomplete cleanup and owned-daemon\n failures use warning. The application-shutdown cleanup summary uses error.\n- `logger:set_module_level(tmux_log, none)` suppresses all of them.\n- Reports keep the recorded outcome and cleanup evidence. Emitting them adds\n latency and can use command-deadline or caller-wait budgets.\n\n## Report fields\n\n### `[libtmux, transport]`\n\n- `transport_result` appears once a client result is available. `transport` is\n the client's reference ID. Fields: `result`, `code`, `outcome`, `cleanup`,\n `mode`, `duration_us`, `stdout_bytes`, `stderr_bytes`, `stdin_delivered`.\n- Duration starts when the transport owner initializes and includes native\n setup and retirement.\n- A successful transport result can hold a nonzero client exit status. The\n endpoint decides the tmux operation's outcome.\n- Better cleanup evidence later produces another result report with the same\n reference.\n- `transport_credit_held` appears when a channel delivers a chunk and withholds\n more read credit until acknowledged. `stream`, `sequence` and `held_bytes`\n identify the delivery.\n- That is a flow-control transition. It does not show a slow subscriber or a\n backlog size inside tmux. One-shot output exhaustion appears as\n `output_limit` in its result report.\n- See [control attachments](control.md) for the control surface that exists.\n\n### `[libtmux, operation]`\n\n- `operation_result` carries `generation` and `operation` reference IDs.\n `phase`, `stage`, `outcome`, `cleanup`, `result`, `code` and output byte\n counts match `tmux_operation:status/1` and `tmux_operation:await/2`.\n- `tracked_duration_us` starts when the endpoint begins tracking the operation.\n It excludes time spent holding an unused admission lease.\n- Incomplete cleanup can first give a `responded` report and later a `retired`\n report. Retirement does not turn an unknown remote outcome into success.\n- See [jobs and operations](jobs.md).\n\n### `[libtmux, query]`\n\n- `capture_result` covers an admitted snapshot or query capture, including\n rejections after the endpoint context exists. `capture` matches the\n snapshot's metadata ID. `generation` matches the endpoint.\n- `duration_us` covers that capture's observation interval and validation.\n- Success adds logical `source_calls` and `observed_bytes`. Failure adds `code`\n and, when available, an atom `reason`.\n- Invalid options, and failures before the endpoint context exists, return\n their normal errors with no report.\n- Each query retry gets its own capture ID.\n- The counters leave out the transport's identity-preflight clients.\n- Snapshot metadata records the hydration strategy. Batched hydration uses\n three field scans on a nonempty graph. Isolated hydration uses one command per\n text or byte field per physical row. Both keep the six bracketing spine\n scans. See [source plans](querying.md#source-plans).\n\n### `[libtmux, ownership]`\n\n- `owned_server_failure`, `owned_server_cleanup_incomplete` and\n `owned_server_recovery_report_failed` carry an `ownership` reference ID, a\n `code` and an optional atom `reason`.\n- Keep the original API error for recovery handles and resource evidence. A\n report gives no authority to stop a server.\n- Application shutdown reports `owned_server_shutdown_incomplete` with\n `scope => application`, `code` and `failed_owners`. The summary omits nested\n resource reports. Private recovery files keep that evidence; see\n [daemon ownership](ownership.md).\n\n## Cost and data boundaries\n\n- Reports hold a fixed set of reference IDs, atoms and integer counters.\n- They omit executable paths, socket paths, argv, environment values, terminal\n bytes, names, filter criteria and full error maps.\n- They are observations, not audit records and not a substitute for returned\n errors. Reference IDs identify lifetimes in this VM and are not persistent\n resource identities.\n- Your Logger metadata, filters and handlers stay under your control. Handler\n callbacks run in the emitting process. A custom handler can delay it, and a\n standard handler can switch to synchronous backpressure under load.\n- Set handler levels and overload protection for production. Debug on a large\n capture emits a report per transport and operation.\n- Reports cover the one-shot and attachment lanes. They say nothing about\n command submission or public streams, which are not built.\n\n## Local programming errors\n\n- Validation, coverage, cardinality and explicit raising-helper exceptions\n carry native EEP-54 metadata.\n- `m:tmux_error` adds explanations to the shell and to\n `erl_error:format_exception/3`: the input path, allowed names or missing\n observations when known.\n- Exception reasons and tagged results keep their structured data. Exceptions\n from your callbacks keep their original stack. The library does not relabel\n them as filter failures.\n- This formatting does no I/O and is separate from Logger reports.\n\nThe [local filter program](querying.md#portable-input) checks a malformed\ncriterion and formats its native exception.\n" }, { "path": "docs/adr-0001-architecture.md", @@ -38,47 +38,47 @@ }, { "path": "docs/jobs.md", - "content": "# Wait for a terminal job, then capture its output\n\nA successful send or command frame does not prove that a terminal program\nprocessed input. This example runs an owned job that acknowledges terminal\nparsing before it exits, then waits for tmux's `pane-died` event, checks the\nexit status and captures the completed output.\n\nThe companion [terminal job](../examples/terminal_job.py) writes its result and\nan ANSI device-status request. It exits successfully only after reading tmux's\nreply. tmux generates that reply after parsing the preceding output. The job\nwrites no more output afterward. Python 3.12+ is an example dependency only.\n\n`pane-died` alone is **not** a general output-drain barrier on tmux 3.3. This\nprotocol applies to this cooperating job; it does not establish completion for\nan arbitrary program or reconstruct output that scrolled out of history.\n\nThe example changes options and a hook only on its new window. `remain-on-exit`\nkeeps the pane addressable; an empty exit banner preserves the first line.\nThe hook signals a tmux `wait-for` channel. There are no sleeps or capture\nretries. Run from the checkout so the companion job can be located:\n\n```console\n$ mise exec -- escript tools/run_examples.escript job\n```\n\n\n\n```erlang\n-module(job_demo).\n-moduledoc \"Capture a job that acknowledges terminal parsing before it exits.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n Endpoint = #{socket_path => Socket, executable => Executable},\n {ok, Server} = tmux_server:open(Endpoint),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"jobs\">>, width => 120, height => 30,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n {ok, Window} = tmux_window:create(Session,\n #{launch => #{argv => [<<\"/bin/cat\">>]}}),\n Target = [<<\"-w\">>, <<\"-t\">>, tmux_model:get(id, Window)],\n Deadline = #{deadline_ms => 2000},\n {ok, _} = tmux_option:set(Window, <<\"remain-on-exit\">>, <<\"on\">>),\n {ok, _} = tmux_option:set(\n Window, <<\"remain-on-exit-format\">>, <<>>),\n {ok, Hook} = tmux_command:raw(<<\"set-hook\">>,\n Target ++ [<<\"pane-died\">>, <<\"wait-for -S job-finished\">>]),\n {ok, _} = tmux_server:command(Server, Hook, #{}),\n {ok, Wait} = tmux_command:raw(<<\"wait-for\">>, [<<\"job-finished\">>]),\n {ok, Operation} = tmux_operation:start(Server, Wait, Deadline),\n {error, #{code := await_timeout}} =\n tmux_operation:await(Operation, 0),\n JobFile = filename:absname(\"examples/terminal_job.py\"),\n Launch = #{argv => [<<\"/usr/bin/python3\">>,\n list_to_binary(JobFile)]},\n {ok, Job} = tmux_pane:split(Window, #{launch => #{shell => <<>>}}),\n {ok, _} = tmux_pane:respawn(Job, #{launch => Launch}),\n {ok, #{exit_status := 0, cleanup := complete}} =\n tmux_operation:await(Operation, 900),\n {ok, Completed} = tmux_pane:get(Server, tmux_model:get(id, Job)),\n true = tmux_model:get(dead, Completed),\n 0 = tmux_model:get(exit_status, Completed),\n {ok, <<\"build complete\\n\">>} = tmux_pane:capture(\n Completed, #{start => 0, 'end' => 0}),\n {ok, Never} = tmux_command:raw(\n <<\"wait-for\">>, [<<\"not-signalled\">>]),\n {ok, Cancelled} = tmux_operation:start(Server, Never, Deadline),\n {ok, _} = tmux_operation:await_started(Cancelled, 900),\n {ok, cancel_requested} = tmux_operation:cancel(Cancelled),\n {error, #{outcome := unknown, cleanup := complete}} =\n tmux_operation:await(Cancelled, 900),\n #{output => <<\"build complete\\n\">>, job_status => 0,\n await_timeout_kept_operation => true,\n cancelled_outcome => unknown}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\nThe output is `build complete` followed by a newline, and the exit status is\nzero. The zero-duration await proves that abandoning a wait leaves the\noperation usable. The separate cancelled wait reports an unknown tmux outcome\nand complete client cleanup; cancellation does not undo submitted work.\n\nThe example prepares an empty pane, then starts its job with\n`tmux_pane:respawn/2`. Respawn keeps the pane ID. Its default launch mode,\n`previous`, reuses tmux's saved command; this example supplies new argv instead.\nRunning panes require explicit `force => true`. Use a job-specific completion\ncondition and fresh observations to check the result.\n\nUse an empty shell command to prepare a process-free pane with\n`tmux_pane:split/2`. Session creation on every supported version, and window\ncreation before tmux 3.8, can finish that command immediately and remove the\nnew object. This example uses `/bin/cat` to keep its parent session and window\navailable across versions.\n\n`await_started/2` returns lifecycle status, including when an operation already\nfailed or retired. Use `await/2` for its command result. Successful command\nresults preserve separate stdout/stderr binaries, stdin bytes delivered to the\nclient pipe, exit status, outcome and cleanup. Validation and wait errors can\ncontain only a code; do not assume every error contains output or certainty.\nThe native API defines `t:tmux_operation:completed/0`,\n`t:tmux_operation:failure/0` and `t:tmux_operation:state/0`.\n\nTreat a pane's exit_status field independently from its dead flag. tmux exposes\na numeric status after collecting a normal child exit; signal termination has\nno numeric value in that field. The captured absence value is none, which does\nnot mean success. The native pane_dead_signal format can identify a signal\nwhen diagnosing an unexpected exit. This distinction appears in the\n[tmux 3.3a status callback](https://github.com/tmux/tmux/blob/3.3a/format.c#L1792)\nand the\n[tmux 3.8 status callback](https://github.com/tmux/tmux/blob/3.8/format.c#L2288).\n\n## Operation ownership\n\nThe process that starts an operation owns it. Other processes can await its\nhandle without becoming owners. The endpoint confirms a transfer after\nmonitoring the new owner and releasing the old monitor; the new process does\nnot perform a handshake. Owner death and cancellation retire queued or\npossibly-sent clients; they do not replay mutations.\n\nAn `await_timeout` from `tmux_operation:transfer/2` leaves the transfer outcome\nuncertain: the endpoint may process the owner change after the caller stops\nwaiting. Read `tmux_operation:status/1` to establish the current owner before\nrelying on ownership. The timeout does not prove the old owner still owns the\noperation.\n\nRetired results are retained for at most 60 seconds. The endpoint also evicts\nthe oldest results when retention exceeds 64 results or 4 MiB of stdout/stderr.\nUse `tmux_operation:status/1` while a handle is valid, and handle\n`operation_expired` after retention. Closing an endpoint retires its library\nclients and preserves the tmux server. [Daemon ownership](ownership.md)\nexplains the separate token used to stop an owned daemon.\n\nCurrent operations use one-shot clients. Persistent control, grouping and\nstream delivery are not yet available; see [support and gaps](compatibility.md).\n" + "content": "# Wait for a terminal job, then capture its output\n\nA successful send does not prove a terminal program processed the input. This\nprogram runs a job that acknowledges terminal parsing, waits for `pane-died`,\nchecks the exit status and captures the output.\n\n- The [companion job](../examples/terminal_job.py) writes its result and an\n ANSI device-status request. It exits only after reading tmux's reply, which\n tmux sends after parsing the output. It writes nothing afterward.\n- The job needs Python 3.12 or newer. The library does not.\n- `pane-died` alone is not an output-drain barrier on tmux 3.3. This protocol\n covers a cooperating job. It cannot reconstruct output that scrolled out of\n history.\n- The program changes options and a hook only on its new window:\n `remain-on-exit` keeps the pane addressable, an empty exit banner keeps the\n first line, and the hook signals a tmux `wait-for` channel.\n- There are no sleeps or capture retries.\n\nRun it from the checkout so the job script can be found:\n\n```console\n$ mise exec -- escript tools/run_examples.escript job\n```\n\n\n\n```erlang\n-module(job_demo).\n-moduledoc \"Capture a job that acknowledges terminal parsing before it exits.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n Endpoint = #{socket_path => Socket, executable => Executable},\n {ok, Server} = tmux_server:open(Endpoint),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"jobs\">>, width => 120, height => 30,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n {ok, Window} = tmux_window:create(Session,\n #{launch => #{argv => [<<\"/bin/cat\">>]}}),\n Target = [<<\"-w\">>, <<\"-t\">>, tmux_model:get(id, Window)],\n Deadline = #{deadline_ms => 2000},\n {ok, _} = tmux_option:set(Window, <<\"remain-on-exit\">>, <<\"on\">>),\n {ok, _} = tmux_option:set(\n Window, <<\"remain-on-exit-format\">>, <<>>),\n {ok, Hook} = tmux_command:raw(<<\"set-hook\">>,\n Target ++ [<<\"pane-died\">>, <<\"wait-for -S job-finished\">>]),\n {ok, _} = tmux_server:command(Server, Hook, #{}),\n {ok, Wait} = tmux_command:raw(<<\"wait-for\">>, [<<\"job-finished\">>]),\n {ok, Operation} = tmux_operation:start(Server, Wait, Deadline),\n {error, #{code := await_timeout}} =\n tmux_operation:await(Operation, 0),\n JobFile = filename:absname(\"examples/terminal_job.py\"),\n Launch = #{argv => [<<\"/usr/bin/python3\">>,\n list_to_binary(JobFile)]},\n {ok, Job} = tmux_pane:split(Window, #{launch => #{shell => <<>>}}),\n {ok, _} = tmux_pane:respawn(Job, #{launch => Launch}),\n {ok, #{exit_status := 0, cleanup := complete}} =\n tmux_operation:await(Operation, 900),\n {ok, Completed} = tmux_pane:get(Server, tmux_model:get(id, Job)),\n true = tmux_model:get(dead, Completed),\n 0 = tmux_model:get(exit_status, Completed),\n {ok, <<\"build complete\\n\">>} = tmux_pane:capture(\n Completed, #{start => 0, 'end' => 0}),\n {ok, Never} = tmux_command:raw(\n <<\"wait-for\">>, [<<\"not-signalled\">>]),\n {ok, Cancelled} = tmux_operation:start(Server, Never, Deadline),\n {ok, _} = tmux_operation:await_started(Cancelled, 900),\n {ok, cancel_requested} = tmux_operation:cancel(Cancelled),\n {error, #{outcome := unknown, cleanup := complete}} =\n tmux_operation:await(Cancelled, 900),\n #{output => <<\"build complete\\n\">>, job_status => 0,\n await_timeout_kept_operation => true,\n cancelled_outcome => unknown}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n- The output is `build complete` and a newline. The exit status is zero.\n- The zero-duration await shows that abandoning a wait leaves the operation\n usable.\n- The separate cancelled wait reports an unknown tmux outcome and complete\n client cleanup. Cancellation does not undo submitted work.\n\n## Start a job in a prepared pane\n\n- The program prepares an empty pane with `tmux_pane:split/2` and an empty\n shell command, then starts the job with `tmux_pane:respawn/2`. Respawn keeps\n the pane ID.\n- Respawn's launch mode defaults to `previous`, which reuses tmux's saved\n command. The program passes new argv instead. A running pane needs\n `force => true`.\n- Judge the result with a job-specific completion condition and fresh\n observations.\n- With an empty shell command, a new session (any version) or window (before\n tmux 3.8) can finish at once and vanish. The program uses `/bin/cat` for its\n session and window to avoid that.\n\n## Read results\n\n- `await_started/2` returns lifecycle status, including for an operation that\n already failed or retired. `await/2` returns the command result.\n- A successful result holds separate stdout and stderr binaries, the stdin\n bytes delivered to the client pipe, exit status, outcome and cleanup.\n- Validation and wait errors can hold only a code. Do not assume they hold\n output or certainty.\n- The native API defines `t:tmux_operation:completed/0`,\n `t:tmux_operation:failure/0` and `t:tmux_operation:state/0`.\n\n## Read a pane's exit status\n\n- `exit_status` and `dead` are separate fields.\n- After a normal exit, tmux gives a numeric status. A signal has no number, so\n the captured value is `none`, which does not mean success.\n- `pane_dead_signal` names the signal when you diagnose an unexpected exit.\n- The distinction comes from the\n [tmux 3.3a status callback](https://github.com/tmux/tmux/blob/3.3a/format.c#L1792)\n and the\n [tmux 3.8 status callback](https://github.com/tmux/tmux/blob/3.8/format.c#L2288).\n\n## Operation ownership\n\n- The process that starts an operation owns it. Other processes can await its\n handle without owning it.\n- A transfer completes once the endpoint monitors the new owner and releases\n the old monitor. The new process does no handshake.\n- Owner death and cancellation retire queued or possibly-sent clients. They do\n not replay mutations.\n- An `await_timeout` from `tmux_operation:transfer/2` leaves the outcome\n uncertain. Read `tmux_operation:status/1` before you rely on ownership.\n- Retired results stay for at most 60 seconds. Past 64 results or 4 MiB of\n stdout and stderr, the oldest go first. Handle `operation_expired`.\n- Closing an endpoint retires its library clients and preserves the tmux\n server. [Daemon ownership](ownership.md) covers the token that stops an owned\n daemon.\n- Operations use one-shot clients. Persistent control, grouping and stream\n delivery are not built; see [support and gaps](compatibility.md).\n" }, { "path": "docs/control.md", - "content": "# Own a control attachment\n\nAttach to an existing session, verify identity on that persistent connection,\ninspect its attachment effects and close the client. This currently qualifies\nconnection lifetime only. Commands still execute through the one-shot APIs;\ncontrol submission and groups remain implementation work.\n\nThe example owns its session. The runner provides a private tmux fixture and\nverifies final cleanup:\n\n```console\n$ mise exec -- escript tools/run_examples.escript control\n```\n\n\n\n```erlang\n-module(control_demo).\n-moduledoc \"Attach explicitly, inspect captured values and prove detachment.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"control-demo\">>, width => 120, height => 30,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n Id = tmux_model:get(id, Session),\n 0 = tmux_model:get(attached_count, Session),\n {ok, Control} = tmux_control:attach(Server, Session, #{}),\n tmux_scope:run_or_error(fun() ->\n {ok, #{phase := open, identity := same_connection}} =\n tmux_control:status(Control),\n {ok, Attached} = tmux_session:get(Server, Id),\n 1 = tmux_model:get(attached_count, Attached),\n {ok, Graph} = tmux_server:snapshot(Server),\n [Window] = tmux_snapshot:windows(Graph),\n 120 = tmux_model:get(width, Window),\n 30 = tmux_model:get(height, Window),\n ok = tmux_control:close(Control),\n {ok, #{phase := closed, cleanup := complete}} =\n tmux_control:status(Control),\n {ok, Detached} = tmux_session:get(Server, Id),\n 0 = tmux_model:get(attached_count, Detached),\n 0 = tmux_model:get(attached_count, Session),\n #{identity => same_connection, attached_count => 1,\n detached_count => 0, window_size => [120, 30],\n cleanup => complete, session_preserved => true}\n end, fun() ->\n ok = tmux_control:close(Control)\n end)\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"identity\": \"same_connection\",\n \"attached_count\": 1,\n \"detached_count\": 0,\n \"window_size\": [120, 30],\n \"cleanup\": \"complete\",\n \"session_preserved\": true\n}\n```\n\nThe archive check repeats this complete program through the installed core\npackage. The initial session record keeps its captured count of zero; fresh\nreads observe one attachment and later detachment. ignore-size preserves the\n120-by-30 window. In this isolated fixture without mutating hooks, closing the\nclient preserves the session and daemon.\n\nAn attachment requires a session captured or bound through the same endpoint.\nA second endpoint handle returns different_owner even for the same socket.\nThe library uses attach-session with no-output, ignore-size and `-E`. It\nissues no session-creation or session-option write commands. `-E` skips the\nnative attachment environment update. Configured attachment/detachment hooks\ncan still change state, create or destroy resources. Native policies such as\ndestroy-unattached can remove a session when its last client detaches. Failure\nand cleanup do not roll back those effects. Other clients may also change\nstate concurrently. Close retires its client/helper without issuing session\nor daemon destruction commands.\nAttachment changes attached_count. On tmux 3.6 and newer it also uses\nno-detach-on-destroy; earlier versions retain native destruction behavior.\n\nThe caller owns the control lifetime. Caller death, parent closing or parent\ninvalidation requests retirement. Close the control handle before closing\nits parent endpoint when cleanup proof matters. Parent close proves its\none-shot clients' cleanup; it does not wait for separate control clients.\n\n`tmux_control:close/1` returns ok only after native client/helper retirement.\ncleanup_incomplete preserves a supervised owner: retain the handle and retry\nclose after repairing the cleanup problem. status distinguishes closing from\nclosed and reports cleanup explicitly. Successfully closed handles remain\nusable for status and idempotent close for 60 seconds. Application shutdown\nalone does not prove cleanup.\n\nUnexpected hook output or reply blocks reject attachment and retire the client.\nThe library does not disable borrowed hooks. Bounded startup includes parent\nregistration, native exec and the identity probe. An incomplete error carries\nits control handle for explicit cleanup recovery.\n\nSee [daemon ownership](ownership.md) for private versus borrowed lifetimes,\n[jobs](jobs.md) for one-shot operation waits and cancellation, and\n[support and gaps](compatibility.md) for matrix and delivery evidence.\n" + "content": "# Own a control attachment\n\nAttach to an existing session, verify identity on that persistent connection,\ninspect its attachment effects and close the client.\n\n- This covers the connection's lifetime only. Commands still run through the\n one-shot APIs.\n- Control command submission and groups are not built.\n\nThe program owns its session. The runner supplies a private tmux server:\n\n```console\n$ mise exec -- escript tools/run_examples.escript control\n```\n\n\n\n```erlang\n-module(control_demo).\n-moduledoc \"Attach explicitly, inspect captured values and prove detachment.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"control-demo\">>, width => 120, height => 30,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n Id = tmux_model:get(id, Session),\n 0 = tmux_model:get(attached_count, Session),\n {ok, Control} = tmux_control:attach(Server, Session, #{}),\n tmux_scope:run_or_error(fun() ->\n {ok, #{phase := open, identity := same_connection}} =\n tmux_control:status(Control),\n {ok, Attached} = tmux_session:get(Server, Id),\n 1 = tmux_model:get(attached_count, Attached),\n {ok, Graph} = tmux_server:snapshot(Server),\n [Window] = tmux_snapshot:windows(Graph),\n 120 = tmux_model:get(width, Window),\n 30 = tmux_model:get(height, Window),\n ok = tmux_control:close(Control),\n {ok, #{phase := closed, cleanup := complete}} =\n tmux_control:status(Control),\n {ok, Detached} = tmux_session:get(Server, Id),\n 0 = tmux_model:get(attached_count, Detached),\n 0 = tmux_model:get(attached_count, Session),\n #{identity => same_connection, attached_count => 1,\n detached_count => 0, window_size => [120, 30],\n cleanup => complete, session_preserved => true}\n end, fun() ->\n ok = tmux_control:close(Control)\n end)\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"identity\": \"same_connection\",\n \"attached_count\": 1,\n \"detached_count\": 0,\n \"window_size\": [120, 30],\n \"cleanup\": \"complete\",\n \"session_preserved\": true\n}\n```\n\n- The session record you captured first keeps its attached count of zero.\n Fresh reads show one attachment, then none after detach.\n- `ignore-size` keeps the window at 120 by 30.\n- With no mutating hooks, closing the client leaves the session and daemon.\n\n## What attaching does\n\n- The session must be captured or bound through the same endpoint. A second\n handle to the same socket returns `different_owner`.\n- The library runs `attach-session` with no-output, ignore-size and `-E`. It\n issues no session-creation or session-option writes.\n- `-E` skips the native environment update. Attaching changes `attached_count`.\n- On tmux 3.6 and newer it also uses no-detach-on-destroy. Earlier versions\n keep native destruction behavior.\n- Configured attach or detach hooks can still change state, create or destroy\n resources. A destroy-unattached policy can remove the session when its last\n client detaches. Failure and cleanup do not roll these effects back.\n- Other clients can change state at the same time.\n\n## Lifetime and cleanup\n\n- The caller owns the control lifetime. Caller death, closing the parent or\n invalidating it requests retirement.\n- Close the control handle before its parent endpoint when cleanup proof\n matters. Closing the parent proves its one-shot clients' cleanup. It does not\n wait for control clients.\n- `tmux_control:close/1` returns `ok` only after the native client and helper\n retire. Close issues no session or daemon destruction commands.\n- On `cleanup_incomplete`, a supervised owner stays. Keep the handle, fix the\n problem and retry `close/1`.\n- `status/1` tells `closing` from `closed` and reports cleanup. A closed handle\n answers `status/1` and a repeated `close/1` for 60 seconds.\n- Stopping the application alone does not prove cleanup.\n- Unexpected hook output or reply blocks reject the attachment and retire the\n client. The library does not disable borrowed hooks.\n- Startup is bounded across parent registration, native exec and the identity\n probe. An incomplete error carries the control handle for recovery.\n\nSee [daemon ownership](ownership.md) for private versus borrowed lifetimes,\n[jobs](jobs.md) for one-shot waits and cancellation, and\n[support and gaps](compatibility.md) for what is exercised.\n" }, { "path": "docs/panes.md", - "content": "# Isolate and rejoin a running pane\n\nMove a job into its own window, then join it back without respawning it.\nThis complete program checks the process ID, changed parent window, removal of\nthe temporary window and immutability of the earlier capture. The runner owns\nthe server and verifies cleanup:\n\n```console\n$ mise exec -- escript tools/run_examples.escript panes\n```\n\n\n\n```erlang\n-module(pane_demo).\n-moduledoc \"Isolate a running pane, then join it back without respawning.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"pane-workflow\">>, window_name => <<\"editor\">>,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n {ok, Initial} = tmux_server:snapshot(Server),\n {ok, Link} = tmux_select:one(\n #{session_id => tmux_model:get(id, Session)},\n tmux_select:window_links(Initial)),\n {ok, Window} = tmux_snapshot:related(window, Link, Initial),\n {ok, [Anchor]} = tmux_snapshot:related(panes, Window, Initial),\n WindowId = tmux_model:get(id, Window),\n {ok, Pane} = tmux_pane:split(Anchor,\n #{launch => #{argv => [<<\"/bin/cat\">>]}}),\n Id = tmux_model:get(id, Pane),\n Pid = tmux_model:get(pid, Pane),\n {ok, Before} = tmux_server:snapshot(Server),\n {ok, _} = tmux_pane:break(Pane, Link, Session,\n #{index => 9, name => <<\"isolated #{pane_id}\">>}),\n {ok, Isolated} = tmux_pane:get(Server, Id),\n Pid = tmux_model:get(pid, Isolated),\n Temporary = tmux_model:get(window_id, Isolated),\n true = Temporary =/= WindowId,\n {ok, OldPane} = tmux_snapshot:get(pane, Id, Before),\n WindowId = tmux_model:get(window_id, OldPane),\n {ok, _} = tmux_pane:join(Pane, Anchor,\n #{direction => horizontal, size => {percent, 40}}),\n {ok, Joined} = tmux_pane:get(Server, Id),\n WindowId = tmux_model:get(window_id, Joined),\n Pid = tmux_model:get(pid, Joined),\n {error, #{code := target_gone}} =\n tmux_window:get(Server, Temporary),\n {ok, Final} = tmux_server:snapshot(Server),\n 2 = length(tmux_snapshot:panes(Final)),\n #{same_process => true, snapshot_unchanged => true,\n temporary_window_removed => true, panes_after_join => 2}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"same_process\": true,\n \"snapshot_unchanged\": true,\n \"temporary_window_removed\": true,\n \"panes_after_join\": 2\n}\n```\n\nThe archive check repeats this reader program outside the source checkout.\nIts separate native consumer also exercises same-window move and pane swap.\n\n## Supply a membership when breaking a pane\n\nA physical window can be linked several times, even within one session. A pane\ntherefore has no single source membership. `tmux_pane:break/4` takes the pane,\nan explicit source window link, the destination session and placement options.\n`index` is required. `detach` defaults to true; false selects the destination\nmembership. `name` is a literal UTF-8 argument, without format expansion.\n\n| Source window | What tmux changes |\n| --- | --- |\n| Several panes | Creates a physical window and moves the pane into it; the original links remain |\n| Only one pane | Moves the selected membership of the existing physical window; other links remain |\n\nPane IDs and running processes survive both cases. Moving the final membership\nout of a session can destroy that source session. Session groups retain tmux's\nnative synchronization behavior. An occupied destination index is refused.\n\nThe API checks the link's expected window and the pane's observed parent. It\nthen sends a session/index selector qualified by the stable pane ID. An absent\npane cannot become whichever pane later occupies its old positional index.\nThe preflight and action remain separate commands: concurrent changes after\nthe check, including an index moving away and back, can remain undetected.\nThere is no atomic compare-and-act guarantee.\n\nLiteral means unexpanded, not stored verbatim. tmux's own name cleaning still\napplies. For example, 3.3/3.4 stores an added backslash before dollar-variable\nprefixes; later releases changed that behavior. The library returns the\nstored name instead of guessing which escapes a caller intended. See the\n[object graph guide](graph.md) for physical windows and memberships.\n\n## Move and swap by physical pane ID\n\n`tmux_pane:join/3` and `tmux_pane:move/3` use the source and destination pane\nIDs. Their native commands share placement behavior and permit rearrangement\nwithin one window. Geometry uses `t:tmux_pane:join_options/0`: vertical by\ndefault, optional direction, cells/percent size, `before` and `full_size`.\nBoth reject identical source/destination IDs.\n\n`tmux_pane:swap/3` exchanges layout positions within or across windows. Its\n`detach` defaults to true; `zoom` maps to tmux's `-Z` retention flag. Swapping\na pane with itself exchanges nothing, but native zoom handling still runs:\nthe default can unzoom even that same-pane call. Across windows, active\npositions can receive different pane IDs even in detached mode.\n\nMoving the last pane out destroys its physical window and every link to it,\nand can remove sessions. Shared windows affect all memberships. Existing\nprocesses keep their process environment and working directory; inherited\nwindow options can change when the pane changes parent. With `detach` false,\njoin/move selection uses tmux's resolved destination-session context. Supply\nwindow-link actions separately when a particular session membership must be\nselected.\n\n## Keep captures and action results separate\n\nThese calls return the completed command result for both new-window and\nexisting-window cases. They never refresh input records or captures. Use\n`tmux_pane:get/2`, `tmux_window_link:get/3` or `tmux_server:snapshot/1` to observe\nthe resulting graph. Source/destination rows must use the same registered\nowner; rebind explicitly when working through another endpoint owner.\n\nA disappeared pane or session remains an operational error. A replaced source\nlink returns `stale_link`; a different observed pane parent returns\n`pane_link_mismatch`. Even an eventual native layout error can unzoom windows.\nThese operations are not transactions and are never automatically retried.\nThe [support page](compatibility.md) separates implemented APIs from remaining\ncontrol, consumer and delivery qualification.\n" + "content": "# Isolate and rejoin a running pane\n\nMove a job into its own window, then join it back without respawning it.\n\nThe program checks the process ID, the changed parent window, the removal of\nthe temporary window and that the earlier capture did not change. The runner\nsupplies the server:\n\n```console\n$ mise exec -- escript tools/run_examples.escript panes\n```\n\n\n\n```erlang\n-module(pane_demo).\n-moduledoc \"Isolate a running pane, then join it back without respawning.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"pane-workflow\">>, window_name => <<\"editor\">>,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n {ok, Initial} = tmux_server:snapshot(Server),\n {ok, Link} = tmux_select:one(\n #{session_id => tmux_model:get(id, Session)},\n tmux_select:window_links(Initial)),\n {ok, Window} = tmux_snapshot:related(window, Link, Initial),\n {ok, [Anchor]} = tmux_snapshot:related(panes, Window, Initial),\n WindowId = tmux_model:get(id, Window),\n {ok, Pane} = tmux_pane:split(Anchor,\n #{launch => #{argv => [<<\"/bin/cat\">>]}}),\n Id = tmux_model:get(id, Pane),\n Pid = tmux_model:get(pid, Pane),\n {ok, Before} = tmux_server:snapshot(Server),\n {ok, _} = tmux_pane:break(Pane, Link, Session,\n #{index => 9, name => <<\"isolated #{pane_id}\">>}),\n {ok, Isolated} = tmux_pane:get(Server, Id),\n Pid = tmux_model:get(pid, Isolated),\n Temporary = tmux_model:get(window_id, Isolated),\n true = Temporary =/= WindowId,\n {ok, OldPane} = tmux_snapshot:get(pane, Id, Before),\n WindowId = tmux_model:get(window_id, OldPane),\n {ok, _} = tmux_pane:join(Pane, Anchor,\n #{direction => horizontal, size => {percent, 40}}),\n {ok, Joined} = tmux_pane:get(Server, Id),\n WindowId = tmux_model:get(window_id, Joined),\n Pid = tmux_model:get(pid, Joined),\n {error, #{code := target_gone}} =\n tmux_window:get(Server, Temporary),\n {ok, Final} = tmux_server:snapshot(Server),\n 2 = length(tmux_snapshot:panes(Final)),\n #{same_process => true, snapshot_unchanged => true,\n temporary_window_removed => true, panes_after_join => 2}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"same_process\": true,\n \"snapshot_unchanged\": true,\n \"temporary_window_removed\": true,\n \"panes_after_join\": 2\n}\n```\n\n## Break a pane out of a window\n\n- A physical window can be linked several times, even in one session, so a\n pane has no single source membership. `tmux_pane:break/4` takes the pane, an\n explicit source window link, the destination session and placement options.\n- `index` is required. `detach` defaults to true; false selects the\n destination membership.\n- `name` is a literal UTF-8 argument with no format expansion.\n\n| Source window | What tmux changes |\n| --- | --- |\n| Several panes | Creates a physical window and moves the pane into it; the original links remain |\n| Only one pane | Moves the selected membership of the existing physical window; other links remain |\n\n- Pane IDs and running processes survive both cases.\n- Moving the final membership out of a session can destroy that session.\n Session groups keep tmux's native synchronization.\n- An occupied destination index is refused.\n- Literal means unexpanded, not stored verbatim. tmux's own name cleaning still\n applies: 3.3 and 3.4 add a backslash before dollar-variable prefixes, and\n later releases changed that. The library returns the stored name.\n- The call checks the link's expected window and the pane's observed parent,\n then sends a session and index selector qualified by the stable pane ID. An\n absent pane cannot turn into whichever pane later takes its old index.\n- The check and the action are separate commands. A concurrent change after the\n check, such as an index moving away and back, can go unnoticed. There is no\n atomic compare-and-act.\n\nSee the [object graph guide](graph.md) for physical windows and memberships.\n\n## Move and swap by pane ID\n\n- `tmux_pane:join/3` and `tmux_pane:move/3` take source and destination pane\n IDs. They share placement behavior and allow rearranging within one window.\n- Geometry comes from `t:tmux_pane:join_options/0`: vertical by default, an\n optional direction, cell or percent size, `before` and `full_size`.\n- Both reject identical source and destination IDs.\n- `tmux_pane:swap/3` swaps layout positions within or across windows.\n `detach` defaults to true. `zoom` maps to tmux's `-Z`.\n- Swapping a pane with itself moves nothing, but native zoom handling still\n runs, so the default can unzoom even then.\n- Across windows, active positions can get different pane IDs even in detached\n mode.\n- Moving the last pane out destroys its physical window and every link to it,\n and can remove sessions. A shared window affects all its memberships.\n- Existing processes keep their environment and working directory. Inherited\n window options can change when a pane changes parent.\n- With `detach` false, join and move select in tmux's resolved destination\n session. Use window-link actions when you need a particular membership.\n\n## Keep captures and results separate\n\n- These calls return the completed command result for new-window and\n existing-window cases. They never refresh input records or captures.\n- Observe the result with `tmux_pane:get/2`, `tmux_window_link:get/3` or\n `tmux_server:snapshot/1`.\n- Source and destination rows must share one registered owner. Rebind to work\n through another endpoint.\n- A vanished pane or session is an operational error. A replaced source link\n returns `stale_link`. A different observed pane parent returns\n `pane_link_mismatch`.\n- A late native layout error can still unzoom windows.\n- These operations are not transactions and are never retried.\n\nSee the [support page](compatibility.md) for what is not built.\n" }, { "path": "docs/buffers.md", - "content": "# Preserve byte buffers and paste deliberately\n\nStore a binary artifact without sending it through a shell, terminal renderer\nor Unicode conversion. Loading uses tmux client stdin; showing a buffer reads\nits exact bytes, including NUL, invalid UTF-8 and protocol-like lines.\n\nRun this complete program against the runner's isolated server:\n\n```console\n$ mise exec -- escript tools/run_examples.escript buffers\n```\n\n\n\n```erlang\n-module(buffer_demo).\n-moduledoc \"Store a binary artifact without terminal or text conversion.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n Name = <<\"libtmux-example-\",\n (binary:encode_hex(crypto:strong_rand_bytes(8), lowercase))/binary>>,\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n tmux_scope:run_or_error(fun() ->\n Bytes = <<0, 255, \"build\\n%end 1 2 3\\n\\\\r\">>,\n {ok, _} = tmux_buffer:load(Server, Name, Bytes),\n {ok, Bytes} = tmux_buffer:show(Server, Name),\n {ok, [#{name := Name, size := Size} | _]} =\n tmux_buffer:list(Server),\n Size = byte_size(Bytes),\n {ok, _} = tmux_buffer:load(Server, Name, <<>>),\n {ok, Bytes} = tmux_buffer:show(Server, Name),\n #{byte_count => Size, exact_round_trip => true,\n empty_load_kept_bytes => true}\n end, fun() ->\n case tmux_buffer:delete(Server, Name) of\n {ok, _} -> ok;\n {error, #{code := buffer_not_found}} -> ok;\n Failure -> error({buffer_cleanup_failed, Failure})\n end,\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"byte_count\": 21,\n \"exact_round_trip\": true,\n \"empty_load_kept_bytes\": true\n}\n```\n\nThe program uses a unique name and removes its buffer in cleanup. The runner\nalso retires the owned server; the archive check repeats this program outside\nthe source checkout against the installed core application.\n\n## Choose a name or the newest buffer\n\n`tmux_buffer:load/3` accepts a binary name or `automatic`, which lets tmux\nallocate a name. `show/2`, `delete/2` and `paste/3` accept an observed binary\nname or `latest`. `list/1` returns ordinary metadata maps in tmux's newest-first\ninsertion order, with name, size in bytes and Unix creation time. It does not\nload payloads. Renaming keeps the order; loading replacement data inserts a\nnew buffer.\n\nNames are NUL-free bytes. tmux 3.7+ applies its own name cleaning, which can\nreject controls and escape backslashes. Subsequent calls need the actual\nstored name from `list/1`. The list codec preserves embedded delimiters,\nnewlines and invalid UTF-8 on releases that allow those names. It never uses\na newline inside a name as a row boundary.\n\nEmpty load input is a native no-op: it neither creates a buffer nor truncates\nan existing one. Delete explicitly when the buffer should disappear. A named\nrename refuses an occupied destination on tmux 3.3/3.3a; 3.4+ replaces it.\nIdentical rename inputs fail before dispatch because some legacy versions\nhave unsafe handling of that case.\n\nOn 3.3/3.3a, native named delete/rename falls back to the newest buffer when\nthe requested name is absent. These APIs first perform a targeted existence\nread with zero output allowance and return `buffer_not_found` for a missing\nname. The read retains no payload and is independent of list bounds.\nThat preflight is not atomic:\nconcurrent removal after the check can still trigger the native fallback.\nSerialize external changes or use tmux 3.4+ when that race is unacceptable.\nBuffer names do not provide stable object identities or transactional updates.\n\n## Paste bytes into a registered pane\n\n`tmux_buffer:paste/3` takes a registered pane, a buffer name or `latest`, and\nan options map. Defaults preserve bytes: LF separators, no sanitization, no\nbracketing and no deletion. Set `separator` to replace each LF with a chosen\nNUL-free byte string. It is passed literally, without format expansion.\n\n`sanitize => true` requires tmux 3.7+; older releases return\n`unsupported_capability` before dispatch. The default raw path uses `-S` on\nnewer releases. `bracketed => true` adds markers only when the target has\nenabled bracketed paste. `delete => true` removes the buffer after the native\npaste call, including cases where native input-off handling discards input.\n\nA completed paste is a tmux command result, not proof that a child consumed\ninput. The integration test uses a raw terminal receiver and a separate socket\nacknowledgment to verify all 256 byte values and custom separators. The\n[job guide](jobs.md) explains completion signals and operation ownership.\n\n## Bound reads and preserve errors\n\nLoad input shares the endpoint's 256 KiB command admission budget with argv.\n`show/3` accepts `max_bytes` from 0 through 1 MiB and `deadline_ms` from 1 through\n600000. Defaults are 1 MiB and 2500 ms. Overflow returns `output_limit` with\npartial command evidence; it never returns a successful truncated buffer.\nLists are bounded to 4096 rows and 1 MiB of encoded output.\n\nMissing buffers, gone panes and closed endpoints remain distinct errors.\nTimeouts do not undo a completed load or paste, and mutations are not retried.\n`tmux_buffer:capabilities/1` describes source-defined behavior without I/O;\nthe [support page](compatibility.md) separates that metadata from qualification.\n" + "content": "# Preserve byte buffers and paste deliberately\n\nStore a binary artifact without a shell, a terminal renderer or Unicode\nconversion. Loading uses tmux client stdin. Showing a buffer reads its exact\nbytes, including NUL, invalid UTF-8 and protocol-like lines.\n\nRun this program against the runner's isolated server:\n\n```console\n$ mise exec -- escript tools/run_examples.escript buffers\n```\n\n\n\n```erlang\n-module(buffer_demo).\n-moduledoc \"Store a binary artifact without terminal or text conversion.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n Name = <<\"libtmux-example-\",\n (binary:encode_hex(crypto:strong_rand_bytes(8), lowercase))/binary>>,\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n tmux_scope:run_or_error(fun() ->\n Bytes = <<0, 255, \"build\\n%end 1 2 3\\n\\\\r\">>,\n {ok, _} = tmux_buffer:load(Server, Name, Bytes),\n {ok, Bytes} = tmux_buffer:show(Server, Name),\n {ok, [#{name := Name, size := Size} | _]} =\n tmux_buffer:list(Server),\n Size = byte_size(Bytes),\n {ok, _} = tmux_buffer:load(Server, Name, <<>>),\n {ok, Bytes} = tmux_buffer:show(Server, Name),\n #{byte_count => Size, exact_round_trip => true,\n empty_load_kept_bytes => true}\n end, fun() ->\n case tmux_buffer:delete(Server, Name) of\n {ok, _} -> ok;\n {error, #{code := buffer_not_found}} -> ok;\n Failure -> error({buffer_cleanup_failed, Failure})\n end,\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"byte_count\": 21,\n \"exact_round_trip\": true,\n \"empty_load_kept_bytes\": true\n}\n```\n\nThe program uses a unique buffer name and deletes the buffer in cleanup.\n\n## Choose a name or the newest buffer\n\n- `tmux_buffer:load/3` takes a binary name or `automatic`, which lets tmux pick\n one.\n- `show/2`, `delete/2` and `paste/3` take an observed binary name or `latest`.\n- `list/1` returns metadata maps, newest first, with name, size in bytes and\n Unix creation time. It loads no payloads.\n- Renaming keeps the order. Loading replacement data inserts a new buffer.\n- Names are NUL-free bytes. tmux 3.7 and newer clean names themselves, which\n can reject controls and escape backslashes. Later calls need the stored name\n from `list/1`.\n- The list codec keeps embedded delimiters, newlines and invalid UTF-8 where a\n release allows those names. It never treats a newline in a name as a row\n boundary.\n\n## Know the version differences\n\n- An empty load is a native no-op. It creates no buffer and does not truncate\n an existing one. Delete a buffer to remove it.\n- Renaming onto an occupied name is refused on tmux 3.3 and 3.3a. From 3.4 it\n replaces. Identical rename inputs fail before dispatch, because some old\n versions handle them unsafely.\n- On 3.3 and 3.3a, a native delete or rename of a missing name falls back to\n the newest buffer. These APIs first check that the name exists, with no\n output allowance, and return `buffer_not_found` if not. The check keeps no\n payload and ignores list bounds.\n- That check is not atomic. A concurrent removal after it can still trigger the\n native fallback. Serialize outside changes or use tmux 3.4 or newer.\n- Buffer names are neither stable identities nor transactional.\n\n## Paste bytes into a registered pane\n\n- `tmux_buffer:paste/3` takes a registered pane, a buffer name or `latest`, and\n an options map.\n- Defaults preserve bytes: LF separators, no sanitizing, no bracketing, no\n deletion.\n- `separator` replaces each LF with a NUL-free byte string. It is passed\n literally, with no format expansion.\n- `sanitize => true` needs tmux 3.7 or newer. Older releases return\n `unsupported_capability` before dispatch. The raw path uses `-S` on newer\n releases.\n- `bracketed => true` adds markers only when the target enabled bracketed\n paste.\n- `delete => true` removes the buffer after the native paste, including when\n native input-off handling discards the input.\n- A completed paste is a tmux command result. It does not prove a child consumed\n the input. See the [job guide](jobs.md) for completion signals and\n ownership.\n\n## Bound reads and keep errors\n\n- Load input shares the endpoint's 256 KiB command admission budget with argv.\n- `show/3` takes `max_bytes` from 0 through 1 MiB and `deadline_ms` from 1\n through 600000. Defaults are 1 MiB and 2500 ms.\n- Overflow returns `output_limit` with partial command evidence. A truncated\n buffer is never returned as success.\n- Lists are bounded to 4096 rows and 1 MiB of encoded output.\n- Missing buffers, gone panes and closed endpoints stay distinct errors.\n- A timeout does not undo a completed load or paste. Mutations are not retried.\n- `tmux_buffer:capabilities/1` describes source-defined behavior without I/O.\n The [support page](compatibility.md) separates that metadata from what is\n tested.\n" }, { "path": "docs/options.md", - "content": "# Read and change scoped options\n\nUse a local user option to record which workspace created a session. Read it\nwithout inheritance when deciding whether the session belongs to that workspace.\n`only_if_unset` refuses an existing local value; it does not compare an expected\nowner or provide a workspace transaction.\n\nThe complete example also sets and removes a window override, checks that the\ninherited value is restored, and preserves an empty sparse array entry. It\nopens the supplied endpoint and creates/removes its own session. The repository\nrunner supplies an isolated server and verifies cleanup:\n\n```console\n$ mise exec -- escript tools/run_examples.escript options\n```\n\n\n\n```erlang\n-module(options_demo).\n-moduledoc \"Use local options to mark workspace ownership without inheritance.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"options\">>, launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n Owner = <<\"@libtmux-owner\">>,\n none = tmux_option:get(Session, Owner, #{}),\n {ok, _} = tmux_option:set(Session, Owner, <<\"build-workspace\">>,\n #{only_if_unset => true}),\n {ok, <<\"build-workspace\">>} = tmux_option:get(Session, Owner, #{}),\n {ok, Window} = tmux_window:create(Session,\n #{launch => #{argv => [<<\"/bin/cat\">>]}}),\n {ok, [<<\"build-workspace\">>, none]} =\n tmux_option:get_many([Session, Window], Owner, #{}),\n none = tmux_option:get(Window, <<\"remain-on-exit\">>, #{}),\n {ok, Effective} = tmux_option:get(Window, <<\"remain-on-exit\">>,\n #{inherit => true}),\n {ok, _} = tmux_option:set(Window, <<\"remain-on-exit\">>, <<\"on\">>),\n {ok, <<\"on\">>} = tmux_option:get(Window, <<\"remain-on-exit\">>, #{}),\n {ok, _} = tmux_option:unset(Window, <<\"remain-on-exit\">>),\n none = tmux_option:get(Window, <<\"remain-on-exit\">>, #{}),\n {ok, Effective} = tmux_option:get(Window, <<\"remain-on-exit\">>,\n #{inherit => true}),\n Env = <<\"update-environment\">>,\n {ok, _} = tmux_option:set(Session, {Env, 7}, <<>>),\n {ok, #{7 := <<>>}} = tmux_option:get(Session, Env, #{}),\n none = tmux_option:get(Session, {Env, 8}, #{}),\n #{owner => <<\"build-workspace\">>, restored_inheritance => true,\n empty_entry_preserved => true, missing_entry => true}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n\n```\n\n\n\n```json\n{\n \"owner\": \"build-workspace\",\n \"restored_inheritance\": true,\n \"empty_entry_preserved\": true,\n \"missing_entry\": true\n}\n```\n\n## Select the table explicitly\n\n| Scope argument | Table |\n| --- | --- |\n| Registered session record | Local session options |\n| Registered physical window record | Local window options, shared by its memberships |\n| Registered pane record | Local pane options |\n| `{server, Server}` | Server-wide options |\n| `{session_defaults, Server}` | Global session defaults |\n| `{window_defaults, Server}` | Global window defaults |\n\nA physical window has no universal parent session. Session options require a\nsession record; passing a pane to a session option fails rather than choosing\nan incidental session. Built-in names can override tmux's native scope flags;\nthe wrapper checks their source metadata before dispatch to prevent that.\n\n`get/3` uses local-only reads with `#{}`. `#{inherit => true}` follows the\nselected table's parents: session defaults, or window/window defaults for a\npane. User options follow the same table ancestry. Server options have no\nparent. There is no inheritance from a session table to a window table.\n\n`tmux_option:get_many/3` reads one scalar key from one to seven local rows on\nthe same registered endpoint. Results preserve input order, including `none`\nfor absent values. The example checks session ownership and the window's\nindependent local table together. Arrays, indexed entries, command options,\nglobal tables and names outside the batch API's ASCII grammar use `get/3`.\n\nEach batch uses one native command sequence plus the normal identity-preflight\nclient, with native ID observations around every row's read. Aggregate stdout\nis limited to 1 MiB and stderr to 64 KiB, with a\n2500 ms command deadline. Command or decoding failures reject the entire\nbatch. These are interval observations: a queued reference may outlive a\nremoved window, and target checks do not establish atomic topology or stronger\nserver-incarnation identity. See [ADR 0003](adr-0003-scoped-option-batches.md).\n\n## Preserve absence and bytes\n\n`none` means the selected local option or requested array entry is absent.\n`{ok, <<>>}` means a known empty value. A whole array returns `{ok, Entries}`\nwith numeric indexes as map keys; an empty local array returns `{ok, #{}}`.\nAn unloaded graph field is unrelated to these live reads.\n\nSet array entries with `{Name, Index}`. The API deliberately avoids whole-array\nassignment and its separator grammar. `unset/2` removes an entry or local option;\nremoving a local option restores inheritance. Unsetting a global built-in resets\nits tmux default. Non-numeric array keys are outside this API; an observed array\nwith such keys fails decoding instead of silently dropping entries.\n\nValues are NUL-free binaries, including arbitrary bytes. Names are literal;\n`#{...}` in a user-option name does not expand. Prefixes, aliases and bracket\nsyntax in names are rejected. A scalar value is passed without `-F`, although\ntmux may interpret a stored format or executable option later. Use this API\nonly with trusted option names and values; it is not an external write policy.\n\n`append` uses tmux's `-a` behavior for the selected type. `only_if_unset` uses\n`-o` and reports already-set as an error. Empty flag values retain tmux's toggle\nbehavior; use explicit `<<\"on\">>` or `<<\"off\">>` when state must be predictable.\nMutations are not retried after a timeout or unknown outcome.\n\n## Discover version support\n\nThe [generated catalogue](options-reference.md) lists canonical names, scopes,\nparser types, arrays and hooks from pinned release commits.\n`tmux_option:describe/2` and `catalogue/1` read that metadata without I/O.\nBuilt-ins have exact source catalogues for every release from 3.3a through\n3.8, including intermediate patch releases. Tracking builds and unknown\nversions return `unsupported_option_catalogue`; unavailable built-ins return\n`unsupported_tmux_option`. User options do not depend on a built-in catalogue.\n\nHooks are executable commands and are rejected by this API, including hook\nnames discovered in the catalogue. Use `tmux_hook:get/3` to read hooks and\n`tmux_hook:set/3` for registration; the [hook guide](hooks.md) covers their\nscope, execution and cleanup.\nRaw commands are also available for deliberate newer-version integration.\nA missing target remains an operational error, never a missing option.\n" + "content": "# Read and change scoped options\n\nUse a local user option to record which workspace created a session. Read it\nwithout inheritance to decide whether the session belongs to that workspace.\n\n- `only_if_unset` refuses an existing local value. It does not compare an\n expected owner and is not a workspace transaction.\n- The program also sets and removes a window override, checks that inheritance\n returns, and keeps an empty sparse array entry.\n- It opens the supplied endpoint and creates and removes its own session. The\n runner supplies an isolated server.\n\nRun it:\n\n```console\n$ mise exec -- escript tools/run_examples.escript options\n```\n\n\n\n```erlang\n-module(options_demo).\n-moduledoc \"Use local options to mark workspace ownership without inheritance.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"options\">>, launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n Owner = <<\"@libtmux-owner\">>,\n none = tmux_option:get(Session, Owner, #{}),\n {ok, _} = tmux_option:set(Session, Owner, <<\"build-workspace\">>,\n #{only_if_unset => true}),\n {ok, <<\"build-workspace\">>} = tmux_option:get(Session, Owner, #{}),\n {ok, Window} = tmux_window:create(Session,\n #{launch => #{argv => [<<\"/bin/cat\">>]}}),\n {ok, [<<\"build-workspace\">>, none]} =\n tmux_option:get_many([Session, Window], Owner, #{}),\n none = tmux_option:get(Window, <<\"remain-on-exit\">>, #{}),\n {ok, Effective} = tmux_option:get(Window, <<\"remain-on-exit\">>,\n #{inherit => true}),\n {ok, _} = tmux_option:set(Window, <<\"remain-on-exit\">>, <<\"on\">>),\n {ok, <<\"on\">>} = tmux_option:get(Window, <<\"remain-on-exit\">>, #{}),\n {ok, _} = tmux_option:unset(Window, <<\"remain-on-exit\">>),\n none = tmux_option:get(Window, <<\"remain-on-exit\">>, #{}),\n {ok, Effective} = tmux_option:get(Window, <<\"remain-on-exit\">>,\n #{inherit => true}),\n Env = <<\"update-environment\">>,\n {ok, _} = tmux_option:set(Session, {Env, 7}, <<>>),\n {ok, #{7 := <<>>}} = tmux_option:get(Session, Env, #{}),\n none = tmux_option:get(Session, {Env, 8}, #{}),\n #{owner => <<\"build-workspace\">>, restored_inheritance => true,\n empty_entry_preserved => true, missing_entry => true}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n\n```\n\n\n\n```json\n{\n \"owner\": \"build-workspace\",\n \"restored_inheritance\": true,\n \"empty_entry_preserved\": true,\n \"missing_entry\": true\n}\n```\n\n## Select the table explicitly\n\n| Scope argument | Table |\n| --- | --- |\n| Registered session record | Local session options |\n| Registered physical window record | Local window options, shared by its memberships |\n| Registered pane record | Local pane options |\n| `{server, Server}` | Server-wide options |\n| `{session_defaults, Server}` | Global session defaults |\n| `{window_defaults, Server}` | Global window defaults |\n\n- A physical window has no universal parent session. Session options need a\n session record; a pane passed to one fails instead of picking a session.\n- Built-in names can override tmux's native scope flags. The wrapper checks\n their source metadata before dispatch to prevent that.\n- `get/3` reads local values only with `#{}`.\n- `#{inherit => true}` follows the table's parents: session defaults, or window\n defaults for a pane. User options follow the same ancestry. Server options\n have no parent. A session table never passes values to a window table.\n\n## Read many rows at once\n\n- `tmux_option:get_many/3` reads one scalar key from one to seven local rows on\n one registered endpoint. Results keep input order, with `none` for absent\n values.\n- The program reads the session's ownership and the window's own local table\n together.\n- Arrays, indexed entries, command options, global tables and names outside the\n batch grammar use `get/3`.\n- A batch is one native command sequence plus the normal identity-preflight\n client, with native ID observations around each row's read.\n- Output is capped at 1 MiB of stdout and 64 KiB of stderr, with a 2500 ms\n deadline. A command or decoding failure rejects the whole batch.\n- These are interval observations. A queued reference can outlive a removed\n window, and the target checks are not atomic. See\n [ADR 0003](adr-0003-scoped-option-batches.md).\n\n## Preserve absence and bytes\n\n- `none` means the selected local option or array entry is absent.\n `{ok, <<>>}` means a known empty value.\n- A whole array returns `{ok, Entries}` with numeric indexes as keys. An empty\n local array returns `{ok, #{}}`.\n- Set an entry with `{Name, Index}`. There is no whole-array assignment.\n- `unset/2` removes an entry or local option. Removing a local option restores\n inheritance. Unsetting a global built-in resets its tmux default.\n- Non-numeric array keys are outside this API. An observed array with such keys\n fails decoding instead of dropping entries.\n- Values are NUL-free binaries and may hold any other byte.\n- Names are literal. `#{...}` in a user-option name does not expand. Prefixes,\n aliases and bracket syntax are rejected.\n- A scalar value goes out without `-F`, but tmux may later interpret a stored\n format or command option. Use this API only with trusted names and values.\n- `append` uses tmux's `-a` for the option's type. `only_if_unset` uses `-o`\n and reports an already-set option as an error.\n- An empty flag value keeps tmux's toggle behavior. Use `<<\"on\">>` or\n `<<\"off\">>` when the state must be predictable.\n- A mutation is not retried after a timeout or unknown outcome.\n\n## Discover version support\n\n- The [generated catalogue](options-reference.md) lists canonical names, scopes,\n parser types, arrays and hooks from pinned release commits.\n- `tmux_option:describe/2` and `catalogue/1` read it without I/O.\n- Built-ins have exact catalogues for every release from 3.3a through 3.8,\n including patch releases. A tracking build or unknown version returns\n `unsupported_option_catalogue`. An unavailable built-in returns\n `unsupported_tmux_option`. User options need no catalogue.\n- This API rejects hooks, including names found in the catalogue. Use\n `tmux_hook:get/3` and `tmux_hook:set/3`; the [hook guide](hooks.md) covers\n scope, execution and cleanup.\n- Raw commands remain available for deliberate newer-version work.\n- A missing target is an operational error, never a missing option.\n" }, { "path": "docs/hooks.md", - "content": "# Register a hook and await its effect\n\nRegister a split hook, submit a wait without blocking the Erlang caller, then\nsplit a pane. The hook writes a session option and signals the unique channel.\nThe program checks that effect, removes the local hook and verifies cleanup.\nThe runner owns the daemon and checks that its sessions and processes exit.\nCompile the project first:\n\n```console\n$ mise exec -- rebar3 compile\n```\n\nRun the complete program:\n\n```console\n$ mise exec -- escript tools/run_examples.escript hooks\n```\n\n\n\n```erlang\n-module(hook_demo).\n-moduledoc \"Acknowledge a registered split hook before reading its effect.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n Launch = #{launch => #{argv => [<<\"/bin/cat\">>]}},\n {ok, Session} = tmux_session:create(Server,\n Launch#{name => <<\"hooks\">>}),\n tmux_scope:run_or_error(fun() ->\n {ok, Snapshot} = tmux_server:snapshot(Server),\n [Pane] = tmux_snapshot:panes(Snapshot),\n Suffix = binary:encode_hex(crypto:strong_rand_bytes(8), lowercase),\n Channel = <<\"hook-\", Suffix/binary>>,\n {ok, Mark} = tmux_command:raw(<<\"set-option\">>,\n [<<\"-t\">>, tmux_model:get(id, Session),\n <<\"@last-event\">>, <<\"split complete\">>]),\n {ok, Signal} = tmux_command:wait_for(Channel, signal),\n {ok, Wait} = tmux_command:wait_for(Channel, wait),\n {ok, Operation} = tmux_operation:start(Server, Wait, #{}),\n tmux_scope:run_or_error(fun() ->\n Name = <<\"after-split-window\">>,\n {ok, _} = tmux_hook:set(Session, {Name, 4}, [Mark, Signal]),\n {ok, _} = tmux_pane:split(Pane, Launch),\n {ok, #{cleanup := complete}} =\n tmux_operation:await(Operation, 900),\n {ok, <<\"split complete\">>} =\n tmux_option:get(Session, <<\"@last-event\">>, #{}),\n {ok, #{4 := _}} = tmux_hook:get(Session, Name, #{}),\n {ok, _} = tmux_hook:unset(Session, Name),\n none = tmux_hook:get(Session, Name, #{}),\n #{event => <<\"split complete\">>, hook_acknowledged => true,\n local_hook_removed => true}\n end, fun() ->\n tmux_scope:run_or_error(fun() ->\n {ok, _} = tmux_operation:cancel(Operation)\n end, fun() ->\n case tmux_operation:await(Operation, 900) of\n {ok, #{cleanup := complete}} -> ok;\n {error, #{cleanup := complete}} -> ok\n end\n end), ok\n end)\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"event\": \"split complete\",\n \"hook_acknowledged\": true,\n \"local_hook_removed\": true\n}\n```\n\nThe archive check repeats this program using the installed core package.\n[Jobs and operations](jobs.md) explains why an await timeout abandons only\nthat wait. The program cancels and awaits its operation during cleanup even\nif registration or the split fails.\n\n## Choose the table explicitly\n\n`tmux_hook:set/3` requires a `{Name, Index}` key and validated\n`tmux_command` values. It replaces that indexed entry while preserving other\nentries. `append/3` chooses tmux's first vacant local index, which can precede\nexisting sparse entries. Commands run in index order. Bodies can be one\ncommand or a nonempty list; rendering is bounded before dispatch.\n\nLocal tables use registered session, physical window or pane rows. Global\ntables use `{session_defaults, Server}` or `{window_defaults, Server}`.\nThe [source catalogue](options-reference.md) defines each builtin hook's\npermitted scope and version. Prefixes, aliases, ordinary options and custom\nevent/monitor interfaces are rejected by this API.\n\n`get/3` reads local values by default. `inherit => true` follows parent tables.\nAn absent local array returns `none`; an empty array returns `{ok, #{}}` and\nmasks inheritance. `clear/2` leaves that empty override. `unset/2` removes an\nentry or restores inheritance for the whole array. Unsetting an entry can\nleave its local array empty. Global unset resets the native default.\n\nRead values are tmux's canonical command-list text, including its own quoting\nand escapes. They are not individual argument values or the original source\ntext. A read never executes them.\n\n## Separate registration, context and completion\n\nRegistration confirms that tmux stored the commands. Those commands still\ninterpret their values and formats when they run. Native parsing can fail;\na failed first indexed write can already leave an empty local override.\nThere is no rollback or automatic retry of an uncertain mutation.\n\n`tmux_hook:run/2` requests native execution in an explicit context. Use a\nsession for its current window/pane, a checked window link for one membership,\nor `{pane, Pane, Link}` for that pane and membership. This preserves the\nchosen session and index when a physical window is linked more than once. A\nphysical window alone cannot choose that execution context. Existence and\nmembership checks precede dispatch. If the target disappears after preflight,\ntmux can still fall back to another context. These separate observations do\nnot provide atomic compare-and-act.\n\nA native command result does not acknowledge background work launched by a\nhook. The program waits for its own signal after the option write. Clearing\nor unsetting a hook does not cancel effects tmux has already queued.\n[Window memberships](graph.md) and [scoped options](options.md) explain the\nrelated graph and inheritance rules.\n" + "content": "# Register a hook and await its effect\n\nRegister a split hook, submit a wait without blocking the caller, then split a\npane. The hook writes a session option and signals a unique channel.\n\n- The program checks the option, removes the local hook and verifies cleanup.\n- It cancels and awaits its operation in cleanup, even when registration or\n the split fails.\n- The runner supplies the daemon.\n\nCompile the project first:\n\n```console\n$ mise exec -- rebar3 compile\n```\n\nRun the complete program:\n\n```console\n$ mise exec -- escript tools/run_examples.escript hooks\n```\n\n\n\n```erlang\n-module(hook_demo).\n-moduledoc \"Acknowledge a registered split hook before reading its effect.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n Launch = #{launch => #{argv => [<<\"/bin/cat\">>]}},\n {ok, Session} = tmux_session:create(Server,\n Launch#{name => <<\"hooks\">>}),\n tmux_scope:run_or_error(fun() ->\n {ok, Snapshot} = tmux_server:snapshot(Server),\n [Pane] = tmux_snapshot:panes(Snapshot),\n Suffix = binary:encode_hex(crypto:strong_rand_bytes(8), lowercase),\n Channel = <<\"hook-\", Suffix/binary>>,\n {ok, Mark} = tmux_command:raw(<<\"set-option\">>,\n [<<\"-t\">>, tmux_model:get(id, Session),\n <<\"@last-event\">>, <<\"split complete\">>]),\n {ok, Signal} = tmux_command:wait_for(Channel, signal),\n {ok, Wait} = tmux_command:wait_for(Channel, wait),\n {ok, Operation} = tmux_operation:start(Server, Wait, #{}),\n tmux_scope:run_or_error(fun() ->\n Name = <<\"after-split-window\">>,\n {ok, _} = tmux_hook:set(Session, {Name, 4}, [Mark, Signal]),\n {ok, _} = tmux_pane:split(Pane, Launch),\n {ok, #{cleanup := complete}} =\n tmux_operation:await(Operation, 900),\n {ok, <<\"split complete\">>} =\n tmux_option:get(Session, <<\"@last-event\">>, #{}),\n {ok, #{4 := _}} = tmux_hook:get(Session, Name, #{}),\n {ok, _} = tmux_hook:unset(Session, Name),\n none = tmux_hook:get(Session, Name, #{}),\n #{event => <<\"split complete\">>, hook_acknowledged => true,\n local_hook_removed => true}\n end, fun() ->\n tmux_scope:run_or_error(fun() ->\n {ok, _} = tmux_operation:cancel(Operation)\n end, fun() ->\n case tmux_operation:await(Operation, 900) of\n {ok, #{cleanup := complete}} -> ok;\n {error, #{cleanup := complete}} -> ok\n end\n end), ok\n end)\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"event\": \"split complete\",\n \"hook_acknowledged\": true,\n \"local_hook_removed\": true\n}\n```\n\n[Jobs and operations](jobs.md) explains why an await timeout abandons only\nthat wait.\n\n## Choose the table\n\n- `tmux_hook:set/3` needs a `{Name, Index}` key and validated `tmux_command`\n values. It replaces that indexed entry and keeps the others.\n- `append/3` takes tmux's first vacant local index, which can come before\n existing sparse entries. Commands run in index order.\n- A body is one command or a nonempty list. Rendering is bounded before\n dispatch.\n- Local tables use registered session, physical window or pane rows. Global\n tables use `{session_defaults, Server}` or `{window_defaults, Server}`.\n- The [source catalogue](options-reference.md) gives each built-in hook's scope\n and version.\n- This API rejects prefixes, aliases, ordinary options and custom event or\n monitor interfaces.\n\n## Read and remove\n\n- `get/3` reads local values by default. `inherit => true` follows parent\n tables.\n- An absent local array returns `none`. An empty array returns `{ok, #{}}` and\n masks inheritance.\n- `clear/2` leaves that empty override. `unset/2` removes an entry, or restores\n inheritance for the whole array. Unsetting an entry can leave the local array\n empty. A global unset resets the native default.\n- Read values are tmux's canonical command-list text, with its own quoting and\n escapes. They are not argument values or the original source. A read never\n runs them.\n\n## Registration, context and completion\n\n- Registration confirms that tmux stored the commands. They still interpret\n their values and formats when they run.\n- Native parsing can fail. A failed first indexed write can already leave an\n empty local override.\n- There is no rollback and no automatic retry of an uncertain mutation.\n- `tmux_hook:run/2` requests native execution in an explicit context: a session\n for its current window and pane, a checked window link for one membership, or\n `{pane, Pane, Link}` for a pane and membership.\n- A physical window alone cannot choose a context, so a link keeps the session\n and index when a window is linked more than once.\n- Existence and membership checks come before dispatch. If the target vanishes\n afterward, tmux can still fall back to another context. These observations\n are not atomic.\n- A command result does not acknowledge background work a hook launched. The\n program waits for its own signal after the option write.\n- Clearing or unsetting a hook does not cancel effects tmux already queued.\n\nSee [window memberships](graph.md) and [scoped options](options.md) for the\ngraph and inheritance rules.\n" }, { "path": "docs/keys.md", - "content": "# Install application keybindings\n\nUse a separate key table when an application needs its own bindings. This\nprogram binds `z` to zoom and show a status message, and `s` to show the\nworkspace name. It reads the native listing and removes its table. It does not\nattach a client or press a key.\n\nFrom the checkout, after [building the core](installation.md), run:\n\n```console\n$ mise exec -- escript tools/run_examples.escript keys\n```\n\n\n\n```erlang\n-module(key_demo).\n-moduledoc \"Install and remove an application-owned key table.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n Suffix = binary:encode_hex(crypto:strong_rand_bytes(8), lowercase),\n Table = <<\"workspace-\", Suffix/binary>>,\n {ok, Zoom} = tmux_command:raw(<<\"resize-pane\">>, [<<\"-Z\">>]),\n {ok, Status} = tmux_command:raw(<<\"display-message\">>,\n [<<\"Workspace: #{session_name}\">>]),\n {ok, _} = tmux_key:bind(Server, <<\"z\">>, [Zoom, Status],\n #{table => Table, note => <<\"Zoom the current workspace pane\">>}),\n tmux_scope:run_or_error(fun() ->\n {ok, _} = tmux_key:bind(Server, <<\"s\">>, Status,\n #{table => Table, note => <<\"Show the workspace name\">>}),\n {ok, Listing} = tmux_key:listing(Server, #{table => Table}),\n true = binary:match(Listing, <<\"resize-pane\">>) =/= nomatch,\n true = binary:match(Listing, <<\"display-message\">>) =/= nomatch,\n #{bindings => 2, native_listing => true,\n execution => <<\"requires a client key press\">>}\n end, fun() ->\n {ok, _} = tmux_key:clear_table(Server, Table),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"bindings\": 2,\n \"native_listing\": true,\n \"execution\": \"requires a client key press\"\n}\n```\n\nThe runner owns an isolated server. The program uses the public core API, and\nthe installed-archive check repeats it outside the source checkout. Common\nTest separately drives a real terminal client's key input, verifies the bound\ncommand's bytes and acknowledgement, and proves client retirement on success,\nfailure and cancellation.\n\n## Registration and execution are separate\n\n`tmux_key:bind/3` registers in the native prefix table.\n`tmux_key:bind/4` accepts an explicit `table`, Boolean `repeat` and byte `note`.\nIt accepts one command or a flat nonempty command list, with the bounds of\n`tmux_command:to_config/1`: at most 256 commands and 32 KiB of rendered text.\ntmux parses the body before replacing an existing binding. Replacement resets\nthe previous commands, repeat flag and note.\n\nTables belong to the server. Creating one does not select it for any client.\nChoose a session's default through the `key-table` option in\n[`tmux_option`](options.md); native prefix, repeat and client table-switching\nrules still apply. The example leaves client selection to the application.\n\nRegistration quotes arguments for the stored command parser. A command can\nstill interpret formats when a client executes it: the example's\n`#{session_name}` is evaluated then. See\n[configuration boundaries](configuration.md) before storing nested command\nstrings or explicit shell commands. An accepted registration does not prove\nfuture execution; arrange a completion signal when an application needs one,\nas in the [hook example](hooks.md).\n\n## Read listings and remove owned bindings\n\n`tmux_key:listing/1` and `tmux_key:listing/2` return native bytes unchanged.\nOptions can restrict `table` and `key`. Spacing, quoting and included metadata\nfollow the daemon release. This is a presentation view: retain original command\nvalues for reinstalling bindings. tmux 3.4 may escape dollar signs in this\nview. On tmux 3.7c, a single matching entry can go to the native status-message\npath and produce empty stdout when no target client is attached. Empty output\ndoes not prove a binding is absent. The example lists multiple bindings to\navoid that path. The tmux 3.3 baseline has no custom listing format option.\nExplicit newer-server options remain available through\n`tmux_command:raw/2`.\n\n`tmux_key:unbind/2` and `tmux_key:unbind/3` remove one binding; an absent key in\nan existing table is a native no-op. Removing the final custom binding may\nremove its table.\nMissing explicitly named tables and invalid native key names remain errors.\n`tmux_key:clear_table/2` requires an explicit name and removes the entire\ntable. It can affect attached clients and does not restore default bindings\nor cancel commands already queued by a client.\n\nCalls use the registered endpoint identity and preserve backend diagnostics.\nThey do not start a missing server or retry uncertain mutations. The native\n[`tmux_key` API browser](api.md) documents input bounds, results and errors.\n" + "content": "# Install application keybindings\n\nUse a separate key table for application bindings. This program binds `z` to\nzoom with a status message and `s` to show the workspace name, reads the native\nlisting and removes its table. It attaches no client and presses no key.\n\nFrom the checkout, after [building the core](installation.md), run:\n\n```console\n$ mise exec -- escript tools/run_examples.escript keys\n```\n\n\n\n```erlang\n-module(key_demo).\n-moduledoc \"Install and remove an application-owned key table.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n Suffix = binary:encode_hex(crypto:strong_rand_bytes(8), lowercase),\n Table = <<\"workspace-\", Suffix/binary>>,\n {ok, Zoom} = tmux_command:raw(<<\"resize-pane\">>, [<<\"-Z\">>]),\n {ok, Status} = tmux_command:raw(<<\"display-message\">>,\n [<<\"Workspace: #{session_name}\">>]),\n {ok, _} = tmux_key:bind(Server, <<\"z\">>, [Zoom, Status],\n #{table => Table, note => <<\"Zoom the current workspace pane\">>}),\n tmux_scope:run_or_error(fun() ->\n {ok, _} = tmux_key:bind(Server, <<\"s\">>, Status,\n #{table => Table, note => <<\"Show the workspace name\">>}),\n {ok, Listing} = tmux_key:listing(Server, #{table => Table}),\n true = binary:match(Listing, <<\"resize-pane\">>) =/= nomatch,\n true = binary:match(Listing, <<\"display-message\">>) =/= nomatch,\n #{bindings => 2, native_listing => true,\n execution => <<\"requires a client key press\">>}\n end, fun() ->\n {ok, _} = tmux_key:clear_table(Server, Table),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"bindings\": 2,\n \"native_listing\": true,\n \"execution\": \"requires a client key press\"\n}\n```\n\n## Register a binding\n\n- `tmux_key:bind/3` registers in the native prefix table.\n- `tmux_key:bind/4` takes an explicit `table`, a Boolean `repeat` and a byte\n `note`.\n- A body is one command or a flat nonempty list, within the limits of\n `tmux_command:to_config/1`: 256 commands and 32 KiB of rendered text.\n- tmux parses the body before it replaces an existing binding. Replacement\n resets the old commands, repeat flag and note.\n- Tables belong to the server. Creating one selects it for no client. Choose a\n session's default with the `key-table` option in [`tmux_option`](options.md).\n Native prefix, repeat and table-switching rules still apply.\n- Registration quotes arguments for the stored command parser. A command can\n still expand formats when a client runs it: the program's `#{session_name}`\n expands then. See [configuration](configuration.md) before you store nested\n command strings or shell commands.\n- An accepted registration does not prove future execution. When you need proof,\n arrange a completion signal as in the [hook example](hooks.md).\n\n## Read listings and remove bindings\n\n- `tmux_key:listing/1` and `listing/2` return native bytes unchanged. Options\n can restrict `table` and `key`.\n- The layout follows the daemon release. It is a display view: keep the\n original command values to reinstall bindings.\n- tmux 3.4 may escape dollar signs in this view.\n- On tmux 3.7c, one matching entry can take the native status-message path and\n give empty stdout when no client is attached. Empty output does not prove a\n binding is absent. The program lists several bindings to avoid that path.\n- tmux 3.3 has no custom listing format option. Newer-server options stay\n available through `tmux_command:raw/2`.\n- `tmux_key:unbind/2` and `unbind/3` remove one binding. An absent key in an\n existing table is a native no-op. Removing the last custom binding can remove\n its table.\n- A missing named table and an invalid key name stay errors.\n- `tmux_key:clear_table/2` needs an explicit name and removes the whole table.\n It can affect attached clients. It does not restore default bindings or\n cancel commands a client already queued.\n- Calls use the registered endpoint identity and keep backend diagnostics. They\n never start a missing server or retry an uncertain mutation.\n- The [API browser](api.md) documents input bounds, results and errors.\n" }, { "path": "docs/configuration.md", - "content": "# Apply configuration and await its completion signal\n\nSubmit a wait without blocking the Erlang caller, then load configuration that\nsets an owned session option and signals the channel. The signal works whether\nthe waiter arrives before or after it. The program verifies the stored value\nand checks that parse-only loading leaves it unchanged. The runner owns the\ndaemon and verifies session and process cleanup. Compile the project first:\n\n```console\n$ mise exec -- rebar3 compile\n```\n\nRun the complete program:\n\n```console\n$ mise exec -- escript tools/run_examples.escript config\n```\n\n\n\n```erlang\n-module(config_demo).\n-moduledoc \"Apply session configuration and wait for its explicit signal.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"configured-job\">>,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n Id = tmux_model:get(id, Session),\n Suffix = binary:encode_hex(crypto:strong_rand_bytes(8), lowercase),\n Channel = <<\"configured-\", Suffix/binary>>,\n {ok, Wait} = tmux_command:wait_for(Channel, wait),\n {ok, Operation} = tmux_operation:start(Server, Wait, #{}),\n {ok, Source} = tmux_command:source_file(stdin, #{}),\n Scope = [<<\"-t\">>, Id, <<\"@state\">>],\n {ok, Settings} = tmux_command:raw(<<\"set-option\">>,\n Scope ++ [<<\"configured\">>]),\n {ok, Signal} = tmux_command:wait_for(Channel, signal),\n {ok, Text} = tmux_command:to_config([Settings, Signal]),\n {ok, _} = tmux_server:command(Server, Source, #{stdin => Text}),\n {ok, #{cleanup := complete}} =\n tmux_operation:await(Operation, 900),\n State = <<\"@state\">>,\n {ok, <<\"configured\">>} = tmux_option:get(Session, State, #{}),\n ParseOptions = #{parse_only => true},\n {ok, Parse} = tmux_command:source_file(stdin, ParseOptions),\n {ok, NewValue} = tmux_command:raw(<<\"set-option\">>,\n Scope ++ [<<\"changed\">>]),\n {ok, Change} = tmux_command:to_config(NewValue),\n {ok, _} = tmux_server:command(Server, Parse, #{stdin => Change}),\n {ok, <<\"configured\">>} = tmux_option:get(Session, State, #{}),\n #{configuration_applied => true, event_received => true,\n parse_only_kept_value => true}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"configuration_applied\": true,\n \"event_received\": true,\n \"parse_only_kept_value\": true\n}\n```\n\nThe archive check repeats this program using the installed core package.\n[Jobs and operations](jobs.md) covers operation ownership, cancellation and\napplication-level completion events.\n\n## Choose input and execution separately\n\n`tmux_command:to_config/1` renders one validated command value or a nonempty\nflat list as native configuration text. Lists contain at most 256 commands and\nshare the 32 KiB rendered limit, including native separators. Rendering a list\ndoes not provide atomic execution or rollback. Argument quoting preserves\nliteral bytes through the lexer, including variables, semicolons, newline\nindentation and non-UTF-8 byte values. It returns ASCII text without\nperforming I/O. Escaping growth is bounded by a 32 KiB rendered limit. This\ncovers one lexer pass; native commands that accept command strings can parse\nthose strings again. Render each inner command separately for its own\nboundary. Native commands still interpret their arguments and formats\nnormally; this renderer does not quote shell code.\n\n`tmux_command:source_file/2` builds a command value without I/O. The source is\n`stdin` or one absolute POSIX byte path. Path glob characters and backslashes\nare quoted for tmux's glob parser; hash formats are not expanded. The builder\nnever opens the file. Reading and parsing occur when the command executes.\nThe file's size is not bounded by the command builder.\n\nFor stdin, pass bytes through the execution options of\n`tmux_server:command/3` or `tmux_operation:start/3`. The transport bounds stdin\nand rendered arguments together to 256 KiB. `parse_only` requests native\n`-n`: parse the input without executing its command list. `quiet` requests\nnative missing-file suppression; syntax and execution errors remain errors.\nBoth options default to false.\n\nConfiguration is trusted tmux code, with native directives and variable\nexpansion. Parse-only is not a sandbox. Execution can change state before\nreporting an error, and cancellation cannot roll back those effects. A\nsuccessful source command does not establish that background work launched\nby that configuration has finished. Check its actual completion event.\n\n## Coordinate channels explicitly\n\n`tmux_command:wait_for/2` accepts a binary channel name and one action: `wait`,\n`signal`, `lock` or `unlock`. Submit its result through the same execution\nAPIs. Native channel names are server-wide; use a name unique to the operation\nwhen other clients share the server.\n\nA signal wakes current waiters. On an unlocked channel with no waiters or\npending wakeup, it retains one wakeup for a later wait. Signaling again before\na wait can clear that pending state. Send once per expected wait; repeated\nsignals are neither counted nor reliably coalesced. Use separate names for\nsignaling and locking. `lock` and `unlock` expose native advisory channel\nlocks. A lock remains held after the acquiring command\nclient exits, until an explicit unlock. They are not library-owned leases.\nCancelling a command does not undo a signal or release a possibly acquired\nlock. An uncertain lock outcome requires application coordination before\nunlocking; blindly unlocking can release another client's lock.\n" + "content": "# Apply configuration and await its completion signal\n\nSubmit a wait without blocking the caller, then load configuration that sets\nan owned session option and signals the channel.\n\n- The signal works whether the waiter arrives before or after it.\n- The program checks the stored value, then checks that parse-only loading\n leaves it unchanged.\n- The runner supplies the daemon.\n\nCompile the project first:\n\n```console\n$ mise exec -- rebar3 compile\n```\n\nRun the complete program:\n\n```console\n$ mise exec -- escript tools/run_examples.escript config\n```\n\n\n\n```erlang\n-module(config_demo).\n-moduledoc \"Apply session configuration and wait for its explicit signal.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"configured-job\">>,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n Id = tmux_model:get(id, Session),\n Suffix = binary:encode_hex(crypto:strong_rand_bytes(8), lowercase),\n Channel = <<\"configured-\", Suffix/binary>>,\n {ok, Wait} = tmux_command:wait_for(Channel, wait),\n {ok, Operation} = tmux_operation:start(Server, Wait, #{}),\n {ok, Source} = tmux_command:source_file(stdin, #{}),\n Scope = [<<\"-t\">>, Id, <<\"@state\">>],\n {ok, Settings} = tmux_command:raw(<<\"set-option\">>,\n Scope ++ [<<\"configured\">>]),\n {ok, Signal} = tmux_command:wait_for(Channel, signal),\n {ok, Text} = tmux_command:to_config([Settings, Signal]),\n {ok, _} = tmux_server:command(Server, Source, #{stdin => Text}),\n {ok, #{cleanup := complete}} =\n tmux_operation:await(Operation, 900),\n State = <<\"@state\">>,\n {ok, <<\"configured\">>} = tmux_option:get(Session, State, #{}),\n ParseOptions = #{parse_only => true},\n {ok, Parse} = tmux_command:source_file(stdin, ParseOptions),\n {ok, NewValue} = tmux_command:raw(<<\"set-option\">>,\n Scope ++ [<<\"changed\">>]),\n {ok, Change} = tmux_command:to_config(NewValue),\n {ok, _} = tmux_server:command(Server, Parse, #{stdin => Change}),\n {ok, <<\"configured\">>} = tmux_option:get(Session, State, #{}),\n #{configuration_applied => true, event_received => true,\n parse_only_kept_value => true}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"configuration_applied\": true,\n \"event_received\": true,\n \"parse_only_kept_value\": true\n}\n```\n\n[Jobs and operations](jobs.md) covers operation ownership, cancellation and\napplication-level completion events.\n\n## Render configuration\n\n- `tmux_command:to_config/1` renders one validated command, or a nonempty flat\n list, as native configuration text. It does no I/O.\n- A list holds at most 256 commands and shares the 32 KiB rendered limit,\n including native separators. Rendering a list gives no atomic execution or\n rollback.\n- Quoting keeps literal bytes through the lexer: variables, semicolons,\n newline indentation and non-UTF-8 bytes. The result is ASCII text.\n- That covers one lexer pass. Native commands that take command strings can\n parse those strings again, so render each inner command separately for its\n own boundary.\n- Native commands still interpret their arguments and formats. The renderer\n does not quote shell code.\n\n## Source a file or stdin\n\n- `tmux_command:source_file/2` builds a command value without I/O. The source\n is `stdin` or one absolute POSIX byte path.\n- Glob characters and backslashes in a path are quoted for tmux's glob parser.\n Hash formats are not expanded.\n- The builder never opens the file. Reading and parsing happen when the command\n runs, and the file size is not bounded by the builder.\n- For stdin, pass bytes in the execution options of `tmux_server:command/3` or\n `tmux_operation:start/3`. The transport bounds stdin and rendered arguments\n together to 256 KiB.\n- `parse_only` requests native `-n`: parse without executing. `quiet` requests\n native missing-file suppression. Syntax and execution errors stay errors.\n Both default to false.\n\nConfiguration is trusted tmux code, with native directives and variable\nexpansion.\n\n- Parse-only is not a sandbox.\n- Execution can change state before it reports an error. Cancellation cannot\n roll that back.\n- A successful source command does not mean background work it launched has\n finished. Check that work's own completion event.\n\n## Coordinate channels\n\n- `tmux_command:wait_for/2` takes a binary channel name and one action: `wait`,\n `signal`, `lock` or `unlock`. Submit the result through the same execution\n APIs.\n- Channel names are server-wide. Use a name unique to the operation when other\n clients share the server.\n- A signal wakes current waiters. On an unlocked channel with no waiters or\n pending wakeup, it keeps one wakeup for a later wait. Signalling again before\n a wait can clear that state.\n- Send one signal per expected wait. Repeated signals are not counted or\n reliably coalesced. Use separate names for signalling and locking.\n- `lock` and `unlock` are native advisory locks, not library-owned leases. A\n lock stays held after the acquiring client exits, until an explicit unlock.\n- Cancelling a command does not undo a signal or release a lock it may have\n taken.\n- After an uncertain lock outcome, coordinate in your application before you\n unlock. A blind unlock can release another client's lock.\n" }, { "path": "docs/commands.md", - "content": "# Build commands before running them\n\nPrepare a literal session rename and a pane resize, then submit the values\nexplicitly. Building validates their captured target and arguments without\ncontacting tmux. Execution checks the endpoint origin and returns the native\none-shot result. The resize uses an operation handle so waiting is explicit.\n\nThis complete program checks the name before execution, awaits the resize,\nreads fresh dimensions and verifies that earlier rows keep their values. The\nrunner owns the private fixture and verifies cleanup:\n\n```console\n$ mise exec -- escript tools/run_examples.escript commands\n```\n\n\n\n```erlang\n-module(command_demo).\n-moduledoc \"Build captured-target commands, then execute and inspect them.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n Endpoint = #{socket_path => Socket, executable => Executable},\n {ok, Server} = tmux_server:open(Endpoint),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"commands\">>, width => 120, height => 30,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n SessionId = tmux_model:get(id, Session),\n {ok, Snapshot} = tmux_server:snapshot(Server),\n [Anchor] = tmux_snapshot:panes(Snapshot),\n {ok, Pane} = tmux_pane:split(Anchor,\n #{direction => horizontal, size => {cells, 40},\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n {ok, Rename} = tmux_session:rename_command(\n Session, <<\"commands-ready\">>),\n {ok, Resize} = tmux_pane:resize_command(Pane, #{width => 60}),\n {ok, OtherEndpoint} = tmux_server:open(Endpoint),\n tmux_scope:run_or_error(fun() ->\n {error, #{code := different_owner, submitted := false}} =\n tmux_server:command(OtherEndpoint, Rename, #{})\n end, fun() ->\n ok = tmux_server:close(OtherEndpoint)\n end),\n {ok, Before} = tmux_session:get(Server, SessionId),\n <<\"commands\">> = tmux_model:get(name, Before),\n 40 = tmux_model:get(width, Pane),\n {ok, #{exit_status := 0, cleanup := complete}} =\n tmux_server:command(Server, Rename, #{}),\n {ok, Operation} = tmux_operation:start(Server, Resize, #{}),\n {ok, #{exit_status := 0, cleanup := complete}} =\n tmux_operation:await(Operation, 900),\n {ok, Current} = tmux_pane:get(Server, tmux_model:get(id, Pane)),\n 60 = tmux_model:get(width, Current),\n {ok, Renamed} = tmux_session:get(Server, SessionId),\n <<\"commands-ready\">> = tmux_model:get(name, Renamed),\n <<\"commands\">> = tmux_model:get(name, Session),\n 40 = tmux_model:get(width, Pane),\n #{name => <<\"commands-ready\">>, initial_width => 40,\n actual_width => 60, captured_values_unchanged => true,\n foreign_origin_rejected => true}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"name\": \"commands-ready\",\n \"initial_width\": 40,\n \"actual_width\": 60,\n \"captured_values_unchanged\": true,\n \"foreign_origin_rejected\": true\n}\n```\n\nThe archive check runs this program through the installed public package.\n`tmux_session:rename/2` and `tmux_pane:resize/2` perform their operations\nimmediately; their command builders return reusable values. Reusing a value\nrequires explicit intent each time. An uncertain mutation result must not\ntrigger an automatic retry.\n\nA command keeps the originating row's endpoint token. Submitting it through\nanother endpoint returns `different_owner` with `submitted = false`, even if\nboth servers happen to use the same pane or session ID. Building alone does\nnot establish endpoint liveness. The example rejects a second endpoint handle\nto the same daemon too. To act through another endpoint, bind the row there\nand build a new command. Bind detached rows with\n`tmux_server:bind/2` before building their commands.\n\n`tmux_command:to_config/1` renders command syntax without\nexecuting it. Serialized configuration carries no origin token; the caller\nmust choose and validate that destination explicitly. See\n[jobs and operations](jobs.md) for wait timeouts, ownership and cancellation,\nthe [configuration guide](configuration.md) for rendering, and\n[current support](compatibility.md) for transport qualification.\n" + "content": "# Build commands before running them\n\nPrepare a session rename and a pane resize, then submit them explicitly.\nBuilding validates the captured target and arguments without contacting tmux.\nExecution checks the endpoint origin and returns the native one-shot result.\n\nThe program checks the name before execution, awaits the resize through an\noperation handle, reads fresh dimensions and verifies that earlier rows keep\ntheir values. The runner supplies the private server:\n\n```console\n$ mise exec -- escript tools/run_examples.escript commands\n```\n\n\n\n```erlang\n-module(command_demo).\n-moduledoc \"Build captured-target commands, then execute and inspect them.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n Endpoint = #{socket_path => Socket, executable => Executable},\n {ok, Server} = tmux_server:open(Endpoint),\n tmux_scope:run_or_error(fun() ->\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"commands\">>, width => 120, height => 30,\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n tmux_scope:run_or_error(fun() ->\n SessionId = tmux_model:get(id, Session),\n {ok, Snapshot} = tmux_server:snapshot(Server),\n [Anchor] = tmux_snapshot:panes(Snapshot),\n {ok, Pane} = tmux_pane:split(Anchor,\n #{direction => horizontal, size => {cells, 40},\n launch => #{argv => [<<\"/bin/cat\">>]}}),\n {ok, Rename} = tmux_session:rename_command(\n Session, <<\"commands-ready\">>),\n {ok, Resize} = tmux_pane:resize_command(Pane, #{width => 60}),\n {ok, OtherEndpoint} = tmux_server:open(Endpoint),\n tmux_scope:run_or_error(fun() ->\n {error, #{code := different_owner, submitted := false}} =\n tmux_server:command(OtherEndpoint, Rename, #{})\n end, fun() ->\n ok = tmux_server:close(OtherEndpoint)\n end),\n {ok, Before} = tmux_session:get(Server, SessionId),\n <<\"commands\">> = tmux_model:get(name, Before),\n 40 = tmux_model:get(width, Pane),\n {ok, #{exit_status := 0, cleanup := complete}} =\n tmux_server:command(Server, Rename, #{}),\n {ok, Operation} = tmux_operation:start(Server, Resize, #{}),\n {ok, #{exit_status := 0, cleanup := complete}} =\n tmux_operation:await(Operation, 900),\n {ok, Current} = tmux_pane:get(Server, tmux_model:get(id, Pane)),\n 60 = tmux_model:get(width, Current),\n {ok, Renamed} = tmux_session:get(Server, SessionId),\n <<\"commands-ready\">> = tmux_model:get(name, Renamed),\n <<\"commands\">> = tmux_model:get(name, Session),\n 40 = tmux_model:get(width, Pane),\n #{name => <<\"commands-ready\">>, initial_width => 40,\n actual_width => 60, captured_values_unchanged => true,\n foreign_origin_rejected => true}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end).\n```\n\n\n\n```json\n{\n \"name\": \"commands-ready\",\n \"initial_width\": 40,\n \"actual_width\": 60,\n \"captured_values_unchanged\": true,\n \"foreign_origin_rejected\": true\n}\n```\n\n- `tmux_session:rename/2` and `tmux_pane:resize/2` act at once. Their\n `_command` builders return reusable values.\n- Reusing a value needs explicit intent each time.\n- Never retry an uncertain mutation automatically.\n\n## Keep the endpoint\n\n- A command keeps its row's endpoint token. Submitting it through another\n endpoint returns `different_owner` with `submitted = false`, even when both\n endpoints use the same pane or session ID. The program checks this with a\n second handle to the same daemon.\n- To act through another endpoint, bind the row there and build a new command.\n Bind a detached row with `tmux_server:bind/2` first.\n- Building does not check that the endpoint is alive.\n\n## Render without running\n\n- `tmux_command:to_config/1` renders command syntax without executing it.\n- Rendered configuration carries no origin token. Choose and validate the\n destination yourself.\n\nSee [jobs and operations](jobs.md) for wait timeouts, ownership and\ncancellation, the [configuration guide](configuration.md) for rendering, and\n[current support](compatibility.md) for transport limits.\n" }, { "path": "docs/compatibility.md", - "content": "# Support and remaining gaps\n\nSupport covers tmux **3.3a–3.8**, including intermediate releases, on Linux\nx86_64 and arm64. The [workflow](../.github/workflows/ci.yml) tests the oldest\nsupported and newest stable tmux releases on both architectures.\nOTP 29.1.2 is the only supported Erlang baseline;\nolder-OTP compatibility branches are not maintained. Native records remain an\nexperimental language dependency in OTP 29. Do not persist their internals or\nassume compatibility with another OTP line.\n\n| Platform | tmux releases in the required matrix |\n| --- | --- |\n| Ubuntu 24.04 x86_64 | 3.3a, 3.8 |\n| Ubuntu 24.04 arm64 | 3.3a, 3.8 |\n\nCI uses only the latest stable Erlang/OTP release. Testing the endpoints keeps\nthe routine matrix small; it does not exclude releases between them from\nsupport. Earlier intermediate-version results retain their recorded scope.\n\nInspect the individual jobs at the commit you will consume. A minimum-version\ncheck does not prove runtime support on every newer release. Tracking builds,\nmacOS, native Windows and psmux are not advertised as qualified platforms.\n\nLinux must provide readable `/proc/self/task//children`, enabled by\nCONFIG_PROC_CHILDREN. The helper checks this interface before launching a\nchild. An unavailable interface returns `unsupported_capability` with\n`capability => proc_children`, the OS `errno` and `outcome => not_started`.\nSee the [helper protocol](../apps/libtmux_erlang/c_src/README.md) for cleanup\nevidence and the limits of native process ownership.\n\n## Retained rows and upgrades\n\nNative model version 2 adds a private captured target association to each\nobserved row. Actions check the entity, stable ID, origin and snapshot ID;\npane associations also retain the observed window and index, and window-link\nassociations retain their session, index and expected physical window.\nActions reject edited target fields before dispatch. Valid-shaped binding\nmismatches return `observation_mismatch`; detached and malformed rows retain\ntheir validation errors. `tmux_server:bind/2` reads the requested target and returns\na new actionable row. Ordinary record matching and detached constructors\nremain available.\n\nThe private value retains identifiers, not the snapshot graph. It prevents\naccidental retargeting through public row updates; it is not an authorization\nboundary against trusted code running inside the VM. The internal construction\nfunctions remain implementation details.\n\nDiscard version-1 rows and snapshots when upgrading to model version 2. Stop\nconsumers that retain them, clear their process/ETS state and freshly observe\nthe server after restart. This release supplies no `appup`/`relup` conversion.\nOld or unknown model versions fail row validation. New code must validate a\nretained value before accessing fields added by another model version.\n\nEvery exported-field addition, rename, removal or default change requires a\nmodel compatibility review independently of the OTP version. Its changelog\nmust state whether retained values remain usable, need an explicit validated\nconversion, or must be discarded. Do not assume hot loading changes fields in\nexisting native values.\n\n`tmux_model:to_map/1` extracts the documented domain fields from a valid row.\nValidate those fields with the destination model's constructor when migrating\ndata. The map loses actionable provenance; bind it through a freshly\nconstructed row before an action. It is not a versioned storage or cross-port\nwire format: absence atoms, binary bytes and field inventories still require\nan application-defined schema.\n\n## Implemented surfaces\n\n| Surface | Current behavior |\n| --- | --- |\n| Model | Exported native session/window/window-link/pane records; runtime validation |\n| Capture | Immutable complete graph, coverage, ordering, conflict detection and read intervals |\n| Local query | Map predicates, Boolean callbacks, quantifiers, cardinality and bounded JSON |\n| Source query | Explicit plans/fetch, conservative candidates, full residuals and final limits |\n| Operations | Bounded one-shot submission, waits, cancellation, transfer and cleanup |\n| Control attachment | Explicit session, same-connection identity, no-output/ignore-size, skipped environment update and separate native cleanup |\n| Daemon ownership | Empty private startup, separate ownership token, caller lifetime, explicit stop and identity-checked namespace cleanup |\n| Domain commands | Initial create/read/rename/kill calls, explicit client/session selection, checked window memberships, pane split/break/join/move/swap/resize, pane/window respawn, window layouts, literal/key input and capture |\n| Options | Explicit local/global tables, local or inherited reads, indexed writes/unsets and generated source metadata; hooks remain outside the option API |\n| Hooks | Versioned builtin arrays, indexed command values, inheritance and explicit execution contexts |\n| Buffers | Named or automatic binary load, exact show, metadata lists, delete/rename and paste; native version differences are explicit |\n| Server utilities | Command values for literal source-file/stdin configuration and native wait-for signals, waits and explicit advisory locks |\n| Pane pipe | Literal shell command, output/input/both directions, native toggle and explicit stop; tmux-owned process and delivery checks |\n\nThe [examples](../examples) exercise the current public API. Real integration\nchecks use private sockets and verify owned process retirement. A captured row\ncan disappear before an action; stable IDs are not permission to reinterpret a\nmissing target positionally.\n\n## Not yet shipped\n\nControl command submission and groups and output subscriptions/streams remain\nimplementation work. Complete performance qualification remains open.\n\nTyped command coverage, generated capability inventory, public cross-port\nfilter conformance, published native API pages, shared-site documentation and\nindependent implementation reviews remain open. Current test success does not\npass those unfinished surfaces. The only registry publication is the core\npackage on [Hex](https://hex.pm/packages/libtmux_erlang); HexDocs is not\npublished.\n\n## Source installation\n\nThe [source-package check](../tools/check_source_package.py) builds the core\napplication with pinned `rebar3_hex` tooling. It serves the exact tarball\nthrough a signed local registry, then creates a fresh Rebar3 consumer whose\nonly dependency is the core. The core must compile its helper from packaged C\nsource. Missing compiler support fails installation.\nThe installed examples, native-record imports, model-upgrade check and owned\ntransport checks run against that consumer.\n\nCI runs this gate on both supported architectures with tmux 3.3a and 3.8.\nInspect its receipt for the commit being consumed. These local source artifacts\nretain the development version; the check neither publishes to Hex nor proves\nan independently retrieved registry release. The older compiled-archive check\nremains separate evidence for its own payload.\n\n## Performance evidence\n\nThe current suite checks behavior and resource limits. It does not establish a\ncontrol/grouping/streaming comparison because those execution lanes are not implemented.\nAny published benchmark must compare equal workloads and values, state the\nsource/tool/platform identities, and report errors and cleanup as well as time.\nTest-loop durations are not throughput benchmarks.\n" + "content": "# Support and remaining gaps\n\n- **tmux:** 3.3a is the floor. Tested: 3.3a through 3.8, including\n intermediate releases, on Linux x86_64 and arm64.\n- **Erlang/OTP:** 29 only. The application refuses to start on another release,\n and older-OTP branches are not maintained.\n- **Native records:** experimental in OTP 29. Do not persist their internals or\n assume they carry over to another OTP line.\n- **Built-in options and hooks:** each tmux release needs a catalogue entry. An\n unlisted release returns `unsupported_option_catalogue` for them.\n\n| Platform | tmux releases in the required matrix |\n| --- | --- |\n| Ubuntu 24.04 x86_64 | 3.3a, 3.8 |\n| Ubuntu 24.04 arm64 | 3.3a, 3.8 |\n\n- CI uses only the latest stable Erlang/OTP and tests the oldest and newest\n tmux. Releases between them stay supported.\n- Earlier intermediate-version results keep their recorded scope.\n- Read the [workflow](../.github/workflows/ci.yml) jobs at the commit you will\n use. A minimum-version check does not prove support on every newer release.\n- Tracking builds, macOS, native Windows and psmux are not advertised as\n supported.\n\n## Linux process interface\n\n- Linux must provide a readable `/proc/self/task//children`, enabled by\n CONFIG_PROC_CHILDREN. The helper checks it before it launches a child.\n- When it is missing, the call returns `unsupported_capability` with\n `capability => proc_children`, the OS `errno` and `outcome => not_started`.\n- The [helper protocol](../apps/libtmux_erlang/c_src/README.md) covers cleanup\n evidence and the limits of native process ownership.\n\n## Retained rows and upgrades\n\nNative model version 2 adds a private captured-target association to each\nobserved row.\n\n- Actions check the entity, stable ID, origin and snapshot ID. A pane\n association also keeps the observed window and index. A window-link\n association keeps its session, index and expected physical window.\n- Actions reject edited target fields before dispatch. A well-formed mismatch\n returns `observation_mismatch`. Detached and malformed rows keep their\n validation errors.\n- `tmux_server:bind/2` reads the requested target and returns a new actionable\n row. Ordinary record matching and detached constructors still work.\n- The association holds identifiers, not the snapshot graph. It stops\n accidental retargeting through public row updates. It is not an authorization\n boundary against trusted code in the VM. The internal construction functions\n are implementation details.\n\nMoving from model version 1:\n\n- Discard version-1 rows and snapshots. Stop consumers that retain them, clear\n their process and ETS state, and observe the server afresh after a restart.\n- There is no `appup` or `relup` conversion. Old or unknown model versions fail\n row validation. Validate a retained value before you read a field another\n model version added.\n- Any exported-field addition, rename, removal or default change needs a model\n compatibility review, whatever the OTP version. Its changelog says whether\n retained values stay usable, need an explicit validated conversion, or must\n be discarded.\n- Hot loading does not change fields in existing native values.\n\nStoring rows:\n\n- `tmux_model:to_map/1` extracts the documented fields from a valid row.\n Validate them with the destination model's constructor when you migrate data.\n- The map loses actionable provenance. Bind it through a freshly constructed\n row before you act on it.\n- It is not a versioned storage or cross-port wire format. Absence atoms,\n binary bytes and field inventories need an application-defined schema.\n\n## Implemented surfaces\n\n| Surface | Current behavior |\n| --- | --- |\n| Model | Exported native session/window/window-link/pane records; runtime validation |\n| Capture | Immutable complete graph, coverage, ordering, conflict detection and read intervals |\n| Local query | Map predicates, Boolean callbacks, quantifiers, cardinality and bounded JSON |\n| Source query | Explicit plans/fetch, conservative candidates, full residuals and final limits |\n| Operations | Bounded one-shot submission, waits, cancellation, transfer and cleanup |\n| Control attachment | Explicit session, same-connection identity, no-output/ignore-size, skipped environment update and separate native cleanup |\n| Daemon ownership | Empty private startup, separate ownership token, caller lifetime, explicit stop and identity-checked namespace cleanup |\n| Domain commands | Initial create/read/rename/kill calls, explicit client/session selection, checked window memberships, pane split/break/join/move/swap/resize, pane/window respawn, window layouts, literal/key input and capture |\n| Options | Explicit local/global tables, local or inherited reads, indexed writes/unsets and generated source metadata; hooks remain outside the option API |\n| Hooks | Versioned builtin arrays, indexed command values, inheritance and explicit execution contexts |\n| Buffers | Named or automatic binary load, exact show, metadata lists, delete/rename and paste; native version differences are explicit |\n| Server utilities | Command values for literal source-file/stdin configuration and native wait-for signals, waits and explicit advisory locks |\n| Pane pipe | Literal shell command, output/input/both directions, native toggle and explicit stop; tmux-owned process and delivery checks |\n\n- Each guide's program exercises the current public API.\n- A captured row can vanish before an action. A stable ID is no permission to\n read a missing target by position.\n\n## Not yet built\n\n- Control command submission, command groups and output subscriptions or\n streams.\n- Complete performance qualification.\n- Typed command coverage, a generated capability inventory, public cross-port\n filter conformance and independent implementation reviews.\n- The core is on [Hex](https://hex.pm/packages/libtmux_erlang). HexDocs is not\n published.\n\n## Source installation\n\n- The [source-package check](../tools/check_source_package.py) builds the core\n with pinned `rebar3_hex` tooling, serves the tarball through a signed local\n registry, and builds a fresh Rebar3 consumer whose only dependency is the\n core.\n- The core must compile its helper from packaged C source. Missing compiler\n support fails installation.\n- CI runs the check on both architectures with tmux 3.3a and 3.8. Read its\n receipt for the commit you use.\n- The check does not publish to Hex or prove a release fetched from the\n registry.\n\n## Performance\n\n- The suite checks behavior and resource limits. It makes no control, grouping\n or streaming comparison, because those lanes are not built.\n- A published benchmark must compare equal workloads and values, name the\n source, tool and platform, and report errors and cleanup as well as time.\n- Test-loop durations are not throughput benchmarks.\n" }, { "path": "docs/pipe.md", - "content": "# Save a job's output and verify the consumer received it\n\nThis program opens a pane pipe before releasing the producer. A shell consumer\nreads the expected bytes into a log and signals completion only after that\nwrite succeeds. The Erlang caller verifies the file contents before stopping\nthe pipe. It does not infer delivery from pipe creation or command completion.\n\nCompile the project:\n\n```console\n$ mise exec -- rebar3 compile\n```\n\nRun on an owned server. The runner verifies session and process cleanup:\n\n```console\n$ mise exec -- escript tools/run_examples.escript pipe\n```\n\n\n\n```erlang\n-module(pipe_demo).\n-moduledoc \"Save terminal bytes after a consumer acknowledgement.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n Suffix = binary:encode_hex(crypto:strong_rand_bytes(8), lowercase),\n Directory = <<\"/tmp/ltm-pipe-example-\", Suffix/binary>>,\n ok = file:make_dir(Directory),\n tmux_scope:run_or_error(fun() ->\n ok = file:change_mode(Directory, 8#700),\n Log = <>,\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n Native = <<(quote(Executable))/binary,\n \" -N -S \", (quote(Socket))/binary, \" wait-for \">>,\n Start = <<\"start-\", Suffix/binary>>,\n Done = <<\"consumed-\", Suffix/binary>>,\n Producer = <<\"stty -onlcr && \", Native/binary, Start/binary,\n \" && printf 'build complete\\\\n' && exec /bin/cat\">>,\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"pipe-example\">>, launch => #{argv =>\n [<<\"/bin/sh\">>, <<\"-c\">>, Producer]}}),\n tmux_scope:run_or_error(fun() ->\n {ok, Snapshot} = tmux_server:snapshot(Server),\n [Pane] = tmux_snapshot:panes(Snapshot),\n Payload = <<\"build complete\\n\">>,\n Size = integer_to_binary(byte_size(Payload)),\n Consumer = <<\"/usr/bin/head -c \", Size/binary,\n \" > \", (quote(Log))/binary, \" && \", Native/binary,\n \"-S \", Done/binary, \" && exec /bin/cat >/dev/null\">>,\n {ok, Wait} = tmux_command:wait_for(Done, wait),\n {ok, Operation} = tmux_operation:start(Server, Wait, #{}),\n {ok, _} = tmux_pane:pipe(Pane, #{shell => Consumer}, #{}),\n {ok, Signal} = tmux_command:wait_for(Start, signal),\n {ok, _} = tmux_server:command(Server, Signal, #{}),\n {ok, #{cleanup := complete}} =\n tmux_operation:await(Operation, 900),\n {ok, Payload} = file:read_file(Log),\n {ok, _} = tmux_pane:stop_pipe(Pane),\n #{log => Payload, bytes_written => byte_size(Payload),\n consumer_acknowledged => true}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end)\n end, fun() ->\n ok = file:del_dir_r(Directory)\n end).\n\nquote(Value) ->\n Escaped = binary:replace(Value, <<\"'\">>, <<\"'\\\\''\">>, [global]),\n <<\"'\", Escaped/binary, \"'\">>.\n```\n\n\n\n```json\n{\n \"log\": \"build complete\\n\",\n \"bytes_written\": 15,\n \"consumer_acknowledged\": true\n}\n```\n\nThe example uses Linux shell utilities `stty`, `/usr/bin/head` and `/bin/cat`.\nIt disables newline translation on the producer's terminal, so the expected\nlog contains LF bytes. The temporary log is removed after verification. The\narchive check repeats the program with the installed core package.\n\n## Choose direction and replacement behavior\n\n`tmux_pane:pipe/3` requires an explicit shell-command map and a registered\nphysical pane. It escapes hash and strftime directives before tmux expands\nthat text. The shell still interprets the command; the example's `quote/1`\nhandles values inserted into its shell code. This native operation takes shell\ncode rather than executable argv.\n\n`tmux_command:literal_format/2` documents the encoding limits. Percent-bearing\ncommands above tmux's 8191-byte intermediate time-format limit return\n`format_limit` before dispatch. That check preserves an existing pipe when a\nreplacement cannot be represented safely.\n\n| Direction | Connection |\n| --- | --- |\n| `output` (default) | Pane PTY output to child stdin |\n| `input` | Child stdout to pane input |\n| `both` | Both connections |\n\nTerminal modes affect these bytes. This is neither rendered screen capture\nnor a replay of prior terminal history. It is not an Erlang subscription with\nlibrary flow control. Child stderr is discarded; unused directions use tmux's\nnative null-device routing. The API does not copy the pane's cwd or environment\ninto the child process.\n\nStarting a pipe normally replaces an existing one. `toggle => true` maps to\nnative `-o`: an open pipe is closed without starting another, while a closed\npipe is opened. It does not mean preserve an already open pipe.\n\n## Distinguish the pipe from its process\n\nA successful action proves command completion, not shell execution success,\nconsumer readiness, delivered bytes or process exit. The example observes the\nconsumer's actual file write. Native integration tests independently verify\nall 256 byte values in both directions, literal hash/percent shell text,\nreplacement, toggle and process retirement.\n\n`tmux_pane:stop_pipe/1` closes the native connection and can discard pending\nbytes. Wait for the consumer's acknowledgement before closing when delivery\nmatters. Closing does not kill or wait for an arbitrary shell process; a\nconsumer that does not finish on EOF needs application-level coordination.\n`tmux_server:close/1` preserves the borrowed pane and its tmux-owned pipe.\n[Jobs and operations](jobs.md) covers library-owned command clients;\n[configuration and signals](configuration.md) explains native wait channels.\n" + "content": "# Save a job's output and verify the consumer received it\n\nThis program opens a pane pipe before releasing the producer. A shell consumer\nlogs the expected bytes and signals after the write succeeds. The caller checks\nthe file before stopping the pipe. It never infers delivery from the command.\n\nCompile the project:\n\n```console\n$ mise exec -- rebar3 compile\n```\n\nRun it on an owned server:\n\n```console\n$ mise exec -- escript tools/run_examples.escript pipe\n```\n\n\n\n```erlang\n-module(pipe_demo).\n-moduledoc \"Save terminal bytes after a consumer acknowledgement.\".\n-export([run/2]).\n\n-spec run(binary(), binary()) -> map().\nrun(Socket, Executable) ->\n Suffix = binary:encode_hex(crypto:strong_rand_bytes(8), lowercase),\n Directory = <<\"/tmp/ltm-pipe-example-\", Suffix/binary>>,\n ok = file:make_dir(Directory),\n tmux_scope:run_or_error(fun() ->\n ok = file:change_mode(Directory, 8#700),\n Log = <>,\n {ok, Server} = tmux_server:open(\n #{socket_path => Socket, executable => Executable}),\n tmux_scope:run_or_error(fun() ->\n Native = <<(quote(Executable))/binary,\n \" -N -S \", (quote(Socket))/binary, \" wait-for \">>,\n Start = <<\"start-\", Suffix/binary>>,\n Done = <<\"consumed-\", Suffix/binary>>,\n Producer = <<\"stty -onlcr && \", Native/binary, Start/binary,\n \" && printf 'build complete\\\\n' && exec /bin/cat\">>,\n {ok, Session} = tmux_session:create(Server,\n #{name => <<\"pipe-example\">>, launch => #{argv =>\n [<<\"/bin/sh\">>, <<\"-c\">>, Producer]}}),\n tmux_scope:run_or_error(fun() ->\n {ok, Snapshot} = tmux_server:snapshot(Server),\n [Pane] = tmux_snapshot:panes(Snapshot),\n Payload = <<\"build complete\\n\">>,\n Size = integer_to_binary(byte_size(Payload)),\n Consumer = <<\"/usr/bin/head -c \", Size/binary,\n \" > \", (quote(Log))/binary, \" && \", Native/binary,\n \"-S \", Done/binary, \" && exec /bin/cat >/dev/null\">>,\n {ok, Wait} = tmux_command:wait_for(Done, wait),\n {ok, Operation} = tmux_operation:start(Server, Wait, #{}),\n {ok, _} = tmux_pane:pipe(Pane, #{shell => Consumer}, #{}),\n {ok, Signal} = tmux_command:wait_for(Start, signal),\n {ok, _} = tmux_server:command(Server, Signal, #{}),\n {ok, #{cleanup := complete}} =\n tmux_operation:await(Operation, 900),\n {ok, Payload} = file:read_file(Log),\n {ok, _} = tmux_pane:stop_pipe(Pane),\n #{log => Payload, bytes_written => byte_size(Payload),\n consumer_acknowledged => true}\n end, fun() ->\n {ok, _} = tmux_session:kill(Session),\n ok\n end)\n end, fun() ->\n ok = tmux_server:close(Server)\n end)\n end, fun() ->\n ok = file:del_dir_r(Directory)\n end).\n\nquote(Value) ->\n Escaped = binary:replace(Value, <<\"'\">>, <<\"'\\\\''\">>, [global]),\n <<\"'\", Escaped/binary, \"'\">>.\n```\n\n\n\n```json\n{\n \"log\": \"build complete\\n\",\n \"bytes_written\": 15,\n \"consumer_acknowledged\": true\n}\n```\n\n- The program uses the Linux utilities `stty`, `/usr/bin/head` and `/bin/cat`.\n- It turns off newline translation on the producer's terminal, so the log holds\n LF bytes.\n- It removes the temporary log after checking it.\n\n## Choose direction and replacement\n\n- `tmux_pane:pipe/3` takes an explicit shell-command map and a registered\n physical pane. It escapes hash and strftime directives before tmux expands\n the text.\n- The shell still interprets the command. The program's `quote/1` handles\n values it inserts into shell code. This operation takes shell code, not\n executable argv.\n- `tmux_command:literal_format/2` documents the encoding limits. A command with\n percent signs above tmux's 8191-byte time-format limit returns\n `format_limit` before dispatch, so an existing pipe survives a replacement\n that cannot be represented.\n\n| Direction | Connection |\n| --- | --- |\n| `output` (default) | Pane PTY output to child stdin |\n| `input` | Child stdout to pane input |\n| `both` | Both connections |\n\n- Terminal modes affect these bytes.\n- This is not rendered screen capture and not a replay of earlier history. It\n is not an Erlang subscription with library flow control.\n- Child stderr is discarded. Unused directions go to the null device.\n- The API does not copy the pane's working directory or environment into the\n child.\n- Starting a pipe normally replaces an existing one. `toggle => true` maps to\n native `-o`: an open pipe closes without starting another, and a closed pipe\n opens. It does not keep an open pipe.\n\n## Tell the pipe from its process\n\n- A successful action proves command completion. It does not prove the shell\n ran, the consumer was ready, bytes arrived or the process exited. The program\n watches the consumer's own file write.\n- `tmux_pane:stop_pipe/1` closes the native connection and can discard pending\n bytes. Wait for the consumer's acknowledgement first when delivery matters.\n- Closing does not kill or wait for a shell process. A consumer that does not\n finish at EOF needs application-level coordination.\n- `tmux_server:close/1` leaves the borrowed pane and its tmux-owned pipe alone.\n\nSee [jobs and operations](jobs.md) for library-owned command clients and\n[configuration and signals](configuration.md) for native wait channels.\n" }, { "path": "docs/fields.md", @@ -94,7 +94,7 @@ }, { "path": "docs/api.md", - "content": "# Build and browse the native API\n\nCore contracts live in Erlang `-moduledoc`, `-doc` and specs.\nOTP's compiler stores EEP-48 documentation chunks; ExDoc renders searchable module,\nfunction and type pages. Source links open captured files with line anchors\nand content digests. An unchanged file also links to its exact Git commit;\nchanged files are labelled as working-tree previews.\n\nCompile the project:\n\n```console\n$ mise exec -- rebar3 compile\n```\n\nPrepare the checksum-pinned ExDoc tool. This step uses the network:\n\n```console\n$ python3 tools/build_docs.py --prepare\n```\n\nBuild the browser without fetching dependencies:\n\n```console\n$ mise exec -- python3 tools/build_docs.py\n```\n\nOpen `_build/docs/core/index.html`. This is a local build, not a published\nHexDocs URL. The build refreshes compiled modules before rendering. The\nrenderer treats warnings as failures and uses the OTP 29\nbuild of ExDoc. It consumes compiler chunks directly because the older EDoc\nsource-extraction path rejects native-record attributes.\n\n## Read by task\n\n| Task | API modules |\n| --- | --- |\n| Open, inspect and close an endpoint | `m:tmux_server` |\n| Preserve work and cleanup failures | `m:tmux_scope`, `tmux_server:with_owned/2`, `tmux_server:with_server/2` |\n| Create and act on terminal objects | `m:tmux_session`, `m:tmux_window`, `m:tmux_pane` |\n| Switch one explicitly named attached client | `tmux_session:select/2`, `tmux_session:select/3` |\n| Break, join, move and swap running panes | `tmux_pane:break/4`, `tmux_pane:join/3`, `tmux_pane:move/3`, `tmux_pane:swap/3` |\n| Act on session-relative window memberships | `m:tmux_window_link` |\n| Read local or inherited options and change explicit tables | `m:tmux_option` |\n| Register, inspect and explicitly run native hooks | `m:tmux_hook` |\n| Register and remove keys in explicit server tables | `m:tmux_key` |\n| Inspect native command declarations and feature minimums | `m:tmux_capability` |\n| Store byte buffers and paste into a pane | `m:tmux_buffer` |\n| Read a captured graph | `m:tmux_snapshot`, `m:tmux_model` |\n| Filter captured data | `m:tmux_select`, `m:tmux_filter`, `m:tmux_matcher` |\n| Plan source retrieval | `m:tmux_query` |\n| Submit, await and cancel work | `m:tmux_operation`, `m:tmux_command` |\n| Render/load configuration and build channel waits or signals | `tmux_command:to_config/1`, `tmux_command:source_file/2`, `tmux_command:wait_for/2` |\n| Connect a shell consumer to live pane bytes | `tmux_pane:pipe/3`, `tmux_pane:stop_pipe/1` |\n| Inspect schema and wire validation | `m:tmux_schema`, `m:tmux_json`, `m:tmux_version` |\n| Explain local library exceptions in the shell | `m:tmux_error` |\n| Inspect observed process identities | `m:tmux_identity` |\n\nThe [field reference](fields.md) is generated from the same registry and\noperator validator used by filtering. [Contributor checks](../.github/CONTRIBUTING.md)\nexecute native shell examples and complete programs; compilation alone is\nnot the example gate.\n\n## Types at application boundaries\n\nEntity constructors accept generated maps such as\n`t:tmux_model:pane_input/0`. Required fields and scalar categories are visible\nto Dialyzer. Optional observations retain `not_loaded` and `unavailable`;\nnullable fields also accept `none`. Numeric fields accept integral floats,\nwhich normalize to integers. Runtime validation checks bounds, ID syntax,\nUTF-8 and derived values. Use `tmux_model:new/2` when validating dynamic maps\nand handle its `t:tmux_schema:error_detail/0` result.\n\n`t:tmux_select:t/1` describes the intended row type. Dialyzer in OTP 29.1.2\ndoes not always substitute actual argument types into generic return\nvariables. For example, a selection passed through `tmux_select:one/1` can\nlose its specific entity type during analysis. A successful analysis does\nnot prove every pane/window relationship. Keep native patterns and runtime\naction validation at those boundaries. The\n[OTP contract solver](https://github.com/erlang/otp/blob/OTP-29.1.2/lib/dialyzer/src/dialyzer_contracts.erl#L477-L502)\nrecords this generic constraint limitation.\n\nThe installed-consumer outer check executes valid constructor calls and\nrequires Dialyzer to reject wrong Boolean/numeric fields and missing session\nidentity or window-link index. It analyzes the installed core outside the\numbrella; a green library analysis alone does not establish those diagnostics.\n" + "content": "# Build and browse the native API\n\nContracts live in Erlang `-moduledoc`, `-doc` and specs. ExDoc renders them\nfrom the compiler's EEP-48 chunks as searchable module, function and type\npages.\n\n- Source links open captured files with line anchors and content digests.\n- An unchanged file also links to its exact Git commit. A changed file is\n labelled a working-tree preview.\n\nCompile the project:\n\n```console\n$ mise exec -- rebar3 compile\n```\n\nPrepare the checksum-pinned ExDoc tool. This step uses the network:\n\n```console\n$ python3 tools/build_docs.py --prepare\n```\n\nBuild the browser without fetching dependencies:\n\n```console\n$ mise exec -- python3 tools/build_docs.py\n```\n\nOpen `_build/docs/core/index.html`.\n\n- This is a local build, not a published HexDocs page.\n- The build refreshes compiled modules first, and warnings fail it.\n- It uses the OTP 29 build of ExDoc. It reads compiler chunks directly because\n the older EDoc source path rejects native-record attributes.\n\n## Read by task\n\n| Task | API modules |\n| --- | --- |\n| Open, inspect and close an endpoint | `m:tmux_server` |\n| Preserve work and cleanup failures | `m:tmux_scope`, `tmux_server:with_owned/2`, `tmux_server:with_server/2` |\n| Create and act on terminal objects | `m:tmux_session`, `m:tmux_window`, `m:tmux_pane` |\n| Switch one explicitly named attached client | `tmux_session:select/2`, `tmux_session:select/3` |\n| Break, join, move and swap running panes | `tmux_pane:break/4`, `tmux_pane:join/3`, `tmux_pane:move/3`, `tmux_pane:swap/3` |\n| Act on session-relative window memberships | `m:tmux_window_link` |\n| Read local or inherited options and change explicit tables | `m:tmux_option` |\n| Register, inspect and explicitly run native hooks | `m:tmux_hook` |\n| Register and remove keys in explicit server tables | `m:tmux_key` |\n| Inspect native command declarations and feature minimums | `m:tmux_capability` |\n| Store byte buffers and paste into a pane | `m:tmux_buffer` |\n| Read a captured graph | `m:tmux_snapshot`, `m:tmux_model` |\n| Filter captured data | `m:tmux_select`, `m:tmux_filter`, `m:tmux_matcher` |\n| Plan source retrieval | `m:tmux_query` |\n| Submit, await and cancel work | `m:tmux_operation`, `m:tmux_command` |\n| Render/load configuration and build channel waits or signals | `tmux_command:to_config/1`, `tmux_command:source_file/2`, `tmux_command:wait_for/2` |\n| Connect a shell consumer to live pane bytes | `tmux_pane:pipe/3`, `tmux_pane:stop_pipe/1` |\n| Inspect schema and wire validation | `m:tmux_schema`, `m:tmux_json`, `m:tmux_version` |\n| Explain local library exceptions in the shell | `m:tmux_error` |\n| Inspect observed process identities | `m:tmux_identity` |\n\n- The [field reference](fields.md) is generated from the registry and operator\n validator that filtering uses.\n- [Contributor checks](../.github/CONTRIBUTING.md) run the native shell\n examples and the complete programs. Compiling is not the example gate.\n\n## Types at application boundaries\n\n- Entity constructors take generated maps such as `t:tmux_model:pane_input/0`.\n Dialyzer sees the required fields and scalar categories.\n- Optional observations keep `not_loaded` and `unavailable`. Nullable fields\n also accept `none`.\n- Numeric fields accept integral floats, which normalize to integers.\n- Runtime validation checks bounds, ID syntax, UTF-8 and derived values. Use\n `tmux_model:new/2` for dynamic maps and handle its\n `t:tmux_schema:error_detail/0` result.\n- `t:tmux_select:t/1` describes the intended row type. Dialyzer in OTP 29 does\n not always substitute actual argument types into generic return variables. A\n selection passed through `tmux_select:one/1` can lose its entity type.\n- A clean analysis does not prove every pane and window relationship. Keep\n native patterns and runtime action validation at those boundaries.\n- The\n [OTP contract solver](https://github.com/erlang/otp/blob/OTP-29.1.2/lib/dialyzer/src/dialyzer_contracts.erl#L477-L502)\n records this generic constraint limitation.\n" }, { "path": "docs/project-policy.md", diff --git a/site/src/data/tmux-usage/erlang.json b/site/src/data/tmux-usage/erlang.json index d6e9cbbf3..57c9c1dc2 100644 --- a/site/src/data/tmux-usage/erlang.json +++ b/site/src/data/tmux-usage/erlang.json @@ -94,7 +94,7 @@ ], "port": "erlang", "repo": "libtmux/libtmux-erlang", - "revision": "539c7297ceae65a1cf683e0836eae0a1ccd34d64", + "revision": "33fd7fe985454e375d5ac8533043cabf4a0b2fa5", "schemaVersion": 1, "symbols": { "tmux_buffer:delete/2": [ @@ -563,7 +563,7 @@ "apps/libtmux_erlang/src/tmux_observe.erl:21", "apps/libtmux_erlang/src/tmux_observe.erl:120", "apps/libtmux_erlang/src/tmux_observe.erl:121", - "apps/libtmux_erlang/src/tmux_server.erl:297" + "apps/libtmux_erlang/src/tmux_server.erl:413" ], "reviewed": true, "scope": "server", @@ -577,7 +577,7 @@ "apps/libtmux_erlang/src/tmux_observe.erl:43", "apps/libtmux_erlang/src/tmux_observe.erl:21", "apps/libtmux_erlang/src/tmux_observe.erl:112", - "apps/libtmux_erlang/src/tmux_server.erl:297" + "apps/libtmux_erlang/src/tmux_server.erl:413" ], "reviewed": true, "scope": null @@ -591,7 +591,7 @@ "apps/libtmux_erlang/src/tmux_observe.erl:21", "apps/libtmux_erlang/src/tmux_observe.erl:115", "apps/libtmux_erlang/src/tmux_observe.erl:116", - "apps/libtmux_erlang/src/tmux_server.erl:297" + "apps/libtmux_erlang/src/tmux_server.erl:413" ], "reviewed": true, "scope": "server", @@ -608,7 +608,7 @@ "apps/libtmux_erlang/src/tmux_observe.erl:21", "apps/libtmux_erlang/src/tmux_observe.erl:120", "apps/libtmux_erlang/src/tmux_observe.erl:121", - "apps/libtmux_erlang/src/tmux_server.erl:325" + "apps/libtmux_erlang/src/tmux_server.erl:441" ], "reviewed": true, "scope": "server", @@ -622,7 +622,7 @@ "apps/libtmux_erlang/src/tmux_observe.erl:43", "apps/libtmux_erlang/src/tmux_observe.erl:21", "apps/libtmux_erlang/src/tmux_observe.erl:112", - "apps/libtmux_erlang/src/tmux_server.erl:325" + "apps/libtmux_erlang/src/tmux_server.erl:441" ], "reviewed": true, "scope": null @@ -636,7 +636,7 @@ "apps/libtmux_erlang/src/tmux_observe.erl:21", "apps/libtmux_erlang/src/tmux_observe.erl:115", "apps/libtmux_erlang/src/tmux_observe.erl:116", - "apps/libtmux_erlang/src/tmux_server.erl:325" + "apps/libtmux_erlang/src/tmux_server.erl:441" ], "reviewed": true, "scope": "server", @@ -649,7 +649,7 @@ "evidence": [ "apps/libtmux_erlang/src/tmux_owned_server.erl:200", "apps/libtmux_erlang/src/tmux_owned_server.erl:197", - "apps/libtmux_erlang/src/tmux_server.erl:142" + "apps/libtmux_erlang/src/tmux_server.erl:258" ], "reviewed": true, "scope": null diff --git a/site/test/port-examples-index.test.ts b/site/test/port-examples-index.test.ts index ffa614201..9fbf1b057 100644 --- a/site/test/port-examples-index.test.ts +++ b/site/test/port-examples-index.test.ts @@ -11,7 +11,7 @@ const page = (path: string) => readFileSync(new URL(`../src/content/docs/ports/$ // Each index lists every program its port's tests run and links the source at // the revision of the API model, so a moved pin fails here until the links follow. const INDEXES = [ - { path: 'erlang/examples/index.md', repo: 'libtmux-erlang', revision: erlangModel.revision, programs: 15 }, + { path: 'erlang/examples/index.md', repo: 'libtmux-erlang', revision: erlangModel.revision, programs: 18 }, { path: 'lisp/examples/index.md', repo: 'libtmux-lisp', revision: lispModel.revision, programs: 6 + 4 }, { path: 'clojure/examples.md', repo: 'libtmux-java', revision: clojureModel.revision, programs: 13 }, { path: 'haskell/examples/index.md', repo: 'libtmux-haskell', revision: haskellModel.revision, programs: 6 }, From 8dae3039471e25c7db2a4f024aa4ac4f409498ce Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 10:45:48 -0600 Subject: [PATCH 07/13] ocaml(chore[pin]) Pin OCaml to the Client capability directory why: The OCaml reference page cannot show the "What is on here" capability directory until the model carries the prose it is built from. libtmux-ocaml PR #10 adds that directory to the Client module docs, and the committed model, guide cache and manifest still described the pre-PR master 205dfda49. The pin is the PR head, which merges into master with a merge commit, so the revision stays reachable after the merge. what: - Pin OCaml to libtmux/libtmux-ocaml@ca4b6c0cb and regenerate its model and path data (exported with OCaml 5.5.2 and odoc-parser 3.2.2, the toolchain recorded in the previous model), tmux usage, guide cache and manifest packages with the repository's generators; the mention index is unchanged - Adopt the source change between the pins: the Libtmux_unix.Client module doc gains the capability directory, and the examples moved their docs:begin markers so the code attached to fifteen other symbols, such as Client.capture, Window.panes and Workspace.client, is now the marked region of the program - Re-anchor the unix/streaming.ml evidence lines of the reviewed usage entries to their new positions; no claim or rule changed - Take the rewritten reader guides into the guide cache: getting started, bootstrap, graph, queries, control, streaming, showcases, packages, compatibility, status and workspaces - Refresh the example sources cached at the model revision: the send-keys showcase now splits a pane, captures its screen and resizes it, and the graph showcase, whose excerpts feed the landing page, moved its marked region and module aliases without changing the excerpted lines - Describe the send-keys showcase accordingly, add the two programs the repository gained, query_plan.ml and workspace_plan.ml, to the examples index, link all twenty-two at the new revision, and expect twenty-two in the index test - Leave the Core player recording at the revision where it was recorded: re-recording the showcase is a separate step Source refs: libtmux/libtmux-ocaml PR #10 head ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9, previous pin 205dfda49742592b479247049d186956e4a4cfe9. --- .../docs/ports/ocaml/examples/index.md | 44 ++++++++++--------- site/src/data/api/ocaml.json | 2 +- site/src/data/api/ocaml.paths.json | 2 +- site/src/data/example-sources.json | 36 +++++++-------- site/src/data/manifest-packages.json | 14 +++--- site/src/data/port-guides/ocaml.json | 24 +++++----- site/src/data/tmux-usage/ocaml.json | 10 ++--- site/test/port-examples-index.test.ts | 2 +- 8 files changed, 68 insertions(+), 66 deletions(-) diff --git a/site/src/content/docs/ports/ocaml/examples/index.md b/site/src/content/docs/ports/ocaml/examples/index.md index ba1deedee..5453e2e45 100644 --- a/site/src/content/docs/ports/ocaml/examples/index.md +++ b/site/src/content/docs/ports/ocaml/examples/index.md @@ -19,7 +19,7 @@ cards: --- Start with the [graph program](../guides/getting-started/), then run the -[capability showcases](../guides/showcases/). The repository ships 20 programs +[capability showcases](../guides/showcases/). The repository ships 22 programs under `examples/`. Each is a complete program that uses public packages and documents its inputs and ownership of tmux resources; CI runs the showcase programs on the oldest and newest supported tmux. Run one from a source @@ -30,43 +30,45 @@ checkout, for example | Program | What it demonstrates | Guide | | --- | --- | --- | -| [native_capture.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/native_capture.ml) | Connect with Eio, capture the server and close the client. | [Getting started](../guides/getting-started/) | -| [native_graph.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/native_graph.ml) | Capture a private server, close the client, then traverse sessions, shared windows and panes. | [Object graph](../guides/graph/) | -| [showcase_bootstrap.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_bootstrap.ml) | Start a private server and capture its first session. | [Native bootstrap](../guides/bootstrap/) | -| [showcase_graph.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_graph.ml) | Navigate sessions, shared windows and panes after the client and daemon close. | [Capability showcases](../guides/showcases/) | +| [native_capture.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/native_capture.ml) | Connect with Eio, capture the server and close the client. | [Getting started](../guides/getting-started/) | +| [native_graph.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/native_graph.ml) | Capture a private server, close the client, then traverse sessions, shared windows and panes. | [Object graph](../guides/graph/) | +| [showcase_bootstrap.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_bootstrap.ml) | Start a private server and capture its first session. | [Native bootstrap](../guides/bootstrap/) | +| [showcase_graph.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_graph.ml) | Navigate sessions, shared windows and panes after the client and daemon close. | [Capability showcases](../guides/showcases/) | ## Query a snapshot | Program | What it demonstrates | Guide | | --- | --- | --- | -| [native_query.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/native_query.ml) | Filter a snapshot with ordinary functions, then with typed expressions. | [Queries](../guides/queries/) | -| [query_description.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/query_description.ml) | Describe a typed query and report an ambiguous match without touching tmux. | [Queries](../guides/queries/) | -| [query_json.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/query_json.ml) | Decode and encode a scalar query as JSON. | [Wire subset](../guides/query-interchange/) | +| [native_query.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/native_query.ml) | Filter a snapshot with ordinary functions, then with typed expressions. | [Queries](../guides/queries/) | +| [query_description.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/query_description.ml) | Describe a typed query and report an ambiguous match without touching tmux. | [Queries](../guides/queries/) | +| [query_plan.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/query_plan.ml) | Split a filter into the part tmux runs and the part that stays local, and reject a plan that is not exact. | [Queries](../guides/queries/) | +| [query_json.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/query_json.ml) | Decode and encode a scalar query as JSON. | [Wire subset](../guides/query-interchange/) | ## Change tmux | Program | What it demonstrates | Guide | | --- | --- | --- | -| [native_build.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/native_build.ml) | Create an `editor` window with two panes and a `logs` window, set a working directory, environment value, option and pane title. | [Control and recovery](../guides/control/) | -| [showcase_create_window.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_create_window.ml) | Create a window and recapture its name. | [Capability showcases](../guides/showcases/) | -| [showcase_rename_window.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_rename_window.ml) | Rename a window and keep the earlier observation. | [Capability showcases](../guides/showcases/) | -| [showcase_move_window.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_move_window.ml) | Move a window to an index in another session. | [Capability showcases](../guides/showcases/) | -| [showcase_layout.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_layout.ml) | Split a window and apply an even horizontal layout. | [Capability showcases](../guides/showcases/) | -| [showcase_send_keys.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_send_keys.ml) | Send literal input containing shell and tmux format characters. | [Capability showcases](../guides/showcases/) | +| [native_build.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/native_build.ml) | Create an `editor` window with two panes and a `logs` window, set a working directory, environment value, option and pane title. | [Control and recovery](../guides/control/) | +| [workspace_plan.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/workspace_plan.ml) | Build a workspace configuration and plan its windows and actions without starting tmux. | [Workspaces](../workspace/source-guide/) | +| [showcase_create_window.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_create_window.ml) | Create a window and recapture its name. | [Capability showcases](../guides/showcases/) | +| [showcase_rename_window.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_rename_window.ml) | Rename a window and keep the earlier observation. | [Capability showcases](../guides/showcases/) | +| [showcase_move_window.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_move_window.ml) | Move a window to an index in another session. | [Capability showcases](../guides/showcases/) | +| [showcase_layout.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_layout.ml) | Split a window and apply an even horizontal layout. | [Capability showcases](../guides/showcases/) | +| [showcase_send_keys.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_send_keys.ml) | Split a pane, send literal input containing shell and tmux format characters, capture its screen and resize the window and pane. | [Capability showcases](../guides/showcases/) | ## Observe output | Program | What it demonstrates | Guide | | --- | --- | --- | -| [native_watch.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/native_watch.ml) | Subscribe, send literal text, await future bytes and check the rendered screen under an Eio switch. | [Streaming](../guides/streaming/) | -| [native_wait.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/native_wait.ml) | Wait for text already on one pane's screen. | [Streaming](../guides/streaming/) | -| [native_stream_recovery.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/native_stream_recovery.ml) | Recapture and resubscribe after a stream gap. | [Streaming](../guides/streaming/) | -| [showcase_watch.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_watch.ml) | Observe future output with an application-owned Eio switch. | [Capability showcases](../guides/showcases/) | +| [native_watch.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/native_watch.ml) | Subscribe, send literal text, await future bytes and check the rendered screen under an Eio switch. | [Streaming](../guides/streaming/) | +| [native_wait.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/native_wait.ml) | Wait for text already on one pane's screen. | [Streaming](../guides/streaming/) | +| [native_stream_recovery.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/native_stream_recovery.ml) | Recapture and resubscribe after a stream gap. | [Streaming](../guides/streaming/) | +| [showcase_watch.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_watch.ml) | Observe future output with an application-owned Eio switch. | [Capability showcases](../guides/showcases/) | ## Recover from partial failure | Program | What it demonstrates | Guide | | --- | --- | --- | -| [native_recovery.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/native_recovery.ml) | Cancel a waiter and inspect the retained operation outcome. | [Recovery](../guides/recovery/) | -| [native_hook_recovery.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/native_hook_recovery.ml) | Retain a creation whose `after-new-window` hook fails and print the reported IDs. | Source only | -| [native_workspace_recovery.ml](https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/native_workspace_recovery.ml) | Interrupt a native workspace apply and inspect its retained journal. | [Interrupted workspace](../workspace/recovery/) | +| [native_recovery.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/native_recovery.ml) | Cancel a waiter and inspect the retained operation outcome. | [Recovery](../guides/recovery/) | +| [native_hook_recovery.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/native_hook_recovery.ml) | Retain a creation whose `after-new-window` hook fails and print the reported IDs. | Source only | +| [native_workspace_recovery.ml](https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/native_workspace_recovery.ml) | Interrupt a native workspace apply and inspect its retained journal. | [Interrupted workspace](../workspace/recovery/) | diff --git a/site/src/data/api/ocaml.json b/site/src/data/api/ocaml.json index dad88e206..f9272041a 100644 --- a/site/src/data/api/ocaml.json +++ b/site/src/data/api/ocaml.json @@ -1 +1 @@ -{"port":"ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","repo":"libtmux/libtmux-ocaml","sources":[{"product":"core","package":"libtmux","repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},{"product":"workspace","package":"libtmux-workspace","repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},{"product":"core","package":"libtmux-json","repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},{"product":"workspace","package":"libtmux-json","repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},{"product":"core","package":"libtmux-unix","repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},{"product":"workspace","package":"libtmux-unix","repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},{"product":"core","package":"libtmux-eio","repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},{"product":"workspace","package":"libtmux-eio","repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"}],"extractor":"OCaml 5.5.2 compiler-libs .cmti + odoc-parser 3.2.2","nativeProvenance":{"files":[{"path":"lib/libtmux.mli","sha256":"cde6d0a89aeb60e3bffe3df003ffba1115d3a0c1318c6361a874202580797bfb"},{"path":"_build/install/default/lib/libtmux/libtmux.cmti","sha256":"296786db1d801c4a2ed7071b942a9c785f120474a9479aafda0837e8fcb00c18"},{"path":"workspace/libtmux_workspace.mli","sha256":"7f828d52abc58665510de7cf87bc03479d85feaaca5f00e678fda58f47713a4d"},{"path":"_build/install/default/lib/libtmux-workspace/libtmux_workspace.cmti","sha256":"5a55a369dde40b8a1261089043218e0bbb245f5ea09088365b7fc3dd91b82b7f"},{"path":"json/libtmux_json.mli","sha256":"0df1e135b74307a8ef363bcd484e499c463172f6a0451a8ebbd511ec8adb57bc"},{"path":"_build/install/default/lib/libtmux-json/libtmux_json.cmti","sha256":"1a065de46eb27da42755e3bef53c4de6ca30fcdd587556a0daef9bf6a6afbd6d"},{"path":"unix/libtmux_unix.mli","sha256":"943d038c8dce5917a7f7b773c9f3becd544527cff1f46464c81c81eccc5fab6f"},{"path":"_build/install/default/lib/libtmux-unix/libtmux_unix.cmti","sha256":"4c0f71b6b9d34666cc1cc4a5a14fd7306bb9b32a157791541b2296f97ae66dd7"},{"path":"eio/libtmux_eio.mli","sha256":"44f6a1a158b30676be1e32194881ed682bc6d8ff8517d3010a68ff66028bb3bb"},{"path":"_build/install/default/lib/libtmux-eio/libtmux_eio.cmti","sha256":"80d4774c12370eb7ba7c3a4e1d680ab7df38b6077287dabba05f3ac305cb01c9"}],"exporter":{"revision":"3fbf0a0533e9f170351a50b71bd23042c141ca99","baseRevision":"3fbf0a0533e9f170351a50b71bd23042c141ca99","files":[{"path":"tools/api_export.ml","sha256":"34b59e728494aeed3595c5a88e1a1482d7dfa65ddcda725e43cd6c21ee131945"},{"path":"tools/api_doc.ml","sha256":"94d9b4dff3f86d570a31161019e06cea250926200b8cc4562f7d14f9f3cd0d59"},{"path":"tools/export_api.py","sha256":"5188348adc7e3ea577889e144de30da6204ec14ec6fc1577f86a732bc7625973"},{"path":"tools/api_modules.json","sha256":"233ef409440fa5015f522a11933e74f059a301aecbce5ab5126f14e8a35614cf"},{"path":"tools/dune","sha256":"777e122d729870f9f8dc6fc13485ce0eea29f0e741b9bb22cb0245d433ff9442"}],"compiler":"5.5.2","schema":"libtmux.ocaml-api/1","publicManifest":"tools/api_modules.json"}},"symbols":[{"id":"Libtmux","publicId":"Libtmux","qualifiedName":"Libtmux","name":"Libtmux","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Native captured values, typed queries and explicit command descriptions.\n\n A {!Snapshot.t} owns immutable observations. Entity accessors and query\n evaluation perform no I/O, preserve captured order and remain usable after\n client closure. Use [Libtmux_unix.Client] or [Libtmux_eio.Client] to acquire\n or mutate state.\n\n Retaining any entity retains its complete snapshot graph. Copy scalar\n summaries when captured relationships are no longer needed. Targets omit the\n graph but remain restricted to their original {!Source.t}.\n\n {1 Typical flow}\n\n Capture explicitly, traverse {!Session.window_links} and {!Window.panes},\n filter with [Seq.filter] or {!Query.matching}, establish cardinality with\n {!Query.exactly_one}, then submit a command with a bound target.\n\n The core depends only on the standard library. Its abstract observations are\n safe to share; live clients and subscriptions belong to their backend.\n\n See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/graph.md}graph\n guide} for window links and the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/queries.md}query\n guide} for native predicates and typed expressions. "],"declarations":[{"kind":"module","text":"","source":{"file":"lib/libtmux.mli","line":1,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"doc":{"summary":"Native captured values, typed queries and explicit command descriptions.","body":"A {!Snapshot.t} owns immutable observations. Entity accessors and query evaluation perform no I/O, preserve captured order and remain usable after client closure. Use `Libtmux_unix.Client` or `Libtmux_eio.Client` to acquire or mutate state.\n\nRetaining any entity retains its complete snapshot graph. Copy scalar summaries when captured relationships are no longer needed. Targets omit the graph but remain restricted to their original {!Source.t}.\n\n## Typical flow\n\nCapture explicitly, traverse {!Session.window_links} and {!Window.panes}, filter with `Seq.filter` or {!Query.matching}, establish cardinality with {!Query.exactly_one}, then submit a command with a bound target.\n\nThe core depends only on the standard library. Its abstract observations are safe to share; live clients and subscriptions belong to their backend.\n\nSee the [graph guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/graph.md) for window links and the [query guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/queries.md) for native predicates and typed expressions."},"slug":"libtmux"},{"id":"Libtmux.Captured_text","publicId":"Libtmux.Captured_text","qualifiedName":"Libtmux.Captured_text","name":"Captured_text","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":712,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Captured_text : sig\n type t = {\n bytes : string;\n source : Source.t;\n pane : Pane.Id.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }\n (** Ordinary rendered rows captured over an interval. This value has no\n implied relationship to a subscription cursor. *)\nend","source":{"file":"lib/libtmux.mli","line":712,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","slug":"libtmux-captured_text"},{"id":"Libtmux.Captured_text.t","publicId":"Libtmux.Captured_text.t","qualifiedName":"Libtmux.Captured_text.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":713,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Ordinary rendered rows captured over an interval. This value has no\n implied relationship to a subscription cursor. "],"declarations":[{"kind":"struct","text":"type t = {\n bytes : string;\n source : Source.t;\n pane : Pane.Id.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }","source":{"file":"lib/libtmux.mli","line":713,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Captured_text","doc":{"summary":"Ordinary rendered rows captured over an interval. This value has no implied relationship to a subscription cursor."},"signatures":[{"raw":"type t =\n {\n bytes: string ;\n source: Source.t ;\n pane: Pane.Id.t ;\n started_at_ns: int64 ;\n finished_at_ns: int64 }","params":[]}],"slug":"libtmux-captured_text-t"},{"id":"Libtmux.Captured_text.t.bytes","publicId":"Libtmux.Captured_text.t.bytes","name":"bytes","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":714,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"bytes : string;","source":{"file":"lib/libtmux.mli","line":714,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Captured_text.t","type":"string","qualifiedName":"Libtmux.Captured_text.bytes","slug":"libtmux-captured_text-t-bytes"},{"id":"Libtmux.Captured_text.t.finished_at_ns","publicId":"Libtmux.Captured_text.t.finished_at_ns","name":"finished_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":718,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"finished_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":718,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Captured_text.t","type":"int64","qualifiedName":"Libtmux.Captured_text.finished_at_ns","slug":"libtmux-captured_text-t-finished_at_ns"},{"id":"Libtmux.Captured_text.t.pane","publicId":"Libtmux.Captured_text.t.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":716,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.Id.t;","source":{"file":"lib/libtmux.mli","line":716,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Captured_text.t","type":"Pane.Id.t","qualifiedName":"Libtmux.Captured_text.pane","slug":"libtmux-captured_text-t-pane"},{"id":"Libtmux.Captured_text.t.source","publicId":"Libtmux.Captured_text.t.source","name":"source","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":715,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"source : Source.t;","source":{"file":"lib/libtmux.mli","line":715,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Captured_text.t","type":"Source.t","qualifiedName":"Libtmux.Captured_text.source","slug":"libtmux-captured_text-t-source"},{"id":"Libtmux.Captured_text.t.started_at_ns","publicId":"Libtmux.Captured_text.t.started_at_ns","name":"started_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":717,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"started_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":717,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Captured_text.t","type":"int64","qualifiedName":"Libtmux.Captured_text.started_at_ns","slug":"libtmux-captured_text-t-started_at_ns"},{"id":"Libtmux.Cardinality","publicId":"Libtmux.Cardinality","qualifiedName":"Libtmux.Cardinality","name":"Cardinality","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":685,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Cardinality : sig\n type error = No_match | Multiple_matches of { at_least : int }\n\n val pp_error : Format.formatter -> error -> unit\nend","source":{"file":"lib/libtmux.mli","line":685,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","slug":"libtmux-cardinality"},{"id":"Libtmux.Cardinality.error","publicId":"Libtmux.Cardinality.error","qualifiedName":"Libtmux.Cardinality.error","name":"error","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":686,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type error = No_match | Multiple_matches of { at_least : int }","source":{"file":"lib/libtmux.mli","line":686,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Cardinality","signatures":[{"raw":"type error =\n | No_match \n | Multiple_matches of {\n at_least: int } ","params":[]}],"slug":"libtmux-cardinality-error"},{"id":"Libtmux.Cardinality.error.Multiple_matches","publicId":"Libtmux.Cardinality.error.Multiple_matches","name":"Multiple_matches","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":686,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Multiple_matches of { at_least : int }","source":{"file":"lib/libtmux.mli","line":686,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Cardinality.error","variant":"struct","qualifiedName":"Libtmux.Cardinality.Multiple_matches","slug":"libtmux-cardinality-error-multiple_matches"},{"id":"Libtmux.Cardinality.error.Multiple_matches.at_least","publicId":"Libtmux.Cardinality.error.Multiple_matches.at_least","name":"at_least","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":686,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"at_least : int","source":{"file":"lib/libtmux.mli","line":686,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Cardinality.error.Multiple_matches","type":"int","qualifiedName":"Libtmux.Cardinality.at_least","slug":"libtmux-cardinality-error-multiple_matches-at_least"},{"id":"Libtmux.Cardinality.error.No_match","publicId":"Libtmux.Cardinality.error.No_match","name":"No_match","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":686,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"No_match","source":{"file":"lib/libtmux.mli","line":686,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Cardinality.error","variant":"unit","qualifiedName":"Libtmux.Cardinality.No_match","slug":"libtmux-cardinality-error-no_match"},{"id":"Libtmux.Cardinality.pp_error","publicId":"Libtmux.Cardinality.pp_error","qualifiedName":"Libtmux.Cardinality.pp_error","name":"pp_error","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":688,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp_error : Format.formatter -> error -> unit","source":{"file":"lib/libtmux.mli","line":688,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Cardinality","signatures":[{"raw":"val pp_error : Format.formatter -> error -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"error"}],"returns":"unit"}],"slug":"libtmux-cardinality-pp_error"},{"id":"Libtmux.Client_name","publicId":"Libtmux.Client_name","qualifiedName":"Libtmux.Client_name","name":"Client_name","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Client_name : sig\n type t\n (** A name in one connection generation, with current-name semantics. It does\n not identify a stable client incarnation; tmux may reuse client names. *)\n\n val source : t -> Source.t\n val to_string : t -> string\nend","source":{"file":"lib/libtmux.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","slug":"libtmux-client_name"},{"id":"Libtmux.Client_name.source","publicId":"Libtmux.Client_name.source","qualifiedName":"Libtmux.Client_name.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":124,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":124,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_name","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-client_name-source"},{"id":"Libtmux.Client_name.t","publicId":"Libtmux.Client_name.t","qualifiedName":"Libtmux.Client_name.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":120,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" A name in one connection generation, with current-name semantics. It does\n not identify a stable client incarnation; tmux may reuse client names. "],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":120,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_name","doc":{"summary":"A name in one connection generation, with current-name semantics. It does not identify a stable client incarnation; tmux may reuse client names."},"signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-client_name-t"},{"id":"Libtmux.Client_name.to_string","publicId":"Libtmux.Client_name.to_string","qualifiedName":"Libtmux.Client_name.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":125,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":125,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_name","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-client_name-to_string"},{"id":"Libtmux.Client_observation","publicId":"Libtmux.Client_observation","qualifiedName":"Libtmux.Client_observation","name":"Client_observation","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":365,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"and Client_observation : sig\n type t\n\n module Fields : sig\n val name : (t, string) Field.t\n val pid : (t, int) Field.t\n val width : (t, int) Field.t\n val control_mode : (t, bool) Field.t\n end\n\n module Relations : sig\n val session : (t, Session.t) Relation.Optional.t\n end\n\n val name : t -> string\n val pid : t -> int\n val width : t -> int\n\n val height : t -> int option\n (** No height is reported until the client has a started terminal. *)\n\n val control_mode : t -> bool\n val source : t -> Source.t\n\n val current_name : t -> Client_name.t\n (** Address whichever client has this name when a command executes. *)\n\n val session : t -> Session.t option\n (** [None] means the captured client has no attached session. *)\n\n val same_observation : t -> t -> bool\n (** Client names may be reused. No cross-snapshot entity equality is offered.\n *)\nend","source":{"file":"lib/libtmux.mli","line":365,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","slug":"libtmux-client_observation"},{"id":"Libtmux.Client_observation.Fields","publicId":"Libtmux.Client_observation.Fields","qualifiedName":"Libtmux.Client_observation.Fields","name":"Fields","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":368,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Fields : sig\n val name : (t, string) Field.t\n val pid : (t, int) Field.t\n val width : (t, int) Field.t\n val control_mode : (t, bool) Field.t\n end","source":{"file":"lib/libtmux.mli","line":368,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","slug":"libtmux-client_observation-fields"},{"id":"Libtmux.Client_observation.Fields.control_mode","publicId":"Libtmux.Client_observation.Fields.control_mode","qualifiedName":"Libtmux.Client_observation.Fields.control_mode","name":"control_mode","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":372,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val control_mode : (t, bool) Field.t","source":{"file":"lib/libtmux.mli","line":372,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation.Fields","signatures":[{"raw":"val control_mode : (t, bool) Field.t","params":[],"returns":"(t, bool) Field.t"}],"slug":"libtmux-client_observation-fields-control_mode"},{"id":"Libtmux.Client_observation.Fields.name","publicId":"Libtmux.Client_observation.Fields.name","qualifiedName":"Libtmux.Client_observation.Fields.name","name":"name","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":369,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val name : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":369,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation.Fields","signatures":[{"raw":"val name : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-client_observation-fields-name"},{"id":"Libtmux.Client_observation.Fields.pid","publicId":"Libtmux.Client_observation.Fields.pid","qualifiedName":"Libtmux.Client_observation.Fields.pid","name":"pid","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":370,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val pid : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":370,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation.Fields","signatures":[{"raw":"val pid : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-client_observation-fields-pid"},{"id":"Libtmux.Client_observation.Fields.width","publicId":"Libtmux.Client_observation.Fields.width","qualifiedName":"Libtmux.Client_observation.Fields.width","name":"width","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":371,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val width : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":371,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation.Fields","signatures":[{"raw":"val width : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-client_observation-fields-width"},{"id":"Libtmux.Client_observation.Relations","publicId":"Libtmux.Client_observation.Relations","qualifiedName":"Libtmux.Client_observation.Relations","name":"Relations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":375,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Relations : sig\n val session : (t, Session.t) Relation.Optional.t\n end","source":{"file":"lib/libtmux.mli","line":375,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","slug":"libtmux-client_observation-relations"},{"id":"Libtmux.Client_observation.Relations.session","publicId":"Libtmux.Client_observation.Relations.session","qualifiedName":"Libtmux.Client_observation.Relations.session","name":"session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":376,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val session : (t, Session.t) Relation.Optional.t","source":{"file":"lib/libtmux.mli","line":376,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation.Relations","signatures":[{"raw":"val session : (t, Session.t) Relation.Optional.t","params":[],"returns":"(t, Session.t) Relation.Optional.t"}],"slug":"libtmux-client_observation-relations-session"},{"id":"Libtmux.Client_observation.control_mode","publicId":"Libtmux.Client_observation.control_mode","qualifiedName":"Libtmux.Client_observation.control_mode","name":"control_mode","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":386,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val control_mode : t -> bool","source":{"file":"lib/libtmux.mli","line":386,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"val control_mode : t -> bool","params":[{"name":"arg1","type":"t"}],"returns":"bool"}],"slug":"libtmux-client_observation-control_mode"},{"id":"Libtmux.Client_observation.current_name","publicId":"Libtmux.Client_observation.current_name","qualifiedName":"Libtmux.Client_observation.current_name","name":"current_name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":389,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Address whichever client has this name when a command executes. "],"declarations":[{"kind":"function","text":"val current_name : t -> Client_name.t","source":{"file":"lib/libtmux.mli","line":389,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","doc":{"summary":"Address whichever client has this name when a command executes."},"signatures":[{"raw":"val current_name : t -> Client_name.t","params":[{"name":"arg1","type":"t"}],"returns":"Client_name.t"}],"slug":"libtmux-client_observation-current_name"},{"id":"Libtmux.Client_observation.height","publicId":"Libtmux.Client_observation.height","qualifiedName":"Libtmux.Client_observation.height","name":"height","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":383,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" No height is reported until the client has a started terminal. "],"declarations":[{"kind":"function","text":"val height : t -> int option","source":{"file":"lib/libtmux.mli","line":383,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","doc":{"summary":"No height is reported until the client has a started terminal."},"signatures":[{"raw":"val height : t -> int option","params":[{"name":"arg1","type":"t"}],"returns":"int option"}],"slug":"libtmux-client_observation-height"},{"id":"Libtmux.Client_observation.name","publicId":"Libtmux.Client_observation.name","qualifiedName":"Libtmux.Client_observation.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":379,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : t -> string","source":{"file":"lib/libtmux.mli","line":379,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"val name : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-client_observation-name"},{"id":"Libtmux.Client_observation.pid","publicId":"Libtmux.Client_observation.pid","qualifiedName":"Libtmux.Client_observation.pid","name":"pid","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":380,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pid : t -> int","source":{"file":"lib/libtmux.mli","line":380,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"val pid : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-client_observation-pid"},{"id":"Libtmux.Client_observation.same_observation","publicId":"Libtmux.Client_observation.same_observation","qualifiedName":"Libtmux.Client_observation.same_observation","name":"same_observation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":395,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Client names may be reused. No cross-snapshot entity equality is offered.\n "],"declarations":[{"kind":"function","text":"val same_observation : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":395,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","doc":{"summary":"Client names may be reused. No cross-snapshot entity equality is offered."},"signatures":[{"raw":"val same_observation : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-client_observation-same_observation"},{"id":"Libtmux.Client_observation.session","publicId":"Libtmux.Client_observation.session","qualifiedName":"Libtmux.Client_observation.session","name":"session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":392,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" [None] means the captured client has no attached session. "],"declarations":[{"kind":"function","text":"val session : t -> Session.t option","source":{"file":"lib/libtmux.mli","line":392,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","doc":{"summary":"`None` means the captured client has no attached session."},"signatures":[{"raw":"val session : t -> Session.t option","params":[{"name":"arg1","type":"t"}],"returns":"Session.t option"}],"slug":"libtmux-client_observation-session"},{"id":"Libtmux.Client_observation.source","publicId":"Libtmux.Client_observation.source","qualifiedName":"Libtmux.Client_observation.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":387,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":387,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-client_observation-source"},{"id":"Libtmux.Client_observation.t","publicId":"Libtmux.Client_observation.t","qualifiedName":"Libtmux.Client_observation.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":366,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":366,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-client_observation-t"},{"id":"Libtmux.Client_observation.width","publicId":"Libtmux.Client_observation.width","qualifiedName":"Libtmux.Client_observation.width","name":"width","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":381,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val width : t -> int","source":{"file":"lib/libtmux.mli","line":381,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"val width : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-client_observation-width"},{"id":"Libtmux.Command","publicId":"Libtmux.Command","qualifiedName":"Libtmux.Command","name":"Command","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":883,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Typed descriptions of explicit acquisition and mutation operations.\n Construction performs no I/O; a backend validates and admits the command. "],"declarations":[{"kind":"module","text":"module Command : sig\n type mutation =\n | Kill_session of Session.target\n | Kill_window of Window.target\n | Kill_pane of Pane.target\n | Select_window_at of Session.target * int\n | Unlink_window_at of {\n session : Session.target;\n index : int;\n allow_kill : bool;\n }\n | Link_window of {\n window : Window.target;\n session : Session.target;\n index : int;\n }\n | Move_window_at of {\n from_session : Session.target;\n from_index : int;\n session : Session.target;\n index : int;\n }\n | Select_pane of Pane.target\n | Set_pane_title of Pane.target * string\n | Resize_pane of {\n pane : Pane.target;\n width : int option;\n height : int option;\n }\n | Resize_window of {\n window : Window.target;\n width : int option;\n height : int option;\n }\n | Select_layout of Window.target * Layout.t\n | Cycle_layout of Window.target * [ `Next | `Previous ]\n | Move_pane of {\n pane : Pane.target;\n beside : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n }\n | Swap_panes of Pane.target * Pane.target\n | Rotate_panes of Window.target * [ `Forward | `Backward ]\n | Zoom_pane of Pane.target\n | Respawn_pane of {\n pane : Pane.target;\n spawn : Spawn.t;\n kill_running : bool;\n }\n | Clear_history of Pane.target\n | Set_environment of {\n scope : Environment.scope;\n name : string;\n value : string;\n hidden : bool;\n }\n | Unset_environment of Environment.scope * string\n | Remove_environment of Environment.scope * string\n | Set_option of {\n scope : Options.scope;\n name : string;\n index : int option;\n value : Options.scalar;\n append : bool;\n }\n | Unset_option of Options.scope * string * int option\n | Clear_option_array of Options.scope * string\n | Set_hook of {\n scope : Options.scope;\n name : string;\n index : int option;\n commands : Hook.command list;\n append : bool;\n }\n | Remove_hook of Options.scope * string * int option\n | Run_hook of Options.scope * string\n | Switch_client_at of {\n client : Client_name.t;\n session : Session.target;\n update_environment : bool;\n }\n | Request_detach_client_at of Client_name.t\n | Refresh_client_at of Client_name.t * bool\n | Resize_control_client_at of {\n client : Client_name.t;\n width : int;\n height : int;\n }\n\n type 'a t\n (** An immutable description, validated by a backend before admission.\n Constructing or inspecting it performs no I/O. *)\n\n type _ view =\n | Capture : Snapshot.t view\n | Capture_text : {\n pane : Pane.t;\n start : int;\n end_ : int;\n scratch_dir : string;\n }\n -> Captured_text.t view\n | Rename_window : Window.target * string -> unit view\n | Rename_session : Session.target * string -> unit view\n | Send_text : Pane.target * string -> unit view\n | Send_keys : Pane.target * Key.t list -> unit view\n | Wait_for : string -> unit view\n | Signal : string -> unit view\n | Capture_environment : Environment.scope * bool -> Environment.t view\n | Capture_options : Options.scope * bool -> Options.t view\n | Read_option : Options.scope * string * bool -> Options.value option view\n | Capture_hooks : Options.scope -> Options.t view\n | Read_hook : Options.scope * string * bool -> Options.value option view\n | Mutate : mutation -> unit view\n | Create_session : {\n name : string;\n window_name : string option;\n width : int;\n height : int;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Create_window : {\n session : Session.target;\n index : int option;\n name : string option;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Split_pane : {\n pane : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Break_pane : {\n pane : Pane.target;\n session : Session.target;\n index : int;\n name : string option;\n }\n -> Created.t view\n\n val view : 'a t -> 'a view\n (** Read-only inspection for transport adapters. *)\nend","source":{"file":"lib/libtmux.mli","line":883,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Typed descriptions of explicit acquisition and mutation operations. Construction performs no I/O; a backend validates and admits the command."},"slug":"libtmux-command"},{"id":"Libtmux.Command.mutation","publicId":"Libtmux.Command.mutation","qualifiedName":"Libtmux.Command.mutation","name":"mutation","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":884,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type mutation =\n | Kill_session of Session.target\n | Kill_window of Window.target\n | Kill_pane of Pane.target\n | Select_window_at of Session.target * int\n | Unlink_window_at of {\n session : Session.target;\n index : int;\n allow_kill : bool;\n }\n | Link_window of {\n window : Window.target;\n session : Session.target;\n index : int;\n }\n | Move_window_at of {\n from_session : Session.target;\n from_index : int;\n session : Session.target;\n index : int;\n }\n | Select_pane of Pane.target\n | Set_pane_title of Pane.target * string\n | Resize_pane of {\n pane : Pane.target;\n width : int option;\n height : int option;\n }\n | Resize_window of {\n window : Window.target;\n width : int option;\n height : int option;\n }\n | Select_layout of Window.target * Layout.t\n | Cycle_layout of Window.target * [ `Next | `Previous ]\n | Move_pane of {\n pane : Pane.target;\n beside : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n }\n | Swap_panes of Pane.target * Pane.target\n | Rotate_panes of Window.target * [ `Forward | `Backward ]\n | Zoom_pane of Pane.target\n | Respawn_pane of {\n pane : Pane.target;\n spawn : Spawn.t;\n kill_running : bool;\n }\n | Clear_history of Pane.target\n | Set_environment of {\n scope : Environment.scope;\n name : string;\n value : string;\n hidden : bool;\n }\n | Unset_environment of Environment.scope * string\n | Remove_environment of Environment.scope * string\n | Set_option of {\n scope : Options.scope;\n name : string;\n index : int option;\n value : Options.scalar;\n append : bool;\n }\n | Unset_option of Options.scope * string * int option\n | Clear_option_array of Options.scope * string\n | Set_hook of {\n scope : Options.scope;\n name : string;\n index : int option;\n commands : Hook.command list;\n append : bool;\n }\n | Remove_hook of Options.scope * string * int option\n | Run_hook of Options.scope * string\n | Switch_client_at of {\n client : Client_name.t;\n session : Session.target;\n update_environment : bool;\n }\n | Request_detach_client_at of Client_name.t\n | Refresh_client_at of Client_name.t * bool\n | Resize_control_client_at of {\n client : Client_name.t;\n width : int;\n height : int;\n }","source":{"file":"lib/libtmux.mli","line":884,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command","signatures":[{"raw":"type mutation =\n | Kill_session of Session.target \n | Kill_window of Window.target \n | Kill_pane of Pane.target \n | Select_window_at of Session.target * int \n | Unlink_window_at of\n {\n session: Session.target ;\n index: int ;\n allow_kill: bool } \n | Link_window of\n {\n window: Window.target ;\n session: Session.target ;\n index: int } \n | Move_window_at of\n {\n from_session: Session.target ;\n from_index: int ;\n session: Session.target ;\n index: int } \n | Select_pane of Pane.target \n | Set_pane_title of Pane.target * string \n | Resize_pane of\n {\n pane: Pane.target ;\n width: int option ;\n height: int option } \n | Resize_window of\n {\n window: Window.target ;\n width: int option ;\n height: int option } \n | Select_layout of Window.target * Layout.t \n | Cycle_layout of Window.target * [ `Next | `Previous ] \n | Move_pane of\n {\n pane: Pane.target ;\n beside: Pane.target ;\n direction: Geometry.direction ;\n size: Geometry.size option } \n | Swap_panes of Pane.target * Pane.target \n | Rotate_panes of Window.target * [ `Forward | `Backward ] \n | Zoom_pane of Pane.target \n | Respawn_pane of {\n pane: Pane.target ;\n spawn: Spawn.t ;\n kill_running: bool } \n | Clear_history of Pane.target \n | Set_environment of\n {\n scope: Environment.scope ;\n name: string ;\n value: string ;\n hidden: bool } \n | Unset_environment of Environment.scope * string \n | Remove_environment of Environment.scope * string \n | Set_option of\n {\n scope: Options.scope ;\n name: string ;\n index: int option ;\n value: Options.scalar ;\n append: bool } \n | Unset_option of Options.scope * string * int option \n | Clear_option_array of Options.scope * string \n | Set_hook of\n {\n scope: Options.scope ;\n name: string ;\n index: int option ;\n commands: Hook.command list ;\n append: bool } \n | Remove_hook of Options.scope * string * int option \n | Run_hook of Options.scope * string \n | Switch_client_at of\n {\n client: Client_name.t ;\n session: Session.target ;\n update_environment: bool } \n | Request_detach_client_at of Client_name.t \n | Refresh_client_at of Client_name.t * bool \n | Resize_control_client_at of\n {\n client: Client_name.t ;\n width: int ;\n height: int } ","params":[]}],"slug":"libtmux-command-mutation"},{"id":"Libtmux.Command.mutation.Clear_history","publicId":"Libtmux.Command.mutation.Clear_history","name":"Clear_history","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":933,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Clear_history of Pane.target","source":{"file":"lib/libtmux.mli","line":933,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Clear_history","slug":"libtmux-command-mutation-clear_history"},{"id":"Libtmux.Command.mutation.Clear_option_array","publicId":"Libtmux.Command.mutation.Clear_option_array","name":"Clear_option_array","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":950,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Clear_option_array of Options.scope * string","source":{"file":"lib/libtmux.mli","line":950,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Clear_option_array","slug":"libtmux-command-mutation-clear_option_array"},{"id":"Libtmux.Command.mutation.Cycle_layout","publicId":"Libtmux.Command.mutation.Cycle_layout","name":"Cycle_layout","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":918,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Cycle_layout of Window.target * [ `Next | `Previous ]","source":{"file":"lib/libtmux.mli","line":918,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Cycle_layout","slug":"libtmux-command-mutation-cycle_layout"},{"id":"Libtmux.Command.mutation.Kill_pane","publicId":"Libtmux.Command.mutation.Kill_pane","name":"Kill_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":887,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Kill_pane of Pane.target","source":{"file":"lib/libtmux.mli","line":887,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Kill_pane","slug":"libtmux-command-mutation-kill_pane"},{"id":"Libtmux.Command.mutation.Kill_session","publicId":"Libtmux.Command.mutation.Kill_session","name":"Kill_session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":885,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Kill_session of Session.target","source":{"file":"lib/libtmux.mli","line":885,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Kill_session","slug":"libtmux-command-mutation-kill_session"},{"id":"Libtmux.Command.mutation.Kill_window","publicId":"Libtmux.Command.mutation.Kill_window","name":"Kill_window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":886,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Kill_window of Window.target","source":{"file":"lib/libtmux.mli","line":886,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Kill_window","slug":"libtmux-command-mutation-kill_window"},{"id":"Libtmux.Command.mutation.Link_window","publicId":"Libtmux.Command.mutation.Link_window","name":"Link_window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":894,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Link_window of {\n window : Window.target;\n session : Session.target;\n index : int;\n }","source":{"file":"lib/libtmux.mli","line":894,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Link_window","slug":"libtmux-command-mutation-link_window"},{"id":"Libtmux.Command.mutation.Link_window.index","publicId":"Libtmux.Command.mutation.Link_window.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":897,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":897,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Link_window","type":"int","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-mutation-link_window-index"},{"id":"Libtmux.Command.mutation.Link_window.session","publicId":"Libtmux.Command.mutation.Link_window.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":896,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":896,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Link_window","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-mutation-link_window-session"},{"id":"Libtmux.Command.mutation.Link_window.window","publicId":"Libtmux.Command.mutation.Link_window.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":895,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : Window.target;","source":{"file":"lib/libtmux.mli","line":895,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Link_window","type":"Window.target","qualifiedName":"Libtmux.Command.window","slug":"libtmux-command-mutation-link_window-window"},{"id":"Libtmux.Command.mutation.Move_pane","publicId":"Libtmux.Command.mutation.Move_pane","name":"Move_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":919,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Move_pane of {\n pane : Pane.target;\n beside : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n }","source":{"file":"lib/libtmux.mli","line":919,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Move_pane","slug":"libtmux-command-mutation-move_pane"},{"id":"Libtmux.Command.mutation.Move_pane.beside","publicId":"Libtmux.Command.mutation.Move_pane.beside","name":"beside","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":921,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"beside : Pane.target;","source":{"file":"lib/libtmux.mli","line":921,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Move_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.beside","slug":"libtmux-command-mutation-move_pane-beside"},{"id":"Libtmux.Command.mutation.Move_pane.direction","publicId":"Libtmux.Command.mutation.Move_pane.direction","name":"direction","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":922,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"direction : Geometry.direction;","source":{"file":"lib/libtmux.mli","line":922,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Move_pane","type":"Geometry.direction","qualifiedName":"Libtmux.Command.direction","slug":"libtmux-command-mutation-move_pane-direction"},{"id":"Libtmux.Command.mutation.Move_pane.pane","publicId":"Libtmux.Command.mutation.Move_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":920,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":920,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Move_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-mutation-move_pane-pane"},{"id":"Libtmux.Command.mutation.Move_pane.size","publicId":"Libtmux.Command.mutation.Move_pane.size","name":"size","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":923,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"size : Geometry.size option;","source":{"file":"lib/libtmux.mli","line":923,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Move_pane","type":"Geometry.size option","qualifiedName":"Libtmux.Command.size","slug":"libtmux-command-mutation-move_pane-size"},{"id":"Libtmux.Command.mutation.Move_window_at","publicId":"Libtmux.Command.mutation.Move_window_at","name":"Move_window_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":899,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Move_window_at of {\n from_session : Session.target;\n from_index : int;\n session : Session.target;\n index : int;\n }","source":{"file":"lib/libtmux.mli","line":899,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Move_window_at","slug":"libtmux-command-mutation-move_window_at"},{"id":"Libtmux.Command.mutation.Move_window_at.from_index","publicId":"Libtmux.Command.mutation.Move_window_at.from_index","name":"from_index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":901,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"from_index : int;","source":{"file":"lib/libtmux.mli","line":901,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Move_window_at","type":"int","qualifiedName":"Libtmux.Command.from_index","slug":"libtmux-command-mutation-move_window_at-from_index"},{"id":"Libtmux.Command.mutation.Move_window_at.from_session","publicId":"Libtmux.Command.mutation.Move_window_at.from_session","name":"from_session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":900,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"from_session : Session.target;","source":{"file":"lib/libtmux.mli","line":900,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Move_window_at","type":"Session.target","qualifiedName":"Libtmux.Command.from_session","slug":"libtmux-command-mutation-move_window_at-from_session"},{"id":"Libtmux.Command.mutation.Move_window_at.index","publicId":"Libtmux.Command.mutation.Move_window_at.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":903,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":903,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Move_window_at","type":"int","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-mutation-move_window_at-index"},{"id":"Libtmux.Command.mutation.Move_window_at.session","publicId":"Libtmux.Command.mutation.Move_window_at.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":902,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":902,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Move_window_at","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-mutation-move_window_at-session"},{"id":"Libtmux.Command.mutation.Refresh_client_at","publicId":"Libtmux.Command.mutation.Refresh_client_at","name":"Refresh_client_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":966,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Refresh_client_at of Client_name.t * bool","source":{"file":"lib/libtmux.mli","line":966,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Refresh_client_at","slug":"libtmux-command-mutation-refresh_client_at"},{"id":"Libtmux.Command.mutation.Remove_environment","publicId":"Libtmux.Command.mutation.Remove_environment","name":"Remove_environment","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":941,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Remove_environment of Environment.scope * string","source":{"file":"lib/libtmux.mli","line":941,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Remove_environment","slug":"libtmux-command-mutation-remove_environment"},{"id":"Libtmux.Command.mutation.Remove_hook","publicId":"Libtmux.Command.mutation.Remove_hook","name":"Remove_hook","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":958,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Remove_hook of Options.scope * string * int option","source":{"file":"lib/libtmux.mli","line":958,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Remove_hook","slug":"libtmux-command-mutation-remove_hook"},{"id":"Libtmux.Command.mutation.Request_detach_client_at","publicId":"Libtmux.Command.mutation.Request_detach_client_at","name":"Request_detach_client_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":965,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Request_detach_client_at of Client_name.t","source":{"file":"lib/libtmux.mli","line":965,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Request_detach_client_at","slug":"libtmux-command-mutation-request_detach_client_at"},{"id":"Libtmux.Command.mutation.Resize_control_client_at","publicId":"Libtmux.Command.mutation.Resize_control_client_at","name":"Resize_control_client_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":967,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Resize_control_client_at of {\n client : Client_name.t;\n width : int;\n height : int;\n }","source":{"file":"lib/libtmux.mli","line":967,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Resize_control_client_at","slug":"libtmux-command-mutation-resize_control_client_at"},{"id":"Libtmux.Command.mutation.Resize_control_client_at.client","publicId":"Libtmux.Command.mutation.Resize_control_client_at.client","name":"client","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":968,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"client : Client_name.t;","source":{"file":"lib/libtmux.mli","line":968,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Resize_control_client_at","type":"Client_name.t","qualifiedName":"Libtmux.Command.client","slug":"libtmux-command-mutation-resize_control_client_at-client"},{"id":"Libtmux.Command.mutation.Resize_control_client_at.height","publicId":"Libtmux.Command.mutation.Resize_control_client_at.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":970,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int;","source":{"file":"lib/libtmux.mli","line":970,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Resize_control_client_at","type":"int","qualifiedName":"Libtmux.Command.height","slug":"libtmux-command-mutation-resize_control_client_at-height"},{"id":"Libtmux.Command.mutation.Resize_control_client_at.width","publicId":"Libtmux.Command.mutation.Resize_control_client_at.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":969,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"lib/libtmux.mli","line":969,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Resize_control_client_at","type":"int","qualifiedName":"Libtmux.Command.width","slug":"libtmux-command-mutation-resize_control_client_at-width"},{"id":"Libtmux.Command.mutation.Resize_pane","publicId":"Libtmux.Command.mutation.Resize_pane","name":"Resize_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":907,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Resize_pane of {\n pane : Pane.target;\n width : int option;\n height : int option;\n }","source":{"file":"lib/libtmux.mli","line":907,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Resize_pane","slug":"libtmux-command-mutation-resize_pane"},{"id":"Libtmux.Command.mutation.Resize_pane.height","publicId":"Libtmux.Command.mutation.Resize_pane.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":910,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int option;","source":{"file":"lib/libtmux.mli","line":910,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Resize_pane","type":"int option","qualifiedName":"Libtmux.Command.height","slug":"libtmux-command-mutation-resize_pane-height"},{"id":"Libtmux.Command.mutation.Resize_pane.pane","publicId":"Libtmux.Command.mutation.Resize_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":908,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":908,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Resize_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-mutation-resize_pane-pane"},{"id":"Libtmux.Command.mutation.Resize_pane.width","publicId":"Libtmux.Command.mutation.Resize_pane.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":909,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int option;","source":{"file":"lib/libtmux.mli","line":909,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Resize_pane","type":"int option","qualifiedName":"Libtmux.Command.width","slug":"libtmux-command-mutation-resize_pane-width"},{"id":"Libtmux.Command.mutation.Resize_window","publicId":"Libtmux.Command.mutation.Resize_window","name":"Resize_window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":912,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Resize_window of {\n window : Window.target;\n width : int option;\n height : int option;\n }","source":{"file":"lib/libtmux.mli","line":912,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Resize_window","slug":"libtmux-command-mutation-resize_window"},{"id":"Libtmux.Command.mutation.Resize_window.height","publicId":"Libtmux.Command.mutation.Resize_window.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":915,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int option;","source":{"file":"lib/libtmux.mli","line":915,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Resize_window","type":"int option","qualifiedName":"Libtmux.Command.height","slug":"libtmux-command-mutation-resize_window-height"},{"id":"Libtmux.Command.mutation.Resize_window.width","publicId":"Libtmux.Command.mutation.Resize_window.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":914,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int option;","source":{"file":"lib/libtmux.mli","line":914,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Resize_window","type":"int option","qualifiedName":"Libtmux.Command.width","slug":"libtmux-command-mutation-resize_window-width"},{"id":"Libtmux.Command.mutation.Resize_window.window","publicId":"Libtmux.Command.mutation.Resize_window.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":913,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : Window.target;","source":{"file":"lib/libtmux.mli","line":913,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Resize_window","type":"Window.target","qualifiedName":"Libtmux.Command.window","slug":"libtmux-command-mutation-resize_window-window"},{"id":"Libtmux.Command.mutation.Respawn_pane","publicId":"Libtmux.Command.mutation.Respawn_pane","name":"Respawn_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":928,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Respawn_pane of {\n pane : Pane.target;\n spawn : Spawn.t;\n kill_running : bool;\n }","source":{"file":"lib/libtmux.mli","line":928,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Respawn_pane","slug":"libtmux-command-mutation-respawn_pane"},{"id":"Libtmux.Command.mutation.Respawn_pane.kill_running","publicId":"Libtmux.Command.mutation.Respawn_pane.kill_running","name":"kill_running","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":931,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"kill_running : bool;","source":{"file":"lib/libtmux.mli","line":931,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Respawn_pane","type":"bool","qualifiedName":"Libtmux.Command.kill_running","slug":"libtmux-command-mutation-respawn_pane-kill_running"},{"id":"Libtmux.Command.mutation.Respawn_pane.pane","publicId":"Libtmux.Command.mutation.Respawn_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":929,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":929,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Respawn_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-mutation-respawn_pane-pane"},{"id":"Libtmux.Command.mutation.Respawn_pane.spawn","publicId":"Libtmux.Command.mutation.Respawn_pane.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":930,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Spawn.t;","source":{"file":"lib/libtmux.mli","line":930,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Respawn_pane","type":"Spawn.t","qualifiedName":"Libtmux.Command.spawn","slug":"libtmux-command-mutation-respawn_pane-spawn"},{"id":"Libtmux.Command.mutation.Rotate_panes","publicId":"Libtmux.Command.mutation.Rotate_panes","name":"Rotate_panes","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":926,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Rotate_panes of Window.target * [ `Forward | `Backward ]","source":{"file":"lib/libtmux.mli","line":926,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Rotate_panes","slug":"libtmux-command-mutation-rotate_panes"},{"id":"Libtmux.Command.mutation.Run_hook","publicId":"Libtmux.Command.mutation.Run_hook","name":"Run_hook","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":959,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Run_hook of Options.scope * string","source":{"file":"lib/libtmux.mli","line":959,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Run_hook","slug":"libtmux-command-mutation-run_hook"},{"id":"Libtmux.Command.mutation.Select_layout","publicId":"Libtmux.Command.mutation.Select_layout","name":"Select_layout","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":917,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Select_layout of Window.target * Layout.t","source":{"file":"lib/libtmux.mli","line":917,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Select_layout","slug":"libtmux-command-mutation-select_layout"},{"id":"Libtmux.Command.mutation.Select_pane","publicId":"Libtmux.Command.mutation.Select_pane","name":"Select_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":905,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Select_pane of Pane.target","source":{"file":"lib/libtmux.mli","line":905,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Select_pane","slug":"libtmux-command-mutation-select_pane"},{"id":"Libtmux.Command.mutation.Select_window_at","publicId":"Libtmux.Command.mutation.Select_window_at","name":"Select_window_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":888,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Select_window_at of Session.target * int","source":{"file":"lib/libtmux.mli","line":888,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Select_window_at","slug":"libtmux-command-mutation-select_window_at"},{"id":"Libtmux.Command.mutation.Set_environment","publicId":"Libtmux.Command.mutation.Set_environment","name":"Set_environment","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":934,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_environment of {\n scope : Environment.scope;\n name : string;\n value : string;\n hidden : bool;\n }","source":{"file":"lib/libtmux.mli","line":934,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Set_environment","slug":"libtmux-command-mutation-set_environment"},{"id":"Libtmux.Command.mutation.Set_environment.hidden","publicId":"Libtmux.Command.mutation.Set_environment.hidden","name":"hidden","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":938,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"hidden : bool;","source":{"file":"lib/libtmux.mli","line":938,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_environment","type":"bool","qualifiedName":"Libtmux.Command.hidden","slug":"libtmux-command-mutation-set_environment-hidden"},{"id":"Libtmux.Command.mutation.Set_environment.name","publicId":"Libtmux.Command.mutation.Set_environment.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":936,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":936,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_environment","type":"string","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-mutation-set_environment-name"},{"id":"Libtmux.Command.mutation.Set_environment.scope","publicId":"Libtmux.Command.mutation.Set_environment.scope","name":"scope","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":935,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scope : Environment.scope;","source":{"file":"lib/libtmux.mli","line":935,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_environment","type":"Environment.scope","qualifiedName":"Libtmux.Command.scope","slug":"libtmux-command-mutation-set_environment-scope"},{"id":"Libtmux.Command.mutation.Set_environment.value","publicId":"Libtmux.Command.mutation.Set_environment.value","name":"value","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":937,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"value : string;","source":{"file":"lib/libtmux.mli","line":937,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_environment","type":"string","qualifiedName":"Libtmux.Command.value","slug":"libtmux-command-mutation-set_environment-value"},{"id":"Libtmux.Command.mutation.Set_hook","publicId":"Libtmux.Command.mutation.Set_hook","name":"Set_hook","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":951,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_hook of {\n scope : Options.scope;\n name : string;\n index : int option;\n commands : Hook.command list;\n append : bool;\n }","source":{"file":"lib/libtmux.mli","line":951,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Set_hook","slug":"libtmux-command-mutation-set_hook"},{"id":"Libtmux.Command.mutation.Set_hook.append","publicId":"Libtmux.Command.mutation.Set_hook.append","name":"append","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":956,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"append : bool;","source":{"file":"lib/libtmux.mli","line":956,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_hook","type":"bool","qualifiedName":"Libtmux.Command.append","slug":"libtmux-command-mutation-set_hook-append"},{"id":"Libtmux.Command.mutation.Set_hook.commands","publicId":"Libtmux.Command.mutation.Set_hook.commands","name":"commands","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":955,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"commands : Hook.command list;","source":{"file":"lib/libtmux.mli","line":955,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_hook","type":"Hook.command list","qualifiedName":"Libtmux.Command.commands","slug":"libtmux-command-mutation-set_hook-commands"},{"id":"Libtmux.Command.mutation.Set_hook.index","publicId":"Libtmux.Command.mutation.Set_hook.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":954,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int option;","source":{"file":"lib/libtmux.mli","line":954,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_hook","type":"int option","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-mutation-set_hook-index"},{"id":"Libtmux.Command.mutation.Set_hook.name","publicId":"Libtmux.Command.mutation.Set_hook.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":953,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":953,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_hook","type":"string","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-mutation-set_hook-name"},{"id":"Libtmux.Command.mutation.Set_hook.scope","publicId":"Libtmux.Command.mutation.Set_hook.scope","name":"scope","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":952,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scope : Options.scope;","source":{"file":"lib/libtmux.mli","line":952,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_hook","type":"Options.scope","qualifiedName":"Libtmux.Command.scope","slug":"libtmux-command-mutation-set_hook-scope"},{"id":"Libtmux.Command.mutation.Set_option","publicId":"Libtmux.Command.mutation.Set_option","name":"Set_option","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":942,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_option of {\n scope : Options.scope;\n name : string;\n index : int option;\n value : Options.scalar;\n append : bool;\n }","source":{"file":"lib/libtmux.mli","line":942,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Set_option","slug":"libtmux-command-mutation-set_option"},{"id":"Libtmux.Command.mutation.Set_option.append","publicId":"Libtmux.Command.mutation.Set_option.append","name":"append","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":947,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"append : bool;","source":{"file":"lib/libtmux.mli","line":947,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_option","type":"bool","qualifiedName":"Libtmux.Command.append","slug":"libtmux-command-mutation-set_option-append"},{"id":"Libtmux.Command.mutation.Set_option.index","publicId":"Libtmux.Command.mutation.Set_option.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":945,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int option;","source":{"file":"lib/libtmux.mli","line":945,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_option","type":"int option","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-mutation-set_option-index"},{"id":"Libtmux.Command.mutation.Set_option.name","publicId":"Libtmux.Command.mutation.Set_option.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":944,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":944,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_option","type":"string","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-mutation-set_option-name"},{"id":"Libtmux.Command.mutation.Set_option.scope","publicId":"Libtmux.Command.mutation.Set_option.scope","name":"scope","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":943,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scope : Options.scope;","source":{"file":"lib/libtmux.mli","line":943,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_option","type":"Options.scope","qualifiedName":"Libtmux.Command.scope","slug":"libtmux-command-mutation-set_option-scope"},{"id":"Libtmux.Command.mutation.Set_option.value","publicId":"Libtmux.Command.mutation.Set_option.value","name":"value","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":946,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"value : Options.scalar;","source":{"file":"lib/libtmux.mli","line":946,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Set_option","type":"Options.scalar","qualifiedName":"Libtmux.Command.value","slug":"libtmux-command-mutation-set_option-value"},{"id":"Libtmux.Command.mutation.Set_pane_title","publicId":"Libtmux.Command.mutation.Set_pane_title","name":"Set_pane_title","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":906,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_pane_title of Pane.target * string","source":{"file":"lib/libtmux.mli","line":906,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Set_pane_title","slug":"libtmux-command-mutation-set_pane_title"},{"id":"Libtmux.Command.mutation.Swap_panes","publicId":"Libtmux.Command.mutation.Swap_panes","name":"Swap_panes","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":925,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Swap_panes of Pane.target * Pane.target","source":{"file":"lib/libtmux.mli","line":925,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Swap_panes","slug":"libtmux-command-mutation-swap_panes"},{"id":"Libtmux.Command.mutation.Switch_client_at","publicId":"Libtmux.Command.mutation.Switch_client_at","name":"Switch_client_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":960,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Switch_client_at of {\n client : Client_name.t;\n session : Session.target;\n update_environment : bool;\n }","source":{"file":"lib/libtmux.mli","line":960,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Switch_client_at","slug":"libtmux-command-mutation-switch_client_at"},{"id":"Libtmux.Command.mutation.Switch_client_at.client","publicId":"Libtmux.Command.mutation.Switch_client_at.client","name":"client","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":961,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"client : Client_name.t;","source":{"file":"lib/libtmux.mli","line":961,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Switch_client_at","type":"Client_name.t","qualifiedName":"Libtmux.Command.client","slug":"libtmux-command-mutation-switch_client_at-client"},{"id":"Libtmux.Command.mutation.Switch_client_at.session","publicId":"Libtmux.Command.mutation.Switch_client_at.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":962,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":962,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Switch_client_at","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-mutation-switch_client_at-session"},{"id":"Libtmux.Command.mutation.Switch_client_at.update_environment","publicId":"Libtmux.Command.mutation.Switch_client_at.update_environment","name":"update_environment","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":963,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"update_environment : bool;","source":{"file":"lib/libtmux.mli","line":963,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Switch_client_at","type":"bool","qualifiedName":"Libtmux.Command.update_environment","slug":"libtmux-command-mutation-switch_client_at-update_environment"},{"id":"Libtmux.Command.mutation.Unlink_window_at","publicId":"Libtmux.Command.mutation.Unlink_window_at","name":"Unlink_window_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":889,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unlink_window_at of {\n session : Session.target;\n index : int;\n allow_kill : bool;\n }","source":{"file":"lib/libtmux.mli","line":889,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Unlink_window_at","slug":"libtmux-command-mutation-unlink_window_at"},{"id":"Libtmux.Command.mutation.Unlink_window_at.allow_kill","publicId":"Libtmux.Command.mutation.Unlink_window_at.allow_kill","name":"allow_kill","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":892,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"allow_kill : bool;","source":{"file":"lib/libtmux.mli","line":892,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Unlink_window_at","type":"bool","qualifiedName":"Libtmux.Command.allow_kill","slug":"libtmux-command-mutation-unlink_window_at-allow_kill"},{"id":"Libtmux.Command.mutation.Unlink_window_at.index","publicId":"Libtmux.Command.mutation.Unlink_window_at.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":891,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":891,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Unlink_window_at","type":"int","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-mutation-unlink_window_at-index"},{"id":"Libtmux.Command.mutation.Unlink_window_at.session","publicId":"Libtmux.Command.mutation.Unlink_window_at.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":890,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":890,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation.Unlink_window_at","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-mutation-unlink_window_at-session"},{"id":"Libtmux.Command.mutation.Unset_environment","publicId":"Libtmux.Command.mutation.Unset_environment","name":"Unset_environment","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":940,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unset_environment of Environment.scope * string","source":{"file":"lib/libtmux.mli","line":940,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Unset_environment","slug":"libtmux-command-mutation-unset_environment"},{"id":"Libtmux.Command.mutation.Unset_option","publicId":"Libtmux.Command.mutation.Unset_option","name":"Unset_option","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":949,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unset_option of Options.scope * string * int option","source":{"file":"lib/libtmux.mli","line":949,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Unset_option","slug":"libtmux-command-mutation-unset_option"},{"id":"Libtmux.Command.mutation.Zoom_pane","publicId":"Libtmux.Command.mutation.Zoom_pane","name":"Zoom_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":927,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Zoom_pane of Pane.target","source":{"file":"lib/libtmux.mli","line":927,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Zoom_pane","slug":"libtmux-command-mutation-zoom_pane"},{"id":"Libtmux.Command.t","publicId":"Libtmux.Command.t","qualifiedName":"Libtmux.Command.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":973,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" An immutable description, validated by a backend before admission.\n Constructing or inspecting it performs no I/O. "],"declarations":[{"kind":"typealias","text":"type 'a t","source":{"file":"lib/libtmux.mli","line":973,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command","doc":{"summary":"An immutable description, validated by a backend before admission. Constructing or inspecting it performs no I/O."},"signatures":[{"raw":"type 'a t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-command-t"},{"id":"Libtmux.Command.view","publicId":"Libtmux.Command.view","qualifiedName":"Libtmux.Command.view","name":"view","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1028,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read-only inspection for transport adapters. "],"declarations":[{"kind":"function","text":"val view : 'a t -> 'a view","source":{"file":"lib/libtmux.mli","line":1028,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command","doc":{"summary":"Read-only inspection for transport adapters."},"signatures":[{"raw":"val view : 'a t -> 'a view","params":[{"name":"arg1","type":"'a t"}],"returns":"'a view"}],"slug":"libtmux-command-view"},{"id":"Libtmux.Command.view:type","publicId":"Libtmux.Command.view:type","qualifiedName":"Libtmux.Command.view","name":"view","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":977,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type _ view =\n | Capture : Snapshot.t view\n | Capture_text : {\n pane : Pane.t;\n start : int;\n end_ : int;\n scratch_dir : string;\n }\n -> Captured_text.t view\n | Rename_window : Window.target * string -> unit view\n | Rename_session : Session.target * string -> unit view\n | Send_text : Pane.target * string -> unit view\n | Send_keys : Pane.target * Key.t list -> unit view\n | Wait_for : string -> unit view\n | Signal : string -> unit view\n | Capture_environment : Environment.scope * bool -> Environment.t view\n | Capture_options : Options.scope * bool -> Options.t view\n | Read_option : Options.scope * string * bool -> Options.value option view\n | Capture_hooks : Options.scope -> Options.t view\n | Read_hook : Options.scope * string * bool -> Options.value option view\n | Mutate : mutation -> unit view\n | Create_session : {\n name : string;\n window_name : string option;\n width : int;\n height : int;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Create_window : {\n session : Session.target;\n index : int option;\n name : string option;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Split_pane : {\n pane : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Break_pane : {\n pane : Pane.target;\n session : Session.target;\n index : int;\n name : string option;\n }\n -> Created.t view","source":{"file":"lib/libtmux.mli","line":977,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command","signatures":[{"raw":"type _ view =\n | Capture: Snapshot.t view \n | Capture_text: {\n pane: Pane.t ;\n start: int ;\n end_: int ;\n scratch_dir: string } -> Captured_text.t view \n | Rename_window: Window.target * string -> unit view \n | Rename_session: Session.target * string -> unit view \n | Send_text: Pane.target * string -> unit view \n | Send_keys: Pane.target * Key.t list -> unit view \n | Wait_for: string -> unit view \n | Signal: string -> unit view \n | Capture_environment: Environment.scope * bool -> Environment.t view \n | Capture_options: Options.scope * bool -> Options.t view \n | Read_option: Options.scope * string * bool -> Options.value option view \n | Capture_hooks: Options.scope -> Options.t view \n | Read_hook: Options.scope * string * bool -> Options.value option view \n | Mutate: mutation -> unit view \n | Create_session:\n {\n name: string ;\n window_name: string option ;\n width: int ;\n height: int ;\n spawn: Spawn.t } -> Created.t view \n | Create_window:\n {\n session: Session.target ;\n index: int option ;\n name: string option ;\n spawn: Spawn.t } -> Created.t view \n | Split_pane:\n {\n pane: Pane.target ;\n direction: Geometry.direction ;\n size: Geometry.size option ;\n spawn: Spawn.t } -> Created.t view \n | Break_pane:\n {\n pane: Pane.target ;\n session: Session.target ;\n index: int ;\n name: string option } -> Created.t view ","params":[]}],"slug":"libtmux-command-view-type"},{"id":"Libtmux.Command.view:type.Break_pane","publicId":"Libtmux.Command.view:type.Break_pane","name":"Break_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1020,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Break_pane : {\n pane : Pane.target;\n session : Session.target;\n index : int;\n name : string option;\n }\n -> Created.t view","source":{"file":"lib/libtmux.mli","line":1020,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"struct","qualifiedName":"Libtmux.Command.Break_pane","slug":"libtmux-command-view-type-break_pane"},{"id":"Libtmux.Command.view:type.Break_pane.index","publicId":"Libtmux.Command.view:type.Break_pane.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1023,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":1023,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Break_pane","type":"int","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-view-type-break_pane-index"},{"id":"Libtmux.Command.view:type.Break_pane.name","publicId":"Libtmux.Command.view:type.Break_pane.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1024,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string option;","source":{"file":"lib/libtmux.mli","line":1024,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Break_pane","type":"string option","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-view-type-break_pane-name"},{"id":"Libtmux.Command.view:type.Break_pane.pane","publicId":"Libtmux.Command.view:type.Break_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1021,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":1021,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Break_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-view-type-break_pane-pane"},{"id":"Libtmux.Command.view:type.Break_pane.session","publicId":"Libtmux.Command.view:type.Break_pane.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1022,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":1022,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Break_pane","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-view-type-break_pane-session"},{"id":"Libtmux.Command.view:type.Capture","publicId":"Libtmux.Command.view:type.Capture","name":"Capture","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":978,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture : Snapshot.t view","source":{"file":"lib/libtmux.mli","line":978,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"unit","qualifiedName":"Libtmux.Command.Capture","slug":"libtmux-command-view-type-capture"},{"id":"Libtmux.Command.view:type.Capture_environment","publicId":"Libtmux.Command.view:type.Capture_environment","name":"Capture_environment","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":992,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture_environment : Environment.scope * bool -> Environment.t view","source":{"file":"lib/libtmux.mli","line":992,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Capture_environment","slug":"libtmux-command-view-type-capture_environment"},{"id":"Libtmux.Command.view:type.Capture_hooks","publicId":"Libtmux.Command.view:type.Capture_hooks","name":"Capture_hooks","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":995,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture_hooks : Options.scope -> Options.t view","source":{"file":"lib/libtmux.mli","line":995,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Capture_hooks","slug":"libtmux-command-view-type-capture_hooks"},{"id":"Libtmux.Command.view:type.Capture_options","publicId":"Libtmux.Command.view:type.Capture_options","name":"Capture_options","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":993,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture_options : Options.scope * bool -> Options.t view","source":{"file":"lib/libtmux.mli","line":993,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Capture_options","slug":"libtmux-command-view-type-capture_options"},{"id":"Libtmux.Command.view:type.Capture_text","publicId":"Libtmux.Command.view:type.Capture_text","name":"Capture_text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":979,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture_text : {\n pane : Pane.t;\n start : int;\n end_ : int;\n scratch_dir : string;\n }\n -> Captured_text.t view","source":{"file":"lib/libtmux.mli","line":979,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"struct","qualifiedName":"Libtmux.Command.Capture_text","slug":"libtmux-command-view-type-capture_text"},{"id":"Libtmux.Command.view:type.Capture_text.end_","publicId":"Libtmux.Command.view:type.Capture_text.end_","name":"end_","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":982,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"end_ : int;","source":{"file":"lib/libtmux.mli","line":982,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Capture_text","type":"int","qualifiedName":"Libtmux.Command.end_","slug":"libtmux-command-view-type-capture_text-end_"},{"id":"Libtmux.Command.view:type.Capture_text.pane","publicId":"Libtmux.Command.view:type.Capture_text.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":980,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.t;","source":{"file":"lib/libtmux.mli","line":980,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Capture_text","type":"Pane.t","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-view-type-capture_text-pane"},{"id":"Libtmux.Command.view:type.Capture_text.scratch_dir","publicId":"Libtmux.Command.view:type.Capture_text.scratch_dir","name":"scratch_dir","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":983,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scratch_dir : string;","source":{"file":"lib/libtmux.mli","line":983,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Capture_text","type":"string","qualifiedName":"Libtmux.Command.scratch_dir","slug":"libtmux-command-view-type-capture_text-scratch_dir"},{"id":"Libtmux.Command.view:type.Capture_text.start","publicId":"Libtmux.Command.view:type.Capture_text.start","name":"start","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":981,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"start : int;","source":{"file":"lib/libtmux.mli","line":981,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Capture_text","type":"int","qualifiedName":"Libtmux.Command.start","slug":"libtmux-command-view-type-capture_text-start"},{"id":"Libtmux.Command.view:type.Create_session","publicId":"Libtmux.Command.view:type.Create_session","name":"Create_session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":998,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Create_session : {\n name : string;\n window_name : string option;\n width : int;\n height : int;\n spawn : Spawn.t;\n }\n -> Created.t view","source":{"file":"lib/libtmux.mli","line":998,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"struct","qualifiedName":"Libtmux.Command.Create_session","slug":"libtmux-command-view-type-create_session"},{"id":"Libtmux.Command.view:type.Create_session.height","publicId":"Libtmux.Command.view:type.Create_session.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1002,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int;","source":{"file":"lib/libtmux.mli","line":1002,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Create_session","type":"int","qualifiedName":"Libtmux.Command.height","slug":"libtmux-command-view-type-create_session-height"},{"id":"Libtmux.Command.view:type.Create_session.name","publicId":"Libtmux.Command.view:type.Create_session.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":999,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":999,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Create_session","type":"string","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-view-type-create_session-name"},{"id":"Libtmux.Command.view:type.Create_session.spawn","publicId":"Libtmux.Command.view:type.Create_session.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1003,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Spawn.t;","source":{"file":"lib/libtmux.mli","line":1003,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Create_session","type":"Spawn.t","qualifiedName":"Libtmux.Command.spawn","slug":"libtmux-command-view-type-create_session-spawn"},{"id":"Libtmux.Command.view:type.Create_session.width","publicId":"Libtmux.Command.view:type.Create_session.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1001,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"lib/libtmux.mli","line":1001,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Create_session","type":"int","qualifiedName":"Libtmux.Command.width","slug":"libtmux-command-view-type-create_session-width"},{"id":"Libtmux.Command.view:type.Create_session.window_name","publicId":"Libtmux.Command.view:type.Create_session.window_name","name":"window_name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1000,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_name : string option;","source":{"file":"lib/libtmux.mli","line":1000,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Create_session","type":"string option","qualifiedName":"Libtmux.Command.window_name","slug":"libtmux-command-view-type-create_session-window_name"},{"id":"Libtmux.Command.view:type.Create_window","publicId":"Libtmux.Command.view:type.Create_window","name":"Create_window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1006,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Create_window : {\n session : Session.target;\n index : int option;\n name : string option;\n spawn : Spawn.t;\n }\n -> Created.t view","source":{"file":"lib/libtmux.mli","line":1006,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"struct","qualifiedName":"Libtmux.Command.Create_window","slug":"libtmux-command-view-type-create_window"},{"id":"Libtmux.Command.view:type.Create_window.index","publicId":"Libtmux.Command.view:type.Create_window.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1008,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int option;","source":{"file":"lib/libtmux.mli","line":1008,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Create_window","type":"int option","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-view-type-create_window-index"},{"id":"Libtmux.Command.view:type.Create_window.name","publicId":"Libtmux.Command.view:type.Create_window.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1009,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string option;","source":{"file":"lib/libtmux.mli","line":1009,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Create_window","type":"string option","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-view-type-create_window-name"},{"id":"Libtmux.Command.view:type.Create_window.session","publicId":"Libtmux.Command.view:type.Create_window.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1007,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":1007,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Create_window","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-view-type-create_window-session"},{"id":"Libtmux.Command.view:type.Create_window.spawn","publicId":"Libtmux.Command.view:type.Create_window.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1010,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Spawn.t;","source":{"file":"lib/libtmux.mli","line":1010,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Create_window","type":"Spawn.t","qualifiedName":"Libtmux.Command.spawn","slug":"libtmux-command-view-type-create_window-spawn"},{"id":"Libtmux.Command.view:type.Mutate","publicId":"Libtmux.Command.view:type.Mutate","name":"Mutate","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":997,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Mutate : mutation -> unit view","source":{"file":"lib/libtmux.mli","line":997,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Mutate","slug":"libtmux-command-view-type-mutate"},{"id":"Libtmux.Command.view:type.Read_hook","publicId":"Libtmux.Command.view:type.Read_hook","name":"Read_hook","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":996,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Read_hook : Options.scope * string * bool -> Options.value option view","source":{"file":"lib/libtmux.mli","line":996,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Read_hook","slug":"libtmux-command-view-type-read_hook"},{"id":"Libtmux.Command.view:type.Read_option","publicId":"Libtmux.Command.view:type.Read_option","name":"Read_option","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":994,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Read_option : Options.scope * string * bool -> Options.value option view","source":{"file":"lib/libtmux.mli","line":994,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Read_option","slug":"libtmux-command-view-type-read_option"},{"id":"Libtmux.Command.view:type.Rename_session","publicId":"Libtmux.Command.view:type.Rename_session","name":"Rename_session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":987,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Rename_session : Session.target * string -> unit view","source":{"file":"lib/libtmux.mli","line":987,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Rename_session","slug":"libtmux-command-view-type-rename_session"},{"id":"Libtmux.Command.view:type.Rename_window","publicId":"Libtmux.Command.view:type.Rename_window","name":"Rename_window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":986,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Rename_window : Window.target * string -> unit view","source":{"file":"lib/libtmux.mli","line":986,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Rename_window","slug":"libtmux-command-view-type-rename_window"},{"id":"Libtmux.Command.view:type.Send_keys","publicId":"Libtmux.Command.view:type.Send_keys","name":"Send_keys","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":989,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Send_keys : Pane.target * Key.t list -> unit view","source":{"file":"lib/libtmux.mli","line":989,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Send_keys","slug":"libtmux-command-view-type-send_keys"},{"id":"Libtmux.Command.view:type.Send_text","publicId":"Libtmux.Command.view:type.Send_text","name":"Send_text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":988,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Send_text : Pane.target * string -> unit view","source":{"file":"lib/libtmux.mli","line":988,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Send_text","slug":"libtmux-command-view-type-send_text"},{"id":"Libtmux.Command.view:type.Signal","publicId":"Libtmux.Command.view:type.Signal","name":"Signal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":991,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Signal : string -> unit view","source":{"file":"lib/libtmux.mli","line":991,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Signal","slug":"libtmux-command-view-type-signal"},{"id":"Libtmux.Command.view:type.Split_pane","publicId":"Libtmux.Command.view:type.Split_pane","name":"Split_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1013,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Split_pane : {\n pane : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n spawn : Spawn.t;\n }\n -> Created.t view","source":{"file":"lib/libtmux.mli","line":1013,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"struct","qualifiedName":"Libtmux.Command.Split_pane","slug":"libtmux-command-view-type-split_pane"},{"id":"Libtmux.Command.view:type.Split_pane.direction","publicId":"Libtmux.Command.view:type.Split_pane.direction","name":"direction","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1015,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"direction : Geometry.direction;","source":{"file":"lib/libtmux.mli","line":1015,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Split_pane","type":"Geometry.direction","qualifiedName":"Libtmux.Command.direction","slug":"libtmux-command-view-type-split_pane-direction"},{"id":"Libtmux.Command.view:type.Split_pane.pane","publicId":"Libtmux.Command.view:type.Split_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1014,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":1014,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Split_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-view-type-split_pane-pane"},{"id":"Libtmux.Command.view:type.Split_pane.size","publicId":"Libtmux.Command.view:type.Split_pane.size","name":"size","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1016,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"size : Geometry.size option;","source":{"file":"lib/libtmux.mli","line":1016,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Split_pane","type":"Geometry.size option","qualifiedName":"Libtmux.Command.size","slug":"libtmux-command-view-type-split_pane-size"},{"id":"Libtmux.Command.view:type.Split_pane.spawn","publicId":"Libtmux.Command.view:type.Split_pane.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1017,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Spawn.t;","source":{"file":"lib/libtmux.mli","line":1017,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type.Split_pane","type":"Spawn.t","qualifiedName":"Libtmux.Command.spawn","slug":"libtmux-command-view-type-split_pane-spawn"},{"id":"Libtmux.Command.view:type.Wait_for","publicId":"Libtmux.Command.view:type.Wait_for","name":"Wait_for","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":990,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Wait_for : string -> unit view","source":{"file":"lib/libtmux.mli","line":990,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Wait_for","slug":"libtmux-command-view-type-wait_for"},{"id":"Libtmux.Created","publicId":"Libtmux.Created","qualifiedName":"Libtmux.Created","name":"Created","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":779,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" IDs reported by a successful creation reply. Only the requested kind is\n newly created; the other fields can describe existing containers. "],"declarations":[{"kind":"module","text":"module Created : sig\n type t = {\n session : Session.target;\n window : Window.target;\n pane : Pane.target;\n window_index : int;\n pane_index : int;\n }\n (** IDs returned by the creation command, without a second capture. Indexes\n describe the creation response and may change afterward. Only the resource\n requested by the command is newly created: splitting a pane does not\n create the reported session or window. *)\nend","source":{"file":"lib/libtmux.mli","line":779,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"IDs reported by a successful creation reply. Only the requested kind is newly created; the other fields can describe existing containers."},"slug":"libtmux-created"},{"id":"Libtmux.Created.t","publicId":"Libtmux.Created.t","qualifiedName":"Libtmux.Created.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":780,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" IDs returned by the creation command, without a second capture. Indexes\n describe the creation response and may change afterward. Only the resource\n requested by the command is newly created: splitting a pane does not\n create the reported session or window. "],"declarations":[{"kind":"struct","text":"type t = {\n session : Session.target;\n window : Window.target;\n pane : Pane.target;\n window_index : int;\n pane_index : int;\n }","source":{"file":"lib/libtmux.mli","line":780,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Created","doc":{"summary":"IDs returned by the creation command, without a second capture. Indexes describe the creation response and may change afterward. Only the resource requested by the command is newly created: splitting a pane does not create the reported session or window."},"signatures":[{"raw":"type t =\n {\n session: Session.target ;\n window: Window.target ;\n pane: Pane.target ;\n window_index: int ;\n pane_index: int }","params":[]}],"slug":"libtmux-created-t"},{"id":"Libtmux.Created.t.pane","publicId":"Libtmux.Created.t.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":783,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":783,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Created.t","type":"Pane.target","qualifiedName":"Libtmux.Created.pane","slug":"libtmux-created-t-pane"},{"id":"Libtmux.Created.t.pane_index","publicId":"Libtmux.Created.t.pane_index","name":"pane_index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":785,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane_index : int;","source":{"file":"lib/libtmux.mli","line":785,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Created.t","type":"int","qualifiedName":"Libtmux.Created.pane_index","slug":"libtmux-created-t-pane_index"},{"id":"Libtmux.Created.t.session","publicId":"Libtmux.Created.t.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":781,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":781,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Created.t","type":"Session.target","qualifiedName":"Libtmux.Created.session","slug":"libtmux-created-t-session"},{"id":"Libtmux.Created.t.window","publicId":"Libtmux.Created.t.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":782,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : Window.target;","source":{"file":"lib/libtmux.mli","line":782,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Created.t","type":"Window.target","qualifiedName":"Libtmux.Created.window","slug":"libtmux-created-t-window"},{"id":"Libtmux.Created.t.window_index","publicId":"Libtmux.Created.t.window_index","name":"window_index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":784,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_index : int;","source":{"file":"lib/libtmux.mli","line":784,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Created.t","type":"int","qualifiedName":"Libtmux.Created.window_index","slug":"libtmux-created-t-window_index"},{"id":"Libtmux.Endpoint","publicId":"Libtmux.Endpoint","qualifiedName":"Libtmux.Endpoint","name":"Endpoint","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":30,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" An explicit socket description. Constructing an endpoint neither reads the\n environment nor starts a daemon. {!Source.t} adds the observed daemon and\n connection generation. "],"declarations":[{"kind":"module","text":"module Endpoint : sig\n type t\n (** An explicit socket description, independent of the environment. *)\n\n type kind = Named_socket of string | Socket_path of string\n\n val named_socket : string -> t\n (** [named_socket name] describes tmux's [-L name] endpoint. Raises\n [Invalid_argument] if [name] is empty or contains NUL or [/]. *)\n\n val socket_path : string -> t\n (** [socket_path path] describes an absolute [-S path] endpoint. It does not\n check existence or resolve symbolic links. Raises [Invalid_argument] if\n [path] is relative, empty or contains NUL. *)\n\n val kind : t -> kind\n\n val equal : t -> t -> bool\n (** Equality compares descriptions, not server instances or resolved paths. *)\n\n val pp : Format.formatter -> t -> unit\nend","source":{"file":"lib/libtmux.mli","line":30,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"An explicit socket description. Constructing an endpoint neither reads the environment nor starts a daemon. {!Source.t} adds the observed daemon and connection generation."},"slug":"libtmux-endpoint"},{"id":"Libtmux.Endpoint.equal","publicId":"Libtmux.Endpoint.equal","qualifiedName":"Libtmux.Endpoint.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":47,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Equality compares descriptions, not server instances or resolved paths. "],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":47,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Endpoint","doc":{"summary":"Equality compares descriptions, not server instances or resolved paths."},"signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-endpoint-equal"},{"id":"Libtmux.Endpoint.kind","publicId":"Libtmux.Endpoint.kind","qualifiedName":"Libtmux.Endpoint.kind","name":"kind","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":45,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val kind : t -> kind","source":{"file":"lib/libtmux.mli","line":45,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Endpoint","signatures":[{"raw":"val kind : t -> kind","params":[{"name":"arg1","type":"t"}],"returns":"kind"}],"slug":"libtmux-endpoint-kind"},{"id":"Libtmux.Endpoint.kind:type","publicId":"Libtmux.Endpoint.kind:type","qualifiedName":"Libtmux.Endpoint.kind","name":"kind","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":34,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type kind = Named_socket of string | Socket_path of string","source":{"file":"lib/libtmux.mli","line":34,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Endpoint","signatures":[{"raw":"type kind =\n | Named_socket of string \n | Socket_path of string ","params":[]}],"slug":"libtmux-endpoint-kind-type"},{"id":"Libtmux.Endpoint.kind:type.Named_socket","publicId":"Libtmux.Endpoint.kind:type.Named_socket","name":"Named_socket","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":34,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Named_socket of string","source":{"file":"lib/libtmux.mli","line":34,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Endpoint.kind:type","variant":"tuple","qualifiedName":"Libtmux.Endpoint.Named_socket","slug":"libtmux-endpoint-kind-type-named_socket"},{"id":"Libtmux.Endpoint.kind:type.Socket_path","publicId":"Libtmux.Endpoint.kind:type.Socket_path","name":"Socket_path","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":34,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Socket_path of string","source":{"file":"lib/libtmux.mli","line":34,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Endpoint.kind:type","variant":"tuple","qualifiedName":"Libtmux.Endpoint.Socket_path","slug":"libtmux-endpoint-kind-type-socket_path"},{"id":"Libtmux.Endpoint.named_socket","publicId":"Libtmux.Endpoint.named_socket","qualifiedName":"Libtmux.Endpoint.named_socket","name":"named_socket","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":36,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" [named_socket name] describes tmux's [-L name] endpoint. Raises\n [Invalid_argument] if [name] is empty or contains NUL or [/]. "],"declarations":[{"kind":"function","text":"val named_socket : string -> t","source":{"file":"lib/libtmux.mli","line":36,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Endpoint","doc":{"summary":"`named_socket name` describes tmux's `-L name` endpoint. Raises `Invalid_argument` if `name` is empty or contains NUL or `/`."},"signatures":[{"raw":"val named_socket : string -> t","params":[{"name":"arg1","type":"string"}],"returns":"t"}],"slug":"libtmux-endpoint-named_socket"},{"id":"Libtmux.Endpoint.pp","publicId":"Libtmux.Endpoint.pp","qualifiedName":"Libtmux.Endpoint.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":50,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":50,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Endpoint","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-endpoint-pp"},{"id":"Libtmux.Endpoint.socket_path","publicId":"Libtmux.Endpoint.socket_path","qualifiedName":"Libtmux.Endpoint.socket_path","name":"socket_path","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":40,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" [socket_path path] describes an absolute [-S path] endpoint. It does not\n check existence or resolve symbolic links. Raises [Invalid_argument] if\n [path] is relative, empty or contains NUL. "],"declarations":[{"kind":"function","text":"val socket_path : string -> t","source":{"file":"lib/libtmux.mli","line":40,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Endpoint","doc":{"summary":"`socket_path path` describes an absolute `-S path` endpoint. It does not check existence or resolve symbolic links. Raises `Invalid_argument` if `path` is relative, empty or contains NUL."},"signatures":[{"raw":"val socket_path : string -> t","params":[{"name":"arg1","type":"string"}],"returns":"t"}],"slug":"libtmux-endpoint-socket_path"},{"id":"Libtmux.Endpoint.t","publicId":"Libtmux.Endpoint.t","qualifiedName":"Libtmux.Endpoint.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":31,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" An explicit socket description, independent of the environment. "],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":31,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Endpoint","doc":{"summary":"An explicit socket description, independent of the environment."},"signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-endpoint-t"},{"id":"Libtmux.Environment","publicId":"Libtmux.Environment","qualifiedName":"Libtmux.Environment","name":"Environment","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":793,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Environment : sig\n type scope = Global | Session of Session.target\n type value = Value of string | Removed\n type entry = { name : string; value : value }\n\n type t = {\n source : Source.t;\n scope : scope;\n hidden : bool;\n entries : entry Iarray.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }\n (** One captured environment table, in tmux order. [hidden] selects hidden\n variables exclusively. Session tables contain local entries, including\n removal markers; they do not merge the global environment. *)\n\n val lookup : t -> string -> value option\n (** No I/O. [None] means absent from the selected table and visibility.\n [Removed] masks a global value; [Value \"\"] is an explicitly empty value.\n Names must be ASCII identifiers; values preserve non-NUL bytes. *)\nend","source":{"file":"lib/libtmux.mli","line":793,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","slug":"libtmux-environment"},{"id":"Libtmux.Environment.entry","publicId":"Libtmux.Environment.entry","qualifiedName":"Libtmux.Environment.entry","name":"entry","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":796,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type entry = { name : string; value : value }","source":{"file":"lib/libtmux.mli","line":796,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment","signatures":[{"raw":"type entry = {\n name: string ;\n value: value }","params":[]}],"slug":"libtmux-environment-entry"},{"id":"Libtmux.Environment.entry.name","publicId":"Libtmux.Environment.entry.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":796,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":796,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.entry","type":"string","qualifiedName":"Libtmux.Environment.name","slug":"libtmux-environment-entry-name"},{"id":"Libtmux.Environment.entry.value","publicId":"Libtmux.Environment.entry.value","name":"value","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":796,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"value : value","source":{"file":"lib/libtmux.mli","line":796,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.entry","type":"value","qualifiedName":"Libtmux.Environment.value","slug":"libtmux-environment-entry-value"},{"id":"Libtmux.Environment.lookup","publicId":"Libtmux.Environment.lookup","qualifiedName":"Libtmux.Environment.lookup","name":"lookup","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":810,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" No I/O. [None] means absent from the selected table and visibility.\n [Removed] masks a global value; [Value \"\"] is an explicitly empty value.\n Names must be ASCII identifiers; values preserve non-NUL bytes. "],"declarations":[{"kind":"function","text":"val lookup : t -> string -> value option","source":{"file":"lib/libtmux.mli","line":810,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment","doc":{"summary":"No I/O. `None` means absent from the selected table and visibility. `Removed` masks a global value; `Value \"\"` is an explicitly empty value. Names must be ASCII identifiers; values preserve non-NUL bytes."},"signatures":[{"raw":"val lookup : t -> string -> value option","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"value option"}],"slug":"libtmux-environment-lookup"},{"id":"Libtmux.Environment.scope","publicId":"Libtmux.Environment.scope","qualifiedName":"Libtmux.Environment.scope","name":"scope","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":794,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type scope = Global | Session of Session.target","source":{"file":"lib/libtmux.mli","line":794,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment","signatures":[{"raw":"type scope =\n | Global \n | Session of Session.target ","params":[]}],"slug":"libtmux-environment-scope"},{"id":"Libtmux.Environment.scope.Global","publicId":"Libtmux.Environment.scope.Global","name":"Global","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":794,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Global","source":{"file":"lib/libtmux.mli","line":794,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.scope","variant":"unit","qualifiedName":"Libtmux.Environment.Global","slug":"libtmux-environment-scope-global"},{"id":"Libtmux.Environment.scope.Session","publicId":"Libtmux.Environment.scope.Session","name":"Session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":794,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Session of Session.target","source":{"file":"lib/libtmux.mli","line":794,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.scope","variant":"tuple","qualifiedName":"Libtmux.Environment.Session","slug":"libtmux-environment-scope-session"},{"id":"Libtmux.Environment.t","publicId":"Libtmux.Environment.t","qualifiedName":"Libtmux.Environment.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":798,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" One captured environment table, in tmux order. [hidden] selects hidden\n variables exclusively. Session tables contain local entries, including\n removal markers; they do not merge the global environment. "],"declarations":[{"kind":"struct","text":"type t = {\n source : Source.t;\n scope : scope;\n hidden : bool;\n entries : entry Iarray.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }","source":{"file":"lib/libtmux.mli","line":798,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment","doc":{"summary":"One captured environment table, in tmux order. `hidden` selects hidden variables exclusively. Session tables contain local entries, including removal markers; they do not merge the global environment."},"signatures":[{"raw":"type t =\n {\n source: Source.t ;\n scope: scope ;\n hidden: bool ;\n entries: entry Iarray.t ;\n started_at_ns: int64 ;\n finished_at_ns: int64 }","params":[]}],"slug":"libtmux-environment-t"},{"id":"Libtmux.Environment.t.entries","publicId":"Libtmux.Environment.t.entries","name":"entries","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":802,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"entries : entry Iarray.t;","source":{"file":"lib/libtmux.mli","line":802,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.t","type":"entry Iarray.t","qualifiedName":"Libtmux.Environment.entries","slug":"libtmux-environment-t-entries"},{"id":"Libtmux.Environment.t.finished_at_ns","publicId":"Libtmux.Environment.t.finished_at_ns","name":"finished_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":804,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"finished_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":804,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.t","type":"int64","qualifiedName":"Libtmux.Environment.finished_at_ns","slug":"libtmux-environment-t-finished_at_ns"},{"id":"Libtmux.Environment.t.hidden","publicId":"Libtmux.Environment.t.hidden","name":"hidden","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":801,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"hidden : bool;","source":{"file":"lib/libtmux.mli","line":801,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.t","type":"bool","qualifiedName":"Libtmux.Environment.hidden","slug":"libtmux-environment-t-hidden"},{"id":"Libtmux.Environment.t.scope","publicId":"Libtmux.Environment.t.scope","name":"scope","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":800,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scope : scope;","source":{"file":"lib/libtmux.mli","line":800,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.t","type":"scope","qualifiedName":"Libtmux.Environment.scope","slug":"libtmux-environment-t-scope"},{"id":"Libtmux.Environment.t.source","publicId":"Libtmux.Environment.t.source","name":"source","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":799,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"source : Source.t;","source":{"file":"lib/libtmux.mli","line":799,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.t","type":"Source.t","qualifiedName":"Libtmux.Environment.source","slug":"libtmux-environment-t-source"},{"id":"Libtmux.Environment.t.started_at_ns","publicId":"Libtmux.Environment.t.started_at_ns","name":"started_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":803,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"started_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":803,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.t","type":"int64","qualifiedName":"Libtmux.Environment.started_at_ns","slug":"libtmux-environment-t-started_at_ns"},{"id":"Libtmux.Environment.value","publicId":"Libtmux.Environment.value","qualifiedName":"Libtmux.Environment.value","name":"value","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":795,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type value = Value of string | Removed","source":{"file":"lib/libtmux.mli","line":795,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment","signatures":[{"raw":"type value =\n | Value of string \n | Removed ","params":[]}],"slug":"libtmux-environment-value"},{"id":"Libtmux.Environment.value.Removed","publicId":"Libtmux.Environment.value.Removed","name":"Removed","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":795,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Removed","source":{"file":"lib/libtmux.mli","line":795,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.value","variant":"unit","qualifiedName":"Libtmux.Environment.Removed","slug":"libtmux-environment-value-removed"},{"id":"Libtmux.Environment.value.Value","publicId":"Libtmux.Environment.value.Value","name":"Value","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":795,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Value of string","source":{"file":"lib/libtmux.mli","line":795,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Environment.value","variant":"tuple","qualifiedName":"Libtmux.Environment.Value","slug":"libtmux-environment-value-value"},{"id":"Libtmux.Error","publicId":"Libtmux.Error","qualifiedName":"Libtmux.Error","name":"Error","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":56,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Expected input, capture, capability and transport failures. Cancellation\n belongs to the chosen backend and is not converted into an ordinary error.\n"],"declarations":[{"kind":"module","text":"module Error : sig\n type t =\n | Invalid_input of string\n | Malformed_data of string\n | Capture_raced of string\n | Unsupported_version of string\n | Unsupported_binding of string\n | Unsupported_capture_hooks\n | Unsupported of string\n | Closed\n | Disconnected of string\n | Filesystem of { operation : string; message : string }\n | Wrong_domain\n | Busy\n | Capacity of { resource : string; limit : int }\n | Stale_target\n | No_such_entity of { kind : string; id : string }\n | Command_failed of { command : string; message : string }\n | Deadline_exceeded\n | Not_started\n | Outcome_unknown of string\n\n val pp : Format.formatter -> t -> unit\nend","source":{"file":"lib/libtmux.mli","line":56,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Expected input, capture, capability and transport failures. Cancellation belongs to the chosen backend and is not converted into an ordinary error."},"slug":"libtmux-error"},{"id":"Libtmux.Error.pp","publicId":"Libtmux.Error.pp","qualifiedName":"Libtmux.Error.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":78,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":78,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-error-pp"},{"id":"Libtmux.Error.t","publicId":"Libtmux.Error.t","qualifiedName":"Libtmux.Error.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":57,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t =\n | Invalid_input of string\n | Malformed_data of string\n | Capture_raced of string\n | Unsupported_version of string\n | Unsupported_binding of string\n | Unsupported_capture_hooks\n | Unsupported of string\n | Closed\n | Disconnected of string\n | Filesystem of { operation : string; message : string }\n | Wrong_domain\n | Busy\n | Capacity of { resource : string; limit : int }\n | Stale_target\n | No_such_entity of { kind : string; id : string }\n | Command_failed of { command : string; message : string }\n | Deadline_exceeded\n | Not_started\n | Outcome_unknown of string","source":{"file":"lib/libtmux.mli","line":57,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error","signatures":[{"raw":"type t =\n | Invalid_input of string \n | Malformed_data of string \n | Capture_raced of string \n | Unsupported_version of string \n | Unsupported_binding of string \n | Unsupported_capture_hooks \n | Unsupported of string \n | Closed \n | Disconnected of string \n | Filesystem of {\n operation: string ;\n message: string } \n | Wrong_domain \n | Busy \n | Capacity of {\n resource: string ;\n limit: int } \n | Stale_target \n | No_such_entity of {\n kind: string ;\n id: string } \n | Command_failed of {\n command: string ;\n message: string } \n | Deadline_exceeded \n | Not_started \n | Outcome_unknown of string ","params":[]}],"slug":"libtmux-error-t"},{"id":"Libtmux.Error.t.Busy","publicId":"Libtmux.Error.t.Busy","name":"Busy","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":69,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Busy","source":{"file":"lib/libtmux.mli","line":69,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Busy","slug":"libtmux-error-t-busy"},{"id":"Libtmux.Error.t.Capacity","publicId":"Libtmux.Error.t.Capacity","name":"Capacity","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":70,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capacity of { resource : string; limit : int }","source":{"file":"lib/libtmux.mli","line":70,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"struct","qualifiedName":"Libtmux.Error.Capacity","slug":"libtmux-error-t-capacity"},{"id":"Libtmux.Error.t.Capacity.limit","publicId":"Libtmux.Error.t.Capacity.limit","name":"limit","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":70,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"limit : int","source":{"file":"lib/libtmux.mli","line":70,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t.Capacity","type":"int","qualifiedName":"Libtmux.Error.limit","slug":"libtmux-error-t-capacity-limit"},{"id":"Libtmux.Error.t.Capacity.resource","publicId":"Libtmux.Error.t.Capacity.resource","name":"resource","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":70,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"resource : string;","source":{"file":"lib/libtmux.mli","line":70,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t.Capacity","type":"string","qualifiedName":"Libtmux.Error.resource","slug":"libtmux-error-t-capacity-resource"},{"id":"Libtmux.Error.t.Capture_raced","publicId":"Libtmux.Error.t.Capture_raced","name":"Capture_raced","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":60,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture_raced of string","source":{"file":"lib/libtmux.mli","line":60,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Capture_raced","slug":"libtmux-error-t-capture_raced"},{"id":"Libtmux.Error.t.Closed","publicId":"Libtmux.Error.t.Closed","name":"Closed","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":65,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Closed","source":{"file":"lib/libtmux.mli","line":65,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Closed","slug":"libtmux-error-t-closed"},{"id":"Libtmux.Error.t.Command_failed","publicId":"Libtmux.Error.t.Command_failed","name":"Command_failed","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Command_failed of { command : string; message : string }","source":{"file":"lib/libtmux.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"struct","qualifiedName":"Libtmux.Error.Command_failed","slug":"libtmux-error-t-command_failed"},{"id":"Libtmux.Error.t.Command_failed.command","publicId":"Libtmux.Error.t.Command_failed.command","name":"command","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"command : string;","source":{"file":"lib/libtmux.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t.Command_failed","type":"string","qualifiedName":"Libtmux.Error.command","slug":"libtmux-error-t-command_failed-command"},{"id":"Libtmux.Error.t.Command_failed.message","publicId":"Libtmux.Error.t.Command_failed.message","name":"message","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"message : string","source":{"file":"lib/libtmux.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t.Command_failed","type":"string","qualifiedName":"Libtmux.Error.message","slug":"libtmux-error-t-command_failed-message"},{"id":"Libtmux.Error.t.Deadline_exceeded","publicId":"Libtmux.Error.t.Deadline_exceeded","name":"Deadline_exceeded","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":74,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Deadline_exceeded","source":{"file":"lib/libtmux.mli","line":74,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Deadline_exceeded","slug":"libtmux-error-t-deadline_exceeded"},{"id":"Libtmux.Error.t.Disconnected","publicId":"Libtmux.Error.t.Disconnected","name":"Disconnected","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":66,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Disconnected of string","source":{"file":"lib/libtmux.mli","line":66,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Disconnected","slug":"libtmux-error-t-disconnected"},{"id":"Libtmux.Error.t.Filesystem","publicId":"Libtmux.Error.t.Filesystem","name":"Filesystem","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":67,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Filesystem of { operation : string; message : string }","source":{"file":"lib/libtmux.mli","line":67,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"struct","qualifiedName":"Libtmux.Error.Filesystem","slug":"libtmux-error-t-filesystem"},{"id":"Libtmux.Error.t.Filesystem.message","publicId":"Libtmux.Error.t.Filesystem.message","name":"message","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":67,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"message : string","source":{"file":"lib/libtmux.mli","line":67,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t.Filesystem","type":"string","qualifiedName":"Libtmux.Error.message","slug":"libtmux-error-t-filesystem-message"},{"id":"Libtmux.Error.t.Filesystem.operation","publicId":"Libtmux.Error.t.Filesystem.operation","name":"operation","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":67,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"operation : string;","source":{"file":"lib/libtmux.mli","line":67,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t.Filesystem","type":"string","qualifiedName":"Libtmux.Error.operation","slug":"libtmux-error-t-filesystem-operation"},{"id":"Libtmux.Error.t.Invalid_input","publicId":"Libtmux.Error.t.Invalid_input","name":"Invalid_input","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":58,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Invalid_input of string","source":{"file":"lib/libtmux.mli","line":58,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Invalid_input","slug":"libtmux-error-t-invalid_input"},{"id":"Libtmux.Error.t.Malformed_data","publicId":"Libtmux.Error.t.Malformed_data","name":"Malformed_data","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":59,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Malformed_data of string","source":{"file":"lib/libtmux.mli","line":59,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Malformed_data","slug":"libtmux-error-t-malformed_data"},{"id":"Libtmux.Error.t.No_such_entity","publicId":"Libtmux.Error.t.No_such_entity","name":"No_such_entity","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":72,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| No_such_entity of { kind : string; id : string }","source":{"file":"lib/libtmux.mli","line":72,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"struct","qualifiedName":"Libtmux.Error.No_such_entity","slug":"libtmux-error-t-no_such_entity"},{"id":"Libtmux.Error.t.No_such_entity.id","publicId":"Libtmux.Error.t.No_such_entity.id","name":"id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":72,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"id : string","source":{"file":"lib/libtmux.mli","line":72,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t.No_such_entity","type":"string","qualifiedName":"Libtmux.Error.id","slug":"libtmux-error-t-no_such_entity-id"},{"id":"Libtmux.Error.t.No_such_entity.kind","publicId":"Libtmux.Error.t.No_such_entity.kind","name":"kind","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":72,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"kind : string;","source":{"file":"lib/libtmux.mli","line":72,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t.No_such_entity","type":"string","qualifiedName":"Libtmux.Error.kind","slug":"libtmux-error-t-no_such_entity-kind"},{"id":"Libtmux.Error.t.Not_started","publicId":"Libtmux.Error.t.Not_started","name":"Not_started","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":75,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Not_started","source":{"file":"lib/libtmux.mli","line":75,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Not_started","slug":"libtmux-error-t-not_started"},{"id":"Libtmux.Error.t.Outcome_unknown","publicId":"Libtmux.Error.t.Outcome_unknown","name":"Outcome_unknown","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":76,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Outcome_unknown of string","source":{"file":"lib/libtmux.mli","line":76,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Outcome_unknown","slug":"libtmux-error-t-outcome_unknown"},{"id":"Libtmux.Error.t.Stale_target","publicId":"Libtmux.Error.t.Stale_target","name":"Stale_target","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":71,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Stale_target","source":{"file":"lib/libtmux.mli","line":71,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Stale_target","slug":"libtmux-error-t-stale_target"},{"id":"Libtmux.Error.t.Unsupported","publicId":"Libtmux.Error.t.Unsupported","name":"Unsupported","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":64,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported of string","source":{"file":"lib/libtmux.mli","line":64,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Unsupported","slug":"libtmux-error-t-unsupported"},{"id":"Libtmux.Error.t.Unsupported_binding","publicId":"Libtmux.Error.t.Unsupported_binding","name":"Unsupported_binding","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":62,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported_binding of string","source":{"file":"lib/libtmux.mli","line":62,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Unsupported_binding","slug":"libtmux-error-t-unsupported_binding"},{"id":"Libtmux.Error.t.Unsupported_capture_hooks","publicId":"Libtmux.Error.t.Unsupported_capture_hooks","name":"Unsupported_capture_hooks","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":63,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported_capture_hooks","source":{"file":"lib/libtmux.mli","line":63,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Unsupported_capture_hooks","slug":"libtmux-error-t-unsupported_capture_hooks"},{"id":"Libtmux.Error.t.Unsupported_version","publicId":"Libtmux.Error.t.Unsupported_version","name":"Unsupported_version","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":61,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported_version of string","source":{"file":"lib/libtmux.mli","line":61,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Unsupported_version","slug":"libtmux-error-t-unsupported_version"},{"id":"Libtmux.Error.t.Wrong_domain","publicId":"Libtmux.Error.t.Wrong_domain","name":"Wrong_domain","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":68,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Wrong_domain","source":{"file":"lib/libtmux.mli","line":68,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Wrong_domain","slug":"libtmux-error-t-wrong_domain"},{"id":"Libtmux.Expr","publicId":"Libtmux.Expr","qualifiedName":"Libtmux.Expr","name":"Expr","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":574,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Inspectable predicates whose entity and operand types are checked by the\n compiler. Combine native closures separately with [Seq.filter]. Evaluation\n follows captured relationships without acquisition or hidden caches. "],"declarations":[{"kind":"module","text":"module Expr : sig\n type 'entity t\n\n val all : 'a t list -> 'a t\n (** Boolean conjunction; the empty conjunction is true. *)\n\n val any : 'a t list -> 'a t\n (** Boolean disjunction; the empty disjunction is false. *)\n\n val not_ : 'a t -> 'a t\n\n module Bool : sig\n val equal : ('a, bool) Field.t -> bool -> 'a t\n val is_true : ('a, bool) Field.t -> 'a t\n val is_false : ('a, bool) Field.t -> 'a t\n end\n\n module Int : sig\n val equal : ('a, int) Field.t -> int -> 'a t\n val lt : ('a, int) Field.t -> int -> 'a t\n val le : ('a, int) Field.t -> int -> 'a t\n val gt : ('a, int) Field.t -> int -> 'a t\n val ge : ('a, int) Field.t -> int -> 'a t\n val is_in : ('a, int) Field.t -> int list -> 'a t\n end\n\n module Text : sig\n val equal : ('a, string) Field.t -> string -> 'a t\n val starts_with : ('a, string) Field.t -> string -> 'a t\n val ends_with : ('a, string) Field.t -> string -> 'a t\n val contains : ('a, string) Field.t -> string -> 'a t\n\n val is_in : ('a, string) Field.t -> string list -> 'a t\n (** Comparisons use exact bytes, without case folding or normalization. The\n empty substring matches every string. *)\n end\n\n module Rel : sig\n val any : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n val all : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n\n val none : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n (** On empty relations, [any] is false; [all] and [none] are true. One child\n must satisfy the complete nested expression. *)\n\n val is : ('a, 'b) Relation.One.t -> 'b t -> 'a t\n val exists : ('a, 'b) Relation.Optional.t -> 'b t -> 'a t\n val is_absent : ('a, 'b) Relation.Optional.t -> 'a t\n end\n\n val compile : 'a t -> 'a -> bool\n (** Prepare a reusable predicate. Compilation and evaluation perform no I/O.\n *)\n\n val pp : Format.formatter -> 'a t -> unit\n val describe : 'a t -> string\n\n type _ comparison =\n | Bool_equal : bool -> bool comparison\n | Int_equal : int -> int comparison\n | Int_lt : int -> int comparison\n | Int_le : int -> int comparison\n | Int_gt : int -> int comparison\n | Int_ge : int -> int comparison\n | Int_in : int list -> int comparison\n | Text_equal : string -> string comparison\n | Text_starts_with : string -> string comparison\n | Text_ends_with : string -> string comparison\n | Text_contains : string -> string comparison\n | Text_in : string list -> string comparison\n\n type 'a view =\n | Compare : ('a, 'v) Field.t * 'v comparison -> 'a view\n | All of 'a t list\n | Any of 'a t list\n | Not of 'a t\n | Related_any : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_all : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_none : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_one : ('a, 'b) Relation.One.t * 'b t -> 'a view\n | Related_optional : ('a, 'b) Relation.Optional.t * 'b t -> 'a view\n | Absent : ('a, 'b) Relation.Optional.t -> 'a view\n\n val view : 'a t -> 'a view\n (** Typed read-only inspection for codecs and planners. A view cannot add\n custom accessors or closures to an expression. *)\nend","source":{"file":"lib/libtmux.mli","line":574,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Inspectable predicates whose entity and operand types are checked by the compiler. Combine native closures separately with `Seq.filter`. Evaluation follows captured relationships without acquisition or hidden caches."},"slug":"libtmux-expr"},{"id":"Libtmux.Expr.Bool","publicId":"Libtmux.Expr.Bool","qualifiedName":"Libtmux.Expr.Bool","name":"Bool","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":585,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Bool : sig\n val equal : ('a, bool) Field.t -> bool -> 'a t\n val is_true : ('a, bool) Field.t -> 'a t\n val is_false : ('a, bool) Field.t -> 'a t\n end","source":{"file":"lib/libtmux.mli","line":585,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","slug":"libtmux-expr-bool"},{"id":"Libtmux.Expr.Bool.equal","publicId":"Libtmux.Expr.Bool.equal","qualifiedName":"Libtmux.Expr.Bool.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":586,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : ('a, bool) Field.t -> bool -> 'a t","source":{"file":"lib/libtmux.mli","line":586,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Bool","signatures":[{"raw":"val equal : ('a, bool) Field.t -> bool -> 'a t","params":[{"name":"arg1","type":"('a, bool) Field.t"},{"name":"arg2","type":"bool"}],"returns":"'a t"}],"slug":"libtmux-expr-bool-equal"},{"id":"Libtmux.Expr.Bool.is_false","publicId":"Libtmux.Expr.Bool.is_false","qualifiedName":"Libtmux.Expr.Bool.is_false","name":"is_false","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":588,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is_false : ('a, bool) Field.t -> 'a t","source":{"file":"lib/libtmux.mli","line":588,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Bool","signatures":[{"raw":"val is_false : ('a, bool) Field.t -> 'a t","params":[{"name":"arg1","type":"('a, bool) Field.t"}],"returns":"'a t"}],"slug":"libtmux-expr-bool-is_false"},{"id":"Libtmux.Expr.Bool.is_true","publicId":"Libtmux.Expr.Bool.is_true","qualifiedName":"Libtmux.Expr.Bool.is_true","name":"is_true","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":587,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is_true : ('a, bool) Field.t -> 'a t","source":{"file":"lib/libtmux.mli","line":587,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Bool","signatures":[{"raw":"val is_true : ('a, bool) Field.t -> 'a t","params":[{"name":"arg1","type":"('a, bool) Field.t"}],"returns":"'a t"}],"slug":"libtmux-expr-bool-is_true"},{"id":"Libtmux.Expr.Int","publicId":"Libtmux.Expr.Int","qualifiedName":"Libtmux.Expr.Int","name":"Int","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":591,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Int : sig\n val equal : ('a, int) Field.t -> int -> 'a t\n val lt : ('a, int) Field.t -> int -> 'a t\n val le : ('a, int) Field.t -> int -> 'a t\n val gt : ('a, int) Field.t -> int -> 'a t\n val ge : ('a, int) Field.t -> int -> 'a t\n val is_in : ('a, int) Field.t -> int list -> 'a t\n end","source":{"file":"lib/libtmux.mli","line":591,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","slug":"libtmux-expr-int"},{"id":"Libtmux.Expr.Int.equal","publicId":"Libtmux.Expr.Int.equal","qualifiedName":"Libtmux.Expr.Int.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":592,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : ('a, int) Field.t -> int -> 'a t","source":{"file":"lib/libtmux.mli","line":592,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val equal : ('a, int) Field.t -> int -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int"}],"returns":"'a t"}],"slug":"libtmux-expr-int-equal"},{"id":"Libtmux.Expr.Int.ge","publicId":"Libtmux.Expr.Int.ge","qualifiedName":"Libtmux.Expr.Int.ge","name":"ge","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":596,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val ge : ('a, int) Field.t -> int -> 'a t","source":{"file":"lib/libtmux.mli","line":596,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val ge : ('a, int) Field.t -> int -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int"}],"returns":"'a t"}],"slug":"libtmux-expr-int-ge"},{"id":"Libtmux.Expr.Int.gt","publicId":"Libtmux.Expr.Int.gt","qualifiedName":"Libtmux.Expr.Int.gt","name":"gt","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":595,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val gt : ('a, int) Field.t -> int -> 'a t","source":{"file":"lib/libtmux.mli","line":595,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val gt : ('a, int) Field.t -> int -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int"}],"returns":"'a t"}],"slug":"libtmux-expr-int-gt"},{"id":"Libtmux.Expr.Int.is_in","publicId":"Libtmux.Expr.Int.is_in","qualifiedName":"Libtmux.Expr.Int.is_in","name":"is_in","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":597,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is_in : ('a, int) Field.t -> int list -> 'a t","source":{"file":"lib/libtmux.mli","line":597,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val is_in : ('a, int) Field.t -> int list -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int list"}],"returns":"'a t"}],"slug":"libtmux-expr-int-is_in"},{"id":"Libtmux.Expr.Int.le","publicId":"Libtmux.Expr.Int.le","qualifiedName":"Libtmux.Expr.Int.le","name":"le","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":594,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val le : ('a, int) Field.t -> int -> 'a t","source":{"file":"lib/libtmux.mli","line":594,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val le : ('a, int) Field.t -> int -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int"}],"returns":"'a t"}],"slug":"libtmux-expr-int-le"},{"id":"Libtmux.Expr.Int.lt","publicId":"Libtmux.Expr.Int.lt","qualifiedName":"Libtmux.Expr.Int.lt","name":"lt","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":593,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val lt : ('a, int) Field.t -> int -> 'a t","source":{"file":"lib/libtmux.mli","line":593,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val lt : ('a, int) Field.t -> int -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int"}],"returns":"'a t"}],"slug":"libtmux-expr-int-lt"},{"id":"Libtmux.Expr.Rel","publicId":"Libtmux.Expr.Rel","qualifiedName":"Libtmux.Expr.Rel","name":"Rel","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":611,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Rel : sig\n val any : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n val all : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n\n val none : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n (** On empty relations, [any] is false; [all] and [none] are true. One child\n must satisfy the complete nested expression. *)\n\n val is : ('a, 'b) Relation.One.t -> 'b t -> 'a t\n val exists : ('a, 'b) Relation.Optional.t -> 'b t -> 'a t\n val is_absent : ('a, 'b) Relation.Optional.t -> 'a t\n end","source":{"file":"lib/libtmux.mli","line":611,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","slug":"libtmux-expr-rel"},{"id":"Libtmux.Expr.Rel.all","publicId":"Libtmux.Expr.Rel.all","qualifiedName":"Libtmux.Expr.Rel.all","name":"all","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":613,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val all : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","source":{"file":"lib/libtmux.mli","line":613,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Rel","signatures":[{"raw":"val all : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.Many.t"},{"name":"arg2","type":"'b t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-all"},{"id":"Libtmux.Expr.Rel.any","publicId":"Libtmux.Expr.Rel.any","qualifiedName":"Libtmux.Expr.Rel.any","name":"any","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":612,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val any : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","source":{"file":"lib/libtmux.mli","line":612,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Rel","signatures":[{"raw":"val any : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.Many.t"},{"name":"arg2","type":"'b t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-any"},{"id":"Libtmux.Expr.Rel.exists","publicId":"Libtmux.Expr.Rel.exists","qualifiedName":"Libtmux.Expr.Rel.exists","name":"exists","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":620,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val exists : ('a, 'b) Relation.Optional.t -> 'b t -> 'a t","source":{"file":"lib/libtmux.mli","line":620,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Rel","signatures":[{"raw":"val exists : ('a, 'b) Relation.Optional.t -> 'b t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.Optional.t"},{"name":"arg2","type":"'b t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-exists"},{"id":"Libtmux.Expr.Rel.is","publicId":"Libtmux.Expr.Rel.is","qualifiedName":"Libtmux.Expr.Rel.is","name":"is","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":619,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is : ('a, 'b) Relation.One.t -> 'b t -> 'a t","source":{"file":"lib/libtmux.mli","line":619,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Rel","signatures":[{"raw":"val is : ('a, 'b) Relation.One.t -> 'b t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.One.t"},{"name":"arg2","type":"'b t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-is"},{"id":"Libtmux.Expr.Rel.is_absent","publicId":"Libtmux.Expr.Rel.is_absent","qualifiedName":"Libtmux.Expr.Rel.is_absent","name":"is_absent","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":621,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is_absent : ('a, 'b) Relation.Optional.t -> 'a t","source":{"file":"lib/libtmux.mli","line":621,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Rel","signatures":[{"raw":"val is_absent : ('a, 'b) Relation.Optional.t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.Optional.t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-is_absent"},{"id":"Libtmux.Expr.Rel.none","publicId":"Libtmux.Expr.Rel.none","qualifiedName":"Libtmux.Expr.Rel.none","name":"none","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":615,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" On empty relations, [any] is false; [all] and [none] are true. One child\n must satisfy the complete nested expression. "],"declarations":[{"kind":"function","text":"val none : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","source":{"file":"lib/libtmux.mli","line":615,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Rel","doc":{"summary":"On empty relations, `any` is false; `all` and `none` are true. One child must satisfy the complete nested expression."},"signatures":[{"raw":"val none : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.Many.t"},{"name":"arg2","type":"'b t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-none"},{"id":"Libtmux.Expr.Text","publicId":"Libtmux.Expr.Text","qualifiedName":"Libtmux.Expr.Text","name":"Text","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":600,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Text : sig\n val equal : ('a, string) Field.t -> string -> 'a t\n val starts_with : ('a, string) Field.t -> string -> 'a t\n val ends_with : ('a, string) Field.t -> string -> 'a t\n val contains : ('a, string) Field.t -> string -> 'a t\n\n val is_in : ('a, string) Field.t -> string list -> 'a t\n (** Comparisons use exact bytes, without case folding or normalization. The\n empty substring matches every string. *)\n end","source":{"file":"lib/libtmux.mli","line":600,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","slug":"libtmux-expr-text"},{"id":"Libtmux.Expr.Text.contains","publicId":"Libtmux.Expr.Text.contains","qualifiedName":"Libtmux.Expr.Text.contains","name":"contains","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":604,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val contains : ('a, string) Field.t -> string -> 'a t","source":{"file":"lib/libtmux.mli","line":604,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Text","signatures":[{"raw":"val contains : ('a, string) Field.t -> string -> 'a t","params":[{"name":"arg1","type":"('a, string) Field.t"},{"name":"arg2","type":"string"}],"returns":"'a t"}],"slug":"libtmux-expr-text-contains"},{"id":"Libtmux.Expr.Text.ends_with","publicId":"Libtmux.Expr.Text.ends_with","qualifiedName":"Libtmux.Expr.Text.ends_with","name":"ends_with","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":603,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val ends_with : ('a, string) Field.t -> string -> 'a t","source":{"file":"lib/libtmux.mli","line":603,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Text","signatures":[{"raw":"val ends_with : ('a, string) Field.t -> string -> 'a t","params":[{"name":"arg1","type":"('a, string) Field.t"},{"name":"arg2","type":"string"}],"returns":"'a t"}],"slug":"libtmux-expr-text-ends_with"},{"id":"Libtmux.Expr.Text.equal","publicId":"Libtmux.Expr.Text.equal","qualifiedName":"Libtmux.Expr.Text.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":601,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : ('a, string) Field.t -> string -> 'a t","source":{"file":"lib/libtmux.mli","line":601,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Text","signatures":[{"raw":"val equal : ('a, string) Field.t -> string -> 'a t","params":[{"name":"arg1","type":"('a, string) Field.t"},{"name":"arg2","type":"string"}],"returns":"'a t"}],"slug":"libtmux-expr-text-equal"},{"id":"Libtmux.Expr.Text.is_in","publicId":"Libtmux.Expr.Text.is_in","qualifiedName":"Libtmux.Expr.Text.is_in","name":"is_in","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":606,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Comparisons use exact bytes, without case folding or normalization. The\n empty substring matches every string. "],"declarations":[{"kind":"function","text":"val is_in : ('a, string) Field.t -> string list -> 'a t","source":{"file":"lib/libtmux.mli","line":606,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Text","doc":{"summary":"Comparisons use exact bytes, without case folding or normalization. The empty substring matches every string."},"signatures":[{"raw":"val is_in : ('a, string) Field.t -> string list -> 'a t","params":[{"name":"arg1","type":"('a, string) Field.t"},{"name":"arg2","type":"string list"}],"returns":"'a t"}],"slug":"libtmux-expr-text-is_in"},{"id":"Libtmux.Expr.Text.starts_with","publicId":"Libtmux.Expr.Text.starts_with","qualifiedName":"Libtmux.Expr.Text.starts_with","name":"starts_with","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":602,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val starts_with : ('a, string) Field.t -> string -> 'a t","source":{"file":"lib/libtmux.mli","line":602,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.Text","signatures":[{"raw":"val starts_with : ('a, string) Field.t -> string -> 'a t","params":[{"name":"arg1","type":"('a, string) Field.t"},{"name":"arg2","type":"string"}],"returns":"'a t"}],"slug":"libtmux-expr-text-starts_with"},{"id":"Libtmux.Expr.all","publicId":"Libtmux.Expr.all","qualifiedName":"Libtmux.Expr.all","name":"all","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":577,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Boolean conjunction; the empty conjunction is true. "],"declarations":[{"kind":"function","text":"val all : 'a t list -> 'a t","source":{"file":"lib/libtmux.mli","line":577,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","doc":{"summary":"Boolean conjunction; the empty conjunction is true."},"signatures":[{"raw":"val all : 'a t list -> 'a t","params":[{"name":"arg1","type":"'a t list"}],"returns":"'a t"}],"slug":"libtmux-expr-all"},{"id":"Libtmux.Expr.any","publicId":"Libtmux.Expr.any","qualifiedName":"Libtmux.Expr.any","name":"any","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":580,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Boolean disjunction; the empty disjunction is false. "],"declarations":[{"kind":"function","text":"val any : 'a t list -> 'a t","source":{"file":"lib/libtmux.mli","line":580,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","doc":{"summary":"Boolean disjunction; the empty disjunction is false."},"signatures":[{"raw":"val any : 'a t list -> 'a t","params":[{"name":"arg1","type":"'a t list"}],"returns":"'a t"}],"slug":"libtmux-expr-any"},{"id":"Libtmux.Expr.comparison","publicId":"Libtmux.Expr.comparison","qualifiedName":"Libtmux.Expr.comparison","name":"comparison","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":631,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type _ comparison =\n | Bool_equal : bool -> bool comparison\n | Int_equal : int -> int comparison\n | Int_lt : int -> int comparison\n | Int_le : int -> int comparison\n | Int_gt : int -> int comparison\n | Int_ge : int -> int comparison\n | Int_in : int list -> int comparison\n | Text_equal : string -> string comparison\n | Text_starts_with : string -> string comparison\n | Text_ends_with : string -> string comparison\n | Text_contains : string -> string comparison\n | Text_in : string list -> string comparison","source":{"file":"lib/libtmux.mli","line":631,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"type _ comparison =\n | Bool_equal: bool -> bool comparison \n | Int_equal: int -> int comparison \n | Int_lt: int -> int comparison \n | Int_le: int -> int comparison \n | Int_gt: int -> int comparison \n | Int_ge: int -> int comparison \n | Int_in: int list -> int comparison \n | Text_equal: string -> string comparison \n | Text_starts_with: string -> string comparison \n | Text_ends_with: string -> string comparison \n | Text_contains: string -> string comparison \n | Text_in: string list -> string comparison ","params":[]}],"slug":"libtmux-expr-comparison"},{"id":"Libtmux.Expr.comparison.Bool_equal","publicId":"Libtmux.Expr.comparison.Bool_equal","name":"Bool_equal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":632,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Bool_equal : bool -> bool comparison","source":{"file":"lib/libtmux.mli","line":632,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Bool_equal","slug":"libtmux-expr-comparison-bool_equal"},{"id":"Libtmux.Expr.comparison.Int_equal","publicId":"Libtmux.Expr.comparison.Int_equal","name":"Int_equal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":633,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_equal : int -> int comparison","source":{"file":"lib/libtmux.mli","line":633,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_equal","slug":"libtmux-expr-comparison-int_equal"},{"id":"Libtmux.Expr.comparison.Int_ge","publicId":"Libtmux.Expr.comparison.Int_ge","name":"Int_ge","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":637,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_ge : int -> int comparison","source":{"file":"lib/libtmux.mli","line":637,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_ge","slug":"libtmux-expr-comparison-int_ge"},{"id":"Libtmux.Expr.comparison.Int_gt","publicId":"Libtmux.Expr.comparison.Int_gt","name":"Int_gt","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":636,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_gt : int -> int comparison","source":{"file":"lib/libtmux.mli","line":636,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_gt","slug":"libtmux-expr-comparison-int_gt"},{"id":"Libtmux.Expr.comparison.Int_in","publicId":"Libtmux.Expr.comparison.Int_in","name":"Int_in","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":638,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_in : int list -> int comparison","source":{"file":"lib/libtmux.mli","line":638,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_in","slug":"libtmux-expr-comparison-int_in"},{"id":"Libtmux.Expr.comparison.Int_le","publicId":"Libtmux.Expr.comparison.Int_le","name":"Int_le","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":635,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_le : int -> int comparison","source":{"file":"lib/libtmux.mli","line":635,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_le","slug":"libtmux-expr-comparison-int_le"},{"id":"Libtmux.Expr.comparison.Int_lt","publicId":"Libtmux.Expr.comparison.Int_lt","name":"Int_lt","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":634,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_lt : int -> int comparison","source":{"file":"lib/libtmux.mli","line":634,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_lt","slug":"libtmux-expr-comparison-int_lt"},{"id":"Libtmux.Expr.comparison.Text_contains","publicId":"Libtmux.Expr.comparison.Text_contains","name":"Text_contains","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":642,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text_contains : string -> string comparison","source":{"file":"lib/libtmux.mli","line":642,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Text_contains","slug":"libtmux-expr-comparison-text_contains"},{"id":"Libtmux.Expr.comparison.Text_ends_with","publicId":"Libtmux.Expr.comparison.Text_ends_with","name":"Text_ends_with","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":641,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text_ends_with : string -> string comparison","source":{"file":"lib/libtmux.mli","line":641,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Text_ends_with","slug":"libtmux-expr-comparison-text_ends_with"},{"id":"Libtmux.Expr.comparison.Text_equal","publicId":"Libtmux.Expr.comparison.Text_equal","name":"Text_equal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":639,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text_equal : string -> string comparison","source":{"file":"lib/libtmux.mli","line":639,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Text_equal","slug":"libtmux-expr-comparison-text_equal"},{"id":"Libtmux.Expr.comparison.Text_in","publicId":"Libtmux.Expr.comparison.Text_in","name":"Text_in","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":643,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text_in : string list -> string comparison","source":{"file":"lib/libtmux.mli","line":643,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Text_in","slug":"libtmux-expr-comparison-text_in"},{"id":"Libtmux.Expr.comparison.Text_starts_with","publicId":"Libtmux.Expr.comparison.Text_starts_with","name":"Text_starts_with","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":640,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text_starts_with : string -> string comparison","source":{"file":"lib/libtmux.mli","line":640,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Text_starts_with","slug":"libtmux-expr-comparison-text_starts_with"},{"id":"Libtmux.Expr.compile","publicId":"Libtmux.Expr.compile","qualifiedName":"Libtmux.Expr.compile","name":"compile","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":624,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Prepare a reusable predicate. Compilation and evaluation perform no I/O.\n "],"declarations":[{"kind":"function","text":"val compile : 'a t -> 'a -> bool","source":{"file":"lib/libtmux.mli","line":624,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","doc":{"summary":"Prepare a reusable predicate. Compilation and evaluation perform no I/O."},"signatures":[{"raw":"val compile : 'a t -> 'a -> bool","params":[{"name":"arg1","type":"'a t"},{"name":"arg2","type":"'a"}],"returns":"bool"}],"slug":"libtmux-expr-compile"},{"id":"Libtmux.Expr.describe","publicId":"Libtmux.Expr.describe","qualifiedName":"Libtmux.Expr.describe","name":"describe","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":629,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val describe : 'a t -> string","source":{"file":"lib/libtmux.mli","line":629,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"val describe : 'a t -> string","params":[{"name":"arg1","type":"'a t"}],"returns":"string"}],"slug":"libtmux-expr-describe"},{"id":"Libtmux.Expr.not_","publicId":"Libtmux.Expr.not_","qualifiedName":"Libtmux.Expr.not_","name":"not_","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":583,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val not_ : 'a t -> 'a t","source":{"file":"lib/libtmux.mli","line":583,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"val not_ : 'a t -> 'a t","params":[{"name":"arg1","type":"'a t"}],"returns":"'a t"}],"slug":"libtmux-expr-not_"},{"id":"Libtmux.Expr.pp","publicId":"Libtmux.Expr.pp","qualifiedName":"Libtmux.Expr.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":628,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> 'a t -> unit","source":{"file":"lib/libtmux.mli","line":628,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"val pp : Format.formatter -> 'a t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"'a t"}],"returns":"unit"}],"slug":"libtmux-expr-pp"},{"id":"Libtmux.Expr.t","publicId":"Libtmux.Expr.t","qualifiedName":"Libtmux.Expr.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":575,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type 'entity t","source":{"file":"lib/libtmux.mli","line":575,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"type 'entity t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-expr-t"},{"id":"Libtmux.Expr.view","publicId":"Libtmux.Expr.view","qualifiedName":"Libtmux.Expr.view","name":"view","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":657,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Typed read-only inspection for codecs and planners. A view cannot add\n custom accessors or closures to an expression. "],"declarations":[{"kind":"function","text":"val view : 'a t -> 'a view","source":{"file":"lib/libtmux.mli","line":657,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","doc":{"summary":"Typed read-only inspection for codecs and planners. A view cannot add custom accessors or closures to an expression."},"signatures":[{"raw":"val view : 'a t -> 'a view","params":[{"name":"arg1","type":"'a t"}],"returns":"'a view"}],"slug":"libtmux-expr-view"},{"id":"Libtmux.Expr.view:type","publicId":"Libtmux.Expr.view:type","qualifiedName":"Libtmux.Expr.view","name":"view","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":645,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type 'a view =\n | Compare : ('a, 'v) Field.t * 'v comparison -> 'a view\n | All of 'a t list\n | Any of 'a t list\n | Not of 'a t\n | Related_any : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_all : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_none : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_one : ('a, 'b) Relation.One.t * 'b t -> 'a view\n | Related_optional : ('a, 'b) Relation.Optional.t * 'b t -> 'a view\n | Absent : ('a, 'b) Relation.Optional.t -> 'a view","source":{"file":"lib/libtmux.mli","line":645,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"type 'a view =\n | Compare: ('a, 'v) Field.t * 'v comparison -> 'a view \n | All of 'a t list \n | Any of 'a t list \n | Not of 'a t \n | Related_any: ('a, 'b) Relation.Many.t * 'b t -> 'a view \n | Related_all: ('a, 'b) Relation.Many.t * 'b t -> 'a view \n | Related_none: ('a, 'b) Relation.Many.t * 'b t -> 'a view \n | Related_one: ('a, 'b) Relation.One.t * 'b t -> 'a view \n | Related_optional: ('a, 'b) Relation.Optional.t * 'b t -> 'a view \n | Absent: ('a, 'b) Relation.Optional.t -> 'a view ","params":[]}],"slug":"libtmux-expr-view-type"},{"id":"Libtmux.Expr.view:type.Absent","publicId":"Libtmux.Expr.view:type.Absent","name":"Absent","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":655,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Absent : ('a, 'b) Relation.Optional.t -> 'a view","source":{"file":"lib/libtmux.mli","line":655,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Absent","slug":"libtmux-expr-view-type-absent"},{"id":"Libtmux.Expr.view:type.All","publicId":"Libtmux.Expr.view:type.All","name":"All","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":647,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| All of 'a t list","source":{"file":"lib/libtmux.mli","line":647,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.All","slug":"libtmux-expr-view-type-all"},{"id":"Libtmux.Expr.view:type.Any","publicId":"Libtmux.Expr.view:type.Any","name":"Any","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":648,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Any of 'a t list","source":{"file":"lib/libtmux.mli","line":648,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Any","slug":"libtmux-expr-view-type-any"},{"id":"Libtmux.Expr.view:type.Compare","publicId":"Libtmux.Expr.view:type.Compare","name":"Compare","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":646,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Compare : ('a, 'v) Field.t * 'v comparison -> 'a view","source":{"file":"lib/libtmux.mli","line":646,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Compare","slug":"libtmux-expr-view-type-compare"},{"id":"Libtmux.Expr.view:type.Not","publicId":"Libtmux.Expr.view:type.Not","name":"Not","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":649,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Not of 'a t","source":{"file":"lib/libtmux.mli","line":649,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Not","slug":"libtmux-expr-view-type-not"},{"id":"Libtmux.Expr.view:type.Related_all","publicId":"Libtmux.Expr.view:type.Related_all","name":"Related_all","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":651,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Related_all : ('a, 'b) Relation.Many.t * 'b t -> 'a view","source":{"file":"lib/libtmux.mli","line":651,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Related_all","slug":"libtmux-expr-view-type-related_all"},{"id":"Libtmux.Expr.view:type.Related_any","publicId":"Libtmux.Expr.view:type.Related_any","name":"Related_any","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":650,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Related_any : ('a, 'b) Relation.Many.t * 'b t -> 'a view","source":{"file":"lib/libtmux.mli","line":650,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Related_any","slug":"libtmux-expr-view-type-related_any"},{"id":"Libtmux.Expr.view:type.Related_none","publicId":"Libtmux.Expr.view:type.Related_none","name":"Related_none","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":652,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Related_none : ('a, 'b) Relation.Many.t * 'b t -> 'a view","source":{"file":"lib/libtmux.mli","line":652,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Related_none","slug":"libtmux-expr-view-type-related_none"},{"id":"Libtmux.Expr.view:type.Related_one","publicId":"Libtmux.Expr.view:type.Related_one","name":"Related_one","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":653,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Related_one : ('a, 'b) Relation.One.t * 'b t -> 'a view","source":{"file":"lib/libtmux.mli","line":653,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Related_one","slug":"libtmux-expr-view-type-related_one"},{"id":"Libtmux.Expr.view:type.Related_optional","publicId":"Libtmux.Expr.view:type.Related_optional","name":"Related_optional","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":654,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Related_optional : ('a, 'b) Relation.Optional.t * 'b t -> 'a view","source":{"file":"lib/libtmux.mli","line":654,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Related_optional","slug":"libtmux-expr-view-type-related_optional"},{"id":"Libtmux.Field","publicId":"Libtmux.Field","qualifiedName":"Libtmux.Field","name":"Field","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":143,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Sealed scalar descriptors carrying entity and value types. Descriptors read\n captured data and provide trusted identities for {!Expr} values. Use\n {!Relation} for graph edges. "],"declarations":[{"kind":"module","text":"module Field : sig\n type _ kind = Bool : bool kind | Int : int kind | Text : string kind\n type ('entity, 'value) t\n type 'entity packed = Pack : ('entity, 'value) t -> 'entity packed\n\n val name : ('entity, 'value) t -> string\n val kind : ('entity, 'value) t -> 'value kind\n\n val get : ('entity, 'value) t -> 'entity -> 'value\n (** Canonical descriptors are sealed. Accessing a field reads captured data.\n *)\nend","source":{"file":"lib/libtmux.mli","line":143,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Sealed scalar descriptors carrying entity and value types. Descriptors read captured data and provide trusted identities for {!Expr} values. Use {!Relation} for graph edges."},"slug":"libtmux-field"},{"id":"Libtmux.Field.get","publicId":"Libtmux.Field.get","qualifiedName":"Libtmux.Field.get","name":"get","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":151,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Canonical descriptors are sealed. Accessing a field reads captured data.\n "],"declarations":[{"kind":"function","text":"val get : ('entity, 'value) t -> 'entity -> 'value","source":{"file":"lib/libtmux.mli","line":151,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Field","doc":{"summary":"Canonical descriptors are sealed. Accessing a field reads captured data."},"signatures":[{"raw":"val get : ('entity, 'value) t -> 'entity -> 'value","params":[{"name":"arg1","type":"('entity, 'value) t"},{"name":"arg2","type":"'entity"}],"returns":"'value"}],"slug":"libtmux-field-get"},{"id":"Libtmux.Field.kind","publicId":"Libtmux.Field.kind","qualifiedName":"Libtmux.Field.kind","name":"kind","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":149,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val kind : ('entity, 'value) t -> 'value kind","source":{"file":"lib/libtmux.mli","line":149,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Field","signatures":[{"raw":"val kind : ('entity, 'value) t -> 'value kind","params":[{"name":"arg1","type":"('entity, 'value) t"}],"returns":"'value kind"}],"slug":"libtmux-field-kind"},{"id":"Libtmux.Field.kind:type","publicId":"Libtmux.Field.kind:type","qualifiedName":"Libtmux.Field.kind","name":"kind","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":144,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type _ kind = Bool : bool kind | Int : int kind | Text : string kind","source":{"file":"lib/libtmux.mli","line":144,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Field","signatures":[{"raw":"type _ kind =\n | Bool: bool kind \n | Int: int kind \n | Text: string kind ","params":[]}],"slug":"libtmux-field-kind-type"},{"id":"Libtmux.Field.kind:type.Bool","publicId":"Libtmux.Field.kind:type.Bool","name":"Bool","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":144,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Bool : bool kind","source":{"file":"lib/libtmux.mli","line":144,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Field.kind:type","variant":"unit","qualifiedName":"Libtmux.Field.Bool","slug":"libtmux-field-kind-type-bool"},{"id":"Libtmux.Field.kind:type.Int","publicId":"Libtmux.Field.kind:type.Int","name":"Int","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":144,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int : int kind","source":{"file":"lib/libtmux.mli","line":144,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Field.kind:type","variant":"unit","qualifiedName":"Libtmux.Field.Int","slug":"libtmux-field-kind-type-int"},{"id":"Libtmux.Field.kind:type.Text","publicId":"Libtmux.Field.kind:type.Text","name":"Text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":144,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text : string kind","source":{"file":"lib/libtmux.mli","line":144,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Field.kind:type","variant":"unit","qualifiedName":"Libtmux.Field.Text","slug":"libtmux-field-kind-type-text"},{"id":"Libtmux.Field.name","publicId":"Libtmux.Field.name","qualifiedName":"Libtmux.Field.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":148,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : ('entity, 'value) t -> string","source":{"file":"lib/libtmux.mli","line":148,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Field","signatures":[{"raw":"val name : ('entity, 'value) t -> string","params":[{"name":"arg1","type":"('entity, 'value) t"}],"returns":"string"}],"slug":"libtmux-field-name"},{"id":"Libtmux.Field.packed","publicId":"Libtmux.Field.packed","qualifiedName":"Libtmux.Field.packed","name":"packed","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":146,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type 'entity packed = Pack : ('entity, 'value) t -> 'entity packed","source":{"file":"lib/libtmux.mli","line":146,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Field","signatures":[{"raw":"type 'entity packed =\n | Pack: ('entity, 'value) t -> 'entity packed ","params":[]}],"slug":"libtmux-field-packed"},{"id":"Libtmux.Field.packed.Pack","publicId":"Libtmux.Field.packed.Pack","name":"Pack","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":146,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Pack : ('entity, 'value) t -> 'entity packed","source":{"file":"lib/libtmux.mli","line":146,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Field.packed","variant":"tuple","qualifiedName":"Libtmux.Field.Pack","slug":"libtmux-field-packed-pack"},{"id":"Libtmux.Field.t","publicId":"Libtmux.Field.t","qualifiedName":"Libtmux.Field.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":145,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type ('entity, 'value) t","source":{"file":"lib/libtmux.mli","line":145,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Field","signatures":[{"raw":"type ('entity, 'value) t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-field-t"},{"id":"Libtmux.Formats","publicId":"Libtmux.Formats","qualifiedName":"Libtmux.Formats","name":"Formats","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":495,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Formats : sig\n module Kind : sig\n type t = Text | Timestamp\n end\n\n module Context : sig\n type t =\n | Server\n | Connection\n | Session\n | Window\n | Window_link\n | Pane\n | Client\n | Buffer\n | Mouse\n | Command\n end\n\n type descriptor = {\n name : string;\n kind : Kind.t;\n contexts : Context.t list;\n versions : string list;\n }\n (** Metadata generated from pinned tmux format callbacks. [contexts] lists\n direct context dependencies, not a promise that a value exists. Caller\n variables from hooks and menus are outside this built-in catalog. *)\n\n type observation =\n | Snapshot of Snapshot.t\n | Session of Session.t\n | Window of Window.t\n | Window_link of Window_link.t\n | Pane of Pane.t\n | Client of Client_observation.t\n\n type scalar = Bool of bool | Int of int | Text of string\n\n type state =\n | Value of scalar\n | Missing\n | Unacquired\n | Unsupported\n (** [Missing] is an absence explicitly recorded in the observation, such\n as a client without terminal height. [Unacquired] means no captured\n value for this observation, including ambiguous session context for\n a pane. [Unsupported] means the name is outside the selected\n release's catalog. [Value (Text \"\")] is a captured empty string,\n never inferred absence. *)\n\n val catalog : version:string -> (descriptor Iarray.t, Error.t) result\n val describe : version:string -> string -> (descriptor option, Error.t) result\n\n val lookup :\n version:string -> observation -> string -> (state, Error.t) result\n (** No I/O. Supply the version recorded by the acquiring client's [version]\n accessor. Unsupported catalog versions return an error. Native typed\n accessors remain the primary API; lookup does not acquire extra fields. *)\nend","source":{"file":"lib/libtmux.mli","line":495,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","slug":"libtmux-formats"},{"id":"Libtmux.Formats.Context","publicId":"Libtmux.Formats.Context","qualifiedName":"Libtmux.Formats.Context","name":"Context","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":500,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Context : sig\n type t =\n | Server\n | Connection\n | Session\n | Window\n | Window_link\n | Pane\n | Client\n | Buffer\n | Mouse\n | Command\n end","source":{"file":"lib/libtmux.mli","line":500,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats","slug":"libtmux-formats-context"},{"id":"Libtmux.Formats.Context.t","publicId":"Libtmux.Formats.Context.t","qualifiedName":"Libtmux.Formats.Context.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":501,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t =\n | Server\n | Connection\n | Session\n | Window\n | Window_link\n | Pane\n | Client\n | Buffer\n | Mouse\n | Command","source":{"file":"lib/libtmux.mli","line":501,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Context","signatures":[{"raw":"type t =\n | Server \n | Connection \n | Session \n | Window \n | Window_link \n | Pane \n | Client \n | Buffer \n | Mouse \n | Command ","params":[]}],"slug":"libtmux-formats-context-t"},{"id":"Libtmux.Formats.Context.t.Buffer","publicId":"Libtmux.Formats.Context.t.Buffer","name":"Buffer","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":509,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Buffer","source":{"file":"lib/libtmux.mli","line":509,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Buffer","slug":"libtmux-formats-context-t-buffer"},{"id":"Libtmux.Formats.Context.t.Client","publicId":"Libtmux.Formats.Context.t.Client","name":"Client","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":508,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Client","source":{"file":"lib/libtmux.mli","line":508,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Client","slug":"libtmux-formats-context-t-client"},{"id":"Libtmux.Formats.Context.t.Command","publicId":"Libtmux.Formats.Context.t.Command","name":"Command","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":511,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Command","source":{"file":"lib/libtmux.mli","line":511,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Command","slug":"libtmux-formats-context-t-command"},{"id":"Libtmux.Formats.Context.t.Connection","publicId":"Libtmux.Formats.Context.t.Connection","name":"Connection","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":503,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Connection","source":{"file":"lib/libtmux.mli","line":503,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Connection","slug":"libtmux-formats-context-t-connection"},{"id":"Libtmux.Formats.Context.t.Mouse","publicId":"Libtmux.Formats.Context.t.Mouse","name":"Mouse","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":510,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Mouse","source":{"file":"lib/libtmux.mli","line":510,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Mouse","slug":"libtmux-formats-context-t-mouse"},{"id":"Libtmux.Formats.Context.t.Pane","publicId":"Libtmux.Formats.Context.t.Pane","name":"Pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":507,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Pane","source":{"file":"lib/libtmux.mli","line":507,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Pane","slug":"libtmux-formats-context-t-pane"},{"id":"Libtmux.Formats.Context.t.Server","publicId":"Libtmux.Formats.Context.t.Server","name":"Server","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":502,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Server","source":{"file":"lib/libtmux.mli","line":502,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Server","slug":"libtmux-formats-context-t-server"},{"id":"Libtmux.Formats.Context.t.Session","publicId":"Libtmux.Formats.Context.t.Session","name":"Session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":504,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Session","source":{"file":"lib/libtmux.mli","line":504,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Session","slug":"libtmux-formats-context-t-session"},{"id":"Libtmux.Formats.Context.t.Window","publicId":"Libtmux.Formats.Context.t.Window","name":"Window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":505,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window","source":{"file":"lib/libtmux.mli","line":505,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Window","slug":"libtmux-formats-context-t-window"},{"id":"Libtmux.Formats.Context.t.Window_link","publicId":"Libtmux.Formats.Context.t.Window_link","name":"Window_link","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":506,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window_link","source":{"file":"lib/libtmux.mli","line":506,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Window_link","slug":"libtmux-formats-context-t-window_link"},{"id":"Libtmux.Formats.Kind","publicId":"Libtmux.Formats.Kind","qualifiedName":"Libtmux.Formats.Kind","name":"Kind","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":496,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Kind : sig\n type t = Text | Timestamp\n end","source":{"file":"lib/libtmux.mli","line":496,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats","slug":"libtmux-formats-kind"},{"id":"Libtmux.Formats.Kind.t","publicId":"Libtmux.Formats.Kind.t","qualifiedName":"Libtmux.Formats.Kind.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":497,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t = Text | Timestamp","source":{"file":"lib/libtmux.mli","line":497,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Kind","signatures":[{"raw":"type t =\n | Text \n | Timestamp ","params":[]}],"slug":"libtmux-formats-kind-t"},{"id":"Libtmux.Formats.Kind.t.Text","publicId":"Libtmux.Formats.Kind.t.Text","name":"Text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":497,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Text","source":{"file":"lib/libtmux.mli","line":497,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Kind.t","variant":"unit","qualifiedName":"Libtmux.Formats.Kind.Text","slug":"libtmux-formats-kind-t-text"},{"id":"Libtmux.Formats.Kind.t.Timestamp","publicId":"Libtmux.Formats.Kind.t.Timestamp","name":"Timestamp","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":497,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Timestamp","source":{"file":"lib/libtmux.mli","line":497,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.Kind.t","variant":"unit","qualifiedName":"Libtmux.Formats.Kind.Timestamp","slug":"libtmux-formats-kind-t-timestamp"},{"id":"Libtmux.Formats.catalog","publicId":"Libtmux.Formats.catalog","qualifiedName":"Libtmux.Formats.catalog","name":"catalog","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":546,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val catalog : version:string -> (descriptor Iarray.t, Error.t) result","source":{"file":"lib/libtmux.mli","line":546,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats","signatures":[{"raw":"val catalog : version:string -> (descriptor Iarray.t, Error.t) result","params":[{"name":"version","type":"string","keywordOnly":true}],"returns":"(descriptor Iarray.t, Error.t) result"}],"slug":"libtmux-formats-catalog"},{"id":"Libtmux.Formats.describe","publicId":"Libtmux.Formats.describe","qualifiedName":"Libtmux.Formats.describe","name":"describe","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":547,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val describe : version:string -> string -> (descriptor option, Error.t) result","source":{"file":"lib/libtmux.mli","line":547,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats","signatures":[{"raw":"val describe :\n version:string -> string -> (descriptor option, Error.t) result","params":[{"name":"version","type":"string","keywordOnly":true},{"name":"arg1","type":"string"}],"returns":"(descriptor option, Error.t) result"}],"slug":"libtmux-formats-describe"},{"id":"Libtmux.Formats.descriptor","publicId":"Libtmux.Formats.descriptor","qualifiedName":"Libtmux.Formats.descriptor","name":"descriptor","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":514,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Metadata generated from pinned tmux format callbacks. [contexts] lists\n direct context dependencies, not a promise that a value exists. Caller\n variables from hooks and menus are outside this built-in catalog. "],"declarations":[{"kind":"struct","text":"type descriptor = {\n name : string;\n kind : Kind.t;\n contexts : Context.t list;\n versions : string list;\n }","source":{"file":"lib/libtmux.mli","line":514,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats","doc":{"summary":"Metadata generated from pinned tmux format callbacks. `contexts` lists direct context dependencies, not a promise that a value exists. Caller variables from hooks and menus are outside this built-in catalog."},"signatures":[{"raw":"type descriptor =\n {\n name: string ;\n kind: Kind.t ;\n contexts: Context.t list ;\n versions: string list }","params":[]}],"slug":"libtmux-formats-descriptor"},{"id":"Libtmux.Formats.descriptor.contexts","publicId":"Libtmux.Formats.descriptor.contexts","name":"contexts","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":517,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"contexts : Context.t list;","source":{"file":"lib/libtmux.mli","line":517,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.descriptor","type":"Context.t list","qualifiedName":"Libtmux.Formats.contexts","slug":"libtmux-formats-descriptor-contexts"},{"id":"Libtmux.Formats.descriptor.kind","publicId":"Libtmux.Formats.descriptor.kind","name":"kind","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":516,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"kind : Kind.t;","source":{"file":"lib/libtmux.mli","line":516,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.descriptor","type":"Kind.t","qualifiedName":"Libtmux.Formats.kind","slug":"libtmux-formats-descriptor-kind"},{"id":"Libtmux.Formats.descriptor.name","publicId":"Libtmux.Formats.descriptor.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":515,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":515,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.descriptor","type":"string","qualifiedName":"Libtmux.Formats.name","slug":"libtmux-formats-descriptor-name"},{"id":"Libtmux.Formats.descriptor.versions","publicId":"Libtmux.Formats.descriptor.versions","name":"versions","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":518,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"versions : string list;","source":{"file":"lib/libtmux.mli","line":518,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.descriptor","type":"string list","qualifiedName":"Libtmux.Formats.versions","slug":"libtmux-formats-descriptor-versions"},{"id":"Libtmux.Formats.lookup","publicId":"Libtmux.Formats.lookup","qualifiedName":"Libtmux.Formats.lookup","name":"lookup","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":549,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" No I/O. Supply the version recorded by the acquiring client's [version]\n accessor. Unsupported catalog versions return an error. Native typed\n accessors remain the primary API; lookup does not acquire extra fields. "],"declarations":[{"kind":"function","text":"val lookup :\n version:string -> observation -> string -> (state, Error.t) result","source":{"file":"lib/libtmux.mli","line":549,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats","doc":{"summary":"No I/O. Supply the version recorded by the acquiring client's `version` accessor. Unsupported catalog versions return an error. Native typed accessors remain the primary API; lookup does not acquire extra fields."},"signatures":[{"raw":"val lookup :\n version:string -> observation -> string -> (state, Error.t) result","params":[{"name":"version","type":"string","keywordOnly":true},{"name":"arg1","type":"observation"},{"name":"arg2","type":"string"}],"returns":"(state, Error.t) result"}],"slug":"libtmux-formats-lookup"},{"id":"Libtmux.Formats.observation","publicId":"Libtmux.Formats.observation","qualifiedName":"Libtmux.Formats.observation","name":"observation","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":524,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type observation =\n | Snapshot of Snapshot.t\n | Session of Session.t\n | Window of Window.t\n | Window_link of Window_link.t\n | Pane of Pane.t\n | Client of Client_observation.t","source":{"file":"lib/libtmux.mli","line":524,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats","signatures":[{"raw":"type observation =\n | Snapshot of Snapshot.t \n | Session of Session.t \n | Window of Window.t \n | Window_link of Window_link.t \n | Pane of Pane.t \n | Client of Client_observation.t ","params":[]}],"slug":"libtmux-formats-observation"},{"id":"Libtmux.Formats.observation.Client","publicId":"Libtmux.Formats.observation.Client","name":"Client","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":530,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Client of Client_observation.t","source":{"file":"lib/libtmux.mli","line":530,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Client","slug":"libtmux-formats-observation-client"},{"id":"Libtmux.Formats.observation.Pane","publicId":"Libtmux.Formats.observation.Pane","name":"Pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":529,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Pane of Pane.t","source":{"file":"lib/libtmux.mli","line":529,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Pane","slug":"libtmux-formats-observation-pane"},{"id":"Libtmux.Formats.observation.Session","publicId":"Libtmux.Formats.observation.Session","name":"Session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":526,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Session of Session.t","source":{"file":"lib/libtmux.mli","line":526,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Session","slug":"libtmux-formats-observation-session"},{"id":"Libtmux.Formats.observation.Snapshot","publicId":"Libtmux.Formats.observation.Snapshot","name":"Snapshot","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":525,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Snapshot of Snapshot.t","source":{"file":"lib/libtmux.mli","line":525,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Snapshot","slug":"libtmux-formats-observation-snapshot"},{"id":"Libtmux.Formats.observation.Window","publicId":"Libtmux.Formats.observation.Window","name":"Window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":527,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window of Window.t","source":{"file":"lib/libtmux.mli","line":527,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Window","slug":"libtmux-formats-observation-window"},{"id":"Libtmux.Formats.observation.Window_link","publicId":"Libtmux.Formats.observation.Window_link","name":"Window_link","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":528,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window_link of Window_link.t","source":{"file":"lib/libtmux.mli","line":528,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Window_link","slug":"libtmux-formats-observation-window_link"},{"id":"Libtmux.Formats.scalar","publicId":"Libtmux.Formats.scalar","qualifiedName":"Libtmux.Formats.scalar","name":"scalar","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":532,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type scalar = Bool of bool | Int of int | Text of string","source":{"file":"lib/libtmux.mli","line":532,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats","signatures":[{"raw":"type scalar =\n | Bool of bool \n | Int of int \n | Text of string ","params":[]}],"slug":"libtmux-formats-scalar"},{"id":"Libtmux.Formats.scalar.Bool","publicId":"Libtmux.Formats.scalar.Bool","name":"Bool","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":532,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Bool of bool","source":{"file":"lib/libtmux.mli","line":532,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.scalar","variant":"tuple","qualifiedName":"Libtmux.Formats.Bool","slug":"libtmux-formats-scalar-bool"},{"id":"Libtmux.Formats.scalar.Int","publicId":"Libtmux.Formats.scalar.Int","name":"Int","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":532,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int of int","source":{"file":"lib/libtmux.mli","line":532,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.scalar","variant":"tuple","qualifiedName":"Libtmux.Formats.Int","slug":"libtmux-formats-scalar-int"},{"id":"Libtmux.Formats.scalar.Text","publicId":"Libtmux.Formats.scalar.Text","name":"Text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":532,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text of string","source":{"file":"lib/libtmux.mli","line":532,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.scalar","variant":"tuple","qualifiedName":"Libtmux.Formats.Text","slug":"libtmux-formats-scalar-text"},{"id":"Libtmux.Formats.state","publicId":"Libtmux.Formats.state","qualifiedName":"Libtmux.Formats.state","name":"state","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":534,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type state =\n | Value of scalar\n | Missing\n | Unacquired\n | Unsupported","source":{"file":"lib/libtmux.mli","line":534,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats","signatures":[{"raw":"type state =\n | Value of scalar \n | Missing \n | Unacquired \n | Unsupported ","params":[]}],"slug":"libtmux-formats-state"},{"id":"Libtmux.Formats.state.Missing","publicId":"Libtmux.Formats.state.Missing","name":"Missing","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":536,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Missing","source":{"file":"lib/libtmux.mli","line":536,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.state","variant":"unit","qualifiedName":"Libtmux.Formats.Missing","slug":"libtmux-formats-state-missing"},{"id":"Libtmux.Formats.state.Unacquired","publicId":"Libtmux.Formats.state.Unacquired","name":"Unacquired","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":537,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unacquired","source":{"file":"lib/libtmux.mli","line":537,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.state","variant":"unit","qualifiedName":"Libtmux.Formats.Unacquired","slug":"libtmux-formats-state-unacquired"},{"id":"Libtmux.Formats.state.Unsupported","publicId":"Libtmux.Formats.state.Unsupported","name":"Unsupported","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":538,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" [Missing] is an absence explicitly recorded in the observation, such\n as a client without terminal height. [Unacquired] means no captured\n value for this observation, including ambiguous session context for\n a pane. [Unsupported] means the name is outside the selected\n release's catalog. [Value (Text \"\")] is a captured empty string,\n never inferred absence. "],"declarations":[{"kind":"constant","text":"| Unsupported","source":{"file":"lib/libtmux.mli","line":538,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.state","doc":{"summary":"`Missing` is an absence explicitly recorded in the observation, such as a client without terminal height. `Unacquired` means no captured value for this observation, including ambiguous session context for a pane. `Unsupported` means the name is outside the selected release's catalog. `Value (Text \"\")` is a captured empty string, never inferred absence."},"variant":"unit","qualifiedName":"Libtmux.Formats.Unsupported","slug":"libtmux-formats-state-unsupported"},{"id":"Libtmux.Formats.state.Value","publicId":"Libtmux.Formats.state.Value","name":"Value","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":535,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Value of scalar","source":{"file":"lib/libtmux.mli","line":535,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Formats.state","variant":"tuple","qualifiedName":"Libtmux.Formats.Value","slug":"libtmux-formats-state-value"},{"id":"Libtmux.Generation","publicId":"Libtmux.Generation","qualifiedName":"Libtmux.Generation","name":"Generation","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":83,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" A random connection-generation identifier. Reconnecting creates a new\n generation even when the socket and server PID are unchanged. "],"declarations":[{"kind":"module","text":"module Generation : sig\n type t\n\n val of_string : string -> (t, Error.t) result\n (** Import a 256-bit connection nonce as 64 lowercase hexadecimal characters.\n Backends generate a fresh random nonce for each connection. *)\n\n val to_string : t -> string\n val equal : t -> t -> bool\nend","source":{"file":"lib/libtmux.mli","line":83,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"A random connection-generation identifier. Reconnecting creates a new generation even when the socket and server PID are unchanged."},"slug":"libtmux-generation"},{"id":"Libtmux.Generation.equal","publicId":"Libtmux.Generation.equal","qualifiedName":"Libtmux.Generation.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":91,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":91,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Generation","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-generation-equal"},{"id":"Libtmux.Generation.of_string","publicId":"Libtmux.Generation.of_string","qualifiedName":"Libtmux.Generation.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":86,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Import a 256-bit connection nonce as 64 lowercase hexadecimal characters.\n Backends generate a fresh random nonce for each connection. "],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":86,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Generation","doc":{"summary":"Import a 256-bit connection nonce as 64 lowercase hexadecimal characters. Backends generate a fresh random nonce for each connection."},"signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-generation-of_string"},{"id":"Libtmux.Generation.t","publicId":"Libtmux.Generation.t","qualifiedName":"Libtmux.Generation.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":84,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":84,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Generation","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-generation-t"},{"id":"Libtmux.Generation.to_string","publicId":"Libtmux.Generation.to_string","qualifiedName":"Libtmux.Generation.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":90,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":90,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Generation","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-generation-to_string"},{"id":"Libtmux.Geometry","publicId":"Libtmux.Geometry","qualifiedName":"Libtmux.Geometry","name":"Geometry","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":762,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Geometry : sig\n type direction = Left | Right | Above | Below\n type size = Cells of int | Percent of int\nend","source":{"file":"lib/libtmux.mli","line":762,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","slug":"libtmux-geometry"},{"id":"Libtmux.Geometry.direction","publicId":"Libtmux.Geometry.direction","qualifiedName":"Libtmux.Geometry.direction","name":"direction","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":763,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type direction = Left | Right | Above | Below","source":{"file":"lib/libtmux.mli","line":763,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Geometry","signatures":[{"raw":"type direction =\n | Left \n | Right \n | Above \n | Below ","params":[]}],"slug":"libtmux-geometry-direction"},{"id":"Libtmux.Geometry.direction.Above","publicId":"Libtmux.Geometry.direction.Above","name":"Above","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":763,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Above","source":{"file":"lib/libtmux.mli","line":763,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Geometry.direction","variant":"unit","qualifiedName":"Libtmux.Geometry.Above","slug":"libtmux-geometry-direction-above"},{"id":"Libtmux.Geometry.direction.Below","publicId":"Libtmux.Geometry.direction.Below","name":"Below","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":763,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Below","source":{"file":"lib/libtmux.mli","line":763,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Geometry.direction","variant":"unit","qualifiedName":"Libtmux.Geometry.Below","slug":"libtmux-geometry-direction-below"},{"id":"Libtmux.Geometry.direction.Left","publicId":"Libtmux.Geometry.direction.Left","name":"Left","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":763,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Left","source":{"file":"lib/libtmux.mli","line":763,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Geometry.direction","variant":"unit","qualifiedName":"Libtmux.Geometry.Left","slug":"libtmux-geometry-direction-left"},{"id":"Libtmux.Geometry.direction.Right","publicId":"Libtmux.Geometry.direction.Right","name":"Right","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":763,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Right","source":{"file":"lib/libtmux.mli","line":763,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Geometry.direction","variant":"unit","qualifiedName":"Libtmux.Geometry.Right","slug":"libtmux-geometry-direction-right"},{"id":"Libtmux.Geometry.size","publicId":"Libtmux.Geometry.size","qualifiedName":"Libtmux.Geometry.size","name":"size","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":764,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type size = Cells of int | Percent of int","source":{"file":"lib/libtmux.mli","line":764,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Geometry","signatures":[{"raw":"type size =\n | Cells of int \n | Percent of int ","params":[]}],"slug":"libtmux-geometry-size"},{"id":"Libtmux.Geometry.size.Cells","publicId":"Libtmux.Geometry.size.Cells","name":"Cells","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":764,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Cells of int","source":{"file":"lib/libtmux.mli","line":764,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Geometry.size","variant":"tuple","qualifiedName":"Libtmux.Geometry.Cells","slug":"libtmux-geometry-size-cells"},{"id":"Libtmux.Geometry.size.Percent","publicId":"Libtmux.Geometry.size.Percent","name":"Percent","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":764,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Percent of int","source":{"file":"lib/libtmux.mli","line":764,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Geometry.size","variant":"tuple","qualifiedName":"Libtmux.Geometry.Percent","slug":"libtmux-geometry-size-percent"},{"id":"Libtmux.Hook","publicId":"Libtmux.Hook","qualifiedName":"Libtmux.Hook","name":"Hook","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":873,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Hook : sig\n type command = { name : string; arguments : string list }\n (** A tmux command and its distinct arguments. Setting a hook encodes these as\n command data; it does not concatenate arguments into shell code.\n Argument-specific tmux behavior, including format expansion, still applies\n when the hook runs. *)\nend","source":{"file":"lib/libtmux.mli","line":873,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","slug":"libtmux-hook"},{"id":"Libtmux.Hook.command","publicId":"Libtmux.Hook.command","qualifiedName":"Libtmux.Hook.command","name":"command","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":874,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" A tmux command and its distinct arguments. Setting a hook encodes these as\n command data; it does not concatenate arguments into shell code.\n Argument-specific tmux behavior, including format expansion, still applies\n when the hook runs. "],"declarations":[{"kind":"struct","text":"type command = { name : string; arguments : string list }","source":{"file":"lib/libtmux.mli","line":874,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Hook","doc":{"summary":"A tmux command and its distinct arguments. Setting a hook encodes these as command data; it does not concatenate arguments into shell code. Argument-specific tmux behavior, including format expansion, still applies when the hook runs."},"signatures":[{"raw":"type command = {\n name: string ;\n arguments: string list }","params":[]}],"slug":"libtmux-hook-command"},{"id":"Libtmux.Hook.command.arguments","publicId":"Libtmux.Hook.command.arguments","name":"arguments","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":874,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"arguments : string list","source":{"file":"lib/libtmux.mli","line":874,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Hook.command","type":"string list","qualifiedName":"Libtmux.Hook.arguments","slug":"libtmux-hook-command-arguments"},{"id":"Libtmux.Hook.command.name","publicId":"Libtmux.Hook.command.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":874,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":874,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Hook.command","type":"string","qualifiedName":"Libtmux.Hook.name","slug":"libtmux-hook-command-name"},{"id":"Libtmux.ID","publicId":"Libtmux.ID","qualifiedName":"Libtmux.ID","name":"ID","kind":"interface","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":128,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"interface","text":"module type ID = sig\n type t\n\n val of_string : string -> (t, Error.t) result\n (** Accept a canonical prefixed decimal tmux ID in the uint32 range. *)\n\n val to_string : t -> string\n val equal : t -> t -> bool\n val compare : t -> t -> int\n val pp : Format.formatter -> t -> unit\nend","source":{"file":"lib/libtmux.mli","line":128,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","slug":"libtmux-id"},{"id":"Libtmux.ID.compare","publicId":"Libtmux.ID.compare","qualifiedName":"Libtmux.ID.compare","name":"compare","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":136,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val compare : t -> t -> int","source":{"file":"lib/libtmux.mli","line":136,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.ID","signatures":[{"raw":"val compare : t -> t -> int","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"int"}],"slug":"libtmux-id-compare"},{"id":"Libtmux.ID.equal","publicId":"Libtmux.ID.equal","qualifiedName":"Libtmux.ID.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.ID","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-id-equal"},{"id":"Libtmux.ID.of_string","publicId":"Libtmux.ID.of_string","qualifiedName":"Libtmux.ID.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Accept a canonical prefixed decimal tmux ID in the uint32 range. "],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.ID","doc":{"summary":"Accept a canonical prefixed decimal tmux ID in the uint32 range."},"signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-id-of_string"},{"id":"Libtmux.ID.pp","publicId":"Libtmux.ID.pp","qualifiedName":"Libtmux.ID.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":137,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":137,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.ID","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-id-pp"},{"id":"Libtmux.ID.t","publicId":"Libtmux.ID.t","qualifiedName":"Libtmux.ID.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.ID","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-id-t"},{"id":"Libtmux.ID.to_string","publicId":"Libtmux.ID.to_string","qualifiedName":"Libtmux.ID.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":134,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":134,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.ID","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-id-to_string"},{"id":"Libtmux.Key","publicId":"Libtmux.Key","qualifiedName":"Libtmux.Key","name":"Key","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":724,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Key : sig\n type t =\n | Enter\n | Tab\n | Escape\n | Backspace\n | Up\n | Down\n | Left\n | Right\n | Control of char\nend","source":{"file":"lib/libtmux.mli","line":724,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","slug":"libtmux-key"},{"id":"Libtmux.Key.t","publicId":"Libtmux.Key.t","qualifiedName":"Libtmux.Key.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":725,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t =\n | Enter\n | Tab\n | Escape\n | Backspace\n | Up\n | Down\n | Left\n | Right\n | Control of char","source":{"file":"lib/libtmux.mli","line":725,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Key","signatures":[{"raw":"type t =\n | Enter \n | Tab \n | Escape \n | Backspace \n | Up \n | Down \n | Left \n | Right \n | Control of char ","params":[]}],"slug":"libtmux-key-t"},{"id":"Libtmux.Key.t.Backspace","publicId":"Libtmux.Key.t.Backspace","name":"Backspace","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":729,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Backspace","source":{"file":"lib/libtmux.mli","line":729,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Backspace","slug":"libtmux-key-t-backspace"},{"id":"Libtmux.Key.t.Control","publicId":"Libtmux.Key.t.Control","name":"Control","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":734,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Control of char","source":{"file":"lib/libtmux.mli","line":734,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Key.t","variant":"tuple","qualifiedName":"Libtmux.Key.Control","slug":"libtmux-key-t-control"},{"id":"Libtmux.Key.t.Down","publicId":"Libtmux.Key.t.Down","name":"Down","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":731,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Down","source":{"file":"lib/libtmux.mli","line":731,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Down","slug":"libtmux-key-t-down"},{"id":"Libtmux.Key.t.Enter","publicId":"Libtmux.Key.t.Enter","name":"Enter","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":726,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Enter","source":{"file":"lib/libtmux.mli","line":726,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Enter","slug":"libtmux-key-t-enter"},{"id":"Libtmux.Key.t.Escape","publicId":"Libtmux.Key.t.Escape","name":"Escape","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":728,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Escape","source":{"file":"lib/libtmux.mli","line":728,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Escape","slug":"libtmux-key-t-escape"},{"id":"Libtmux.Key.t.Left","publicId":"Libtmux.Key.t.Left","name":"Left","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":732,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Left","source":{"file":"lib/libtmux.mli","line":732,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Left","slug":"libtmux-key-t-left"},{"id":"Libtmux.Key.t.Right","publicId":"Libtmux.Key.t.Right","name":"Right","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":733,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Right","source":{"file":"lib/libtmux.mli","line":733,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Right","slug":"libtmux-key-t-right"},{"id":"Libtmux.Key.t.Tab","publicId":"Libtmux.Key.t.Tab","name":"Tab","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":727,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Tab","source":{"file":"lib/libtmux.mli","line":727,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Tab","slug":"libtmux-key-t-tab"},{"id":"Libtmux.Key.t.Up","publicId":"Libtmux.Key.t.Up","name":"Up","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":730,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Up","source":{"file":"lib/libtmux.mli","line":730,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Up","slug":"libtmux-key-t-up"},{"id":"Libtmux.Layout","publicId":"Libtmux.Layout","qualifiedName":"Libtmux.Layout","name":"Layout","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":767,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Layout : sig\n type t =\n | Even_horizontal\n | Even_vertical\n | Main_horizontal\n | Main_vertical\n | Tiled\n | Custom of string\nend","source":{"file":"lib/libtmux.mli","line":767,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","slug":"libtmux-layout"},{"id":"Libtmux.Layout.t","publicId":"Libtmux.Layout.t","qualifiedName":"Libtmux.Layout.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":768,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t =\n | Even_horizontal\n | Even_vertical\n | Main_horizontal\n | Main_vertical\n | Tiled\n | Custom of string","source":{"file":"lib/libtmux.mli","line":768,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Layout","signatures":[{"raw":"type t =\n | Even_horizontal \n | Even_vertical \n | Main_horizontal \n | Main_vertical \n | Tiled \n | Custom of string ","params":[]}],"slug":"libtmux-layout-t"},{"id":"Libtmux.Layout.t.Custom","publicId":"Libtmux.Layout.t.Custom","name":"Custom","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":774,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Custom of string","source":{"file":"lib/libtmux.mli","line":774,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Layout.t","variant":"tuple","qualifiedName":"Libtmux.Layout.Custom","slug":"libtmux-layout-t-custom"},{"id":"Libtmux.Layout.t.Even_horizontal","publicId":"Libtmux.Layout.t.Even_horizontal","name":"Even_horizontal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":769,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Even_horizontal","source":{"file":"lib/libtmux.mli","line":769,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Layout.t","variant":"unit","qualifiedName":"Libtmux.Layout.Even_horizontal","slug":"libtmux-layout-t-even_horizontal"},{"id":"Libtmux.Layout.t.Even_vertical","publicId":"Libtmux.Layout.t.Even_vertical","name":"Even_vertical","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":770,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Even_vertical","source":{"file":"lib/libtmux.mli","line":770,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Layout.t","variant":"unit","qualifiedName":"Libtmux.Layout.Even_vertical","slug":"libtmux-layout-t-even_vertical"},{"id":"Libtmux.Layout.t.Main_horizontal","publicId":"Libtmux.Layout.t.Main_horizontal","name":"Main_horizontal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":771,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Main_horizontal","source":{"file":"lib/libtmux.mli","line":771,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Layout.t","variant":"unit","qualifiedName":"Libtmux.Layout.Main_horizontal","slug":"libtmux-layout-t-main_horizontal"},{"id":"Libtmux.Layout.t.Main_vertical","publicId":"Libtmux.Layout.t.Main_vertical","name":"Main_vertical","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":772,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Main_vertical","source":{"file":"lib/libtmux.mli","line":772,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Layout.t","variant":"unit","qualifiedName":"Libtmux.Layout.Main_vertical","slug":"libtmux-layout-t-main_vertical"},{"id":"Libtmux.Layout.t.Tiled","publicId":"Libtmux.Layout.t.Tiled","name":"Tiled","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":773,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Tiled","source":{"file":"lib/libtmux.mli","line":773,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Layout.t","variant":"unit","qualifiedName":"Libtmux.Layout.Tiled","slug":"libtmux-layout-t-tiled"},{"id":"Libtmux.Model","publicId":"Libtmux.Model","qualifiedName":"Libtmux.Model","name":"Model","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":558,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Built-in model witnesses and canonical field lookup for typed codecs.\n Untrusted field names must resolve against the selected model. "],"declarations":[{"kind":"module","text":"module Model : sig\n type 'a t\n\n val session : Session.t t\n val window : Window.t t\n val window_link : Window_link.t t\n val pane : Pane.t t\n val client : Client_observation.t t\n val name : 'a t -> string\n val fields : 'a t -> 'a Field.packed list\n val find_field : 'a t -> string -> 'a Field.packed option\nend","source":{"file":"lib/libtmux.mli","line":558,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Built-in model witnesses and canonical field lookup for typed codecs. Untrusted field names must resolve against the selected model."},"slug":"libtmux-model"},{"id":"Libtmux.Model.client","publicId":"Libtmux.Model.client","qualifiedName":"Libtmux.Model.client","name":"client","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":565,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val client : Client_observation.t t","source":{"file":"lib/libtmux.mli","line":565,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val client : Client_observation.t t","params":[],"returns":"Client_observation.t t"}],"slug":"libtmux-model-client"},{"id":"Libtmux.Model.fields","publicId":"Libtmux.Model.fields","qualifiedName":"Libtmux.Model.fields","name":"fields","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":567,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val fields : 'a t -> 'a Field.packed list","source":{"file":"lib/libtmux.mli","line":567,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val fields : 'a t -> 'a Field.packed list","params":[{"name":"arg1","type":"'a t"}],"returns":"'a Field.packed list"}],"slug":"libtmux-model-fields"},{"id":"Libtmux.Model.find_field","publicId":"Libtmux.Model.find_field","qualifiedName":"Libtmux.Model.find_field","name":"find_field","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":568,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val find_field : 'a t -> string -> 'a Field.packed option","source":{"file":"lib/libtmux.mli","line":568,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val find_field : 'a t -> string -> 'a Field.packed option","params":[{"name":"arg1","type":"'a t"},{"name":"arg2","type":"string"}],"returns":"'a Field.packed option"}],"slug":"libtmux-model-find_field"},{"id":"Libtmux.Model.name","publicId":"Libtmux.Model.name","qualifiedName":"Libtmux.Model.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":566,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : 'a t -> string","source":{"file":"lib/libtmux.mli","line":566,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val name : 'a t -> string","params":[{"name":"arg1","type":"'a t"}],"returns":"string"}],"slug":"libtmux-model-name"},{"id":"Libtmux.Model.pane","publicId":"Libtmux.Model.pane","qualifiedName":"Libtmux.Model.pane","name":"pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":564,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val pane : Pane.t t","source":{"file":"lib/libtmux.mli","line":564,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val pane : Pane.t t","params":[],"returns":"Pane.t t"}],"slug":"libtmux-model-pane"},{"id":"Libtmux.Model.session","publicId":"Libtmux.Model.session","qualifiedName":"Libtmux.Model.session","name":"session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":561,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val session : Session.t t","source":{"file":"lib/libtmux.mli","line":561,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val session : Session.t t","params":[],"returns":"Session.t t"}],"slug":"libtmux-model-session"},{"id":"Libtmux.Model.t","publicId":"Libtmux.Model.t","qualifiedName":"Libtmux.Model.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":559,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type 'a t","source":{"file":"lib/libtmux.mli","line":559,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"type 'a t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-model-t"},{"id":"Libtmux.Model.window","publicId":"Libtmux.Model.window","qualifiedName":"Libtmux.Model.window","name":"window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":562,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val window : Window.t t","source":{"file":"lib/libtmux.mli","line":562,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val window : Window.t t","params":[],"returns":"Window.t t"}],"slug":"libtmux-model-window"},{"id":"Libtmux.Model.window_link","publicId":"Libtmux.Model.window_link","qualifiedName":"Libtmux.Model.window_link","name":"window_link","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":563,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val window_link : Window_link.t t","source":{"file":"lib/libtmux.mli","line":563,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val window_link : Window_link.t t","params":[],"returns":"Window_link.t t"}],"slug":"libtmux-model-window_link"},{"id":"Libtmux.Operations","publicId":"Libtmux.Operations","qualifiedName":"Libtmux.Operations","name":"Operations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1073,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Construct typed tmux operations for a backend client. Observations are\n immutable, mutations use explicit targets, and no command retries a mutation\n against another connection generation. Construction performs no I/O; the\n descriptions below state what execution does. "],"declarations":[{"kind":"module","text":"module Operations : sig\n val capture : unit -> Snapshot.t Command.t\n (** Capture and validate the complete session/window-link/pane graph. The\n result records an acquisition interval, not an atomic server instant. *)\n\n val capture_text :\n ?scratch_dir:string ->\n Pane.t ->\n start:int ->\n end_:int ->\n Captured_text.t Command.t\n (** Capture inclusive visible rows through an operation-owned temporary file.\n Require [0 <= start <= end_ < Pane.height pane]; scrollback is excluded.\n Retained bytes survive client close. The scratch directory must share the\n daemon filesystem. *)\n\n val rename_window : Window.target -> name:string -> unit Command.t\n (** Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. *)\n\n val rename_session : Session.target -> name:string -> unit Command.t\n (** Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. *)\n\n val switch_client_at :\n ?update_environment:bool ->\n Client_name.t ->\n session:Session.target ->\n unit Command.t\n (** Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. *)\n\n val request_detach_client_at : Client_name.t -> unit Command.t\n (** Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. *)\n\n val refresh_client_at : ?status_only:bool -> Client_name.t -> unit Command.t\n (** Request a redraw; no terminal-rendering completion is implied. *)\n\n val resize_control_client_at :\n Client_name.t -> width:int -> height:int -> unit Command.t\n (** Set a control client's reported size. tmux rejects terminal clients. *)\n\n val send_text : Pane.target -> text:string -> unit Command.t\n (** Literal bytes, without an implicit Enter. NUL is rejected at admission. *)\n\n val send_keys : Pane.target -> Key.t list -> unit Command.t\n (** Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. *)\n\n val wait_for : string -> unit Command.t\n (** Wait on a named tmux semaphore using a dedicated bound lane. *)\n\n val signal : string -> unit Command.t\n (** Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. *)\n\n val capture_environment :\n ?hidden:bool -> Environment.scope -> Environment.t Command.t\n (** Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n *)\n\n val set_environment :\n ?hidden:bool -> Environment.scope -> name:string -> string -> unit Command.t\n (** Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. *)\n\n val unset_environment : Environment.scope -> string -> unit Command.t\n (** Remove the local entry, allowing a global value to apply to future panes.\n *)\n\n val remove_environment : Environment.scope -> string -> unit Command.t\n (** Store a removal marker, excluding the variable from future panes. *)\n\n val capture_options :\n ?include_inherited:bool -> Options.scope -> Options.t Command.t\n (** Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Error.Unsupported}. *)\n\n val read_option :\n ?include_inherited:bool ->\n Options.scope ->\n string ->\n Options.value option Command.t\n (** Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. *)\n\n val set_option :\n ?index:int ->\n ?append:bool ->\n Options.scope ->\n name:string ->\n Options.scalar ->\n unit Command.t\n (** Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. *)\n\n val unset_option : ?index:int -> Options.scope -> string -> unit Command.t\n (** Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. *)\n\n val clear_option_array : Options.scope -> string -> unit Command.t\n (** Set a local empty array, masking inheritance. *)\n\n val capture_hooks : Options.scope -> Options.t Command.t\n (** Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. *)\n\n val read_hook :\n ?include_inherited:bool ->\n Options.scope ->\n string ->\n Options.value option Command.t\n (** Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. *)\n\n val set_hook :\n ?index:int ->\n ?append:bool ->\n Options.scope ->\n name:string ->\n Hook.command list ->\n unit Command.t\n (** Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Options.Text] value; bulk hook capture includes built-ins. Commands may\n cause arbitrary tmux effects when triggered. Hooks that print output are\n outside the supported control transport contract. *)\n\n val remove_hook : ?index:int -> Options.scope -> string -> unit Command.t\n (** Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. *)\n\n val run_hook : Options.scope -> string -> unit Command.t\n (** Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. *)\n\n val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Spawn.t ->\n name:string ->\n unit ->\n Created.t Command.t\n (** Create a detached session on the bound daemon. Name collisions fail. *)\n\n val create_window :\n ?index:int ->\n ?name:string ->\n ?spawn:Spawn.t ->\n Session.target ->\n Created.t Command.t\n (** Create detached, rejecting an occupied explicit index. *)\n\n val split_pane :\n ?size:Geometry.size ->\n ?spawn:Spawn.t ->\n Pane.target ->\n direction:Geometry.direction ->\n Created.t Command.t\n (** Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. *)\n\n val break_pane :\n ?name:string ->\n Pane.target ->\n session:Session.target ->\n index:int ->\n Created.t Command.t\n (** Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. *)\n\n val kill_session : Session.target -> unit Command.t\n (** Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. *)\n\n val kill_window : Window.target -> unit Command.t\n (** Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. *)\n\n val kill_pane : Pane.target -> unit Command.t\n (** Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. *)\n\n val select_window_at : Session.target -> index:int -> unit Command.t\n (** Operate on the session's current index at execution, not an old link\n incarnation. *)\n\n val unlink_window_at :\n ?allow_kill:bool -> Session.target -> index:int -> unit Command.t\n (** Without [allow_kill], tmux rejects removal of the last link to a window.\n *)\n\n val link_window :\n Window.target -> session:Session.target -> index:int -> unit Command.t\n (** Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. *)\n\n val move_window_at :\n Session.target ->\n from_index:int ->\n session:Session.target ->\n index:int ->\n unit Command.t\n (** Move the source session's current link at [from_index]. Destination\n collisions fail. *)\n\n val select_pane : Pane.target -> unit Command.t\n (** Make the pane active in its containing window. This does not open or\n attach a terminal client. *)\n\n val set_pane_title : Pane.target -> title:string -> unit Command.t\n (** Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. *)\n\n val resize_pane : ?width:int -> ?height:int -> Pane.target -> unit Command.t\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. *)\n\n val resize_window :\n ?width:int -> ?height:int -> Window.target -> unit Command.t\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. *)\n\n val select_layout : Window.target -> Layout.t -> unit Command.t\n (** Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. *)\n\n val cycle_layout : Window.target -> [ `Next | `Previous ] -> unit Command.t\n (** Select the next or previous tmux preset layout for this window. *)\n\n val move_pane :\n ?size:Geometry.size ->\n Pane.target ->\n beside:Pane.target ->\n direction:Geometry.direction ->\n unit Command.t\n (** Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. *)\n\n val swap_panes : Pane.target -> Pane.target -> unit Command.t\n (** Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. *)\n\n val rotate_panes : Window.target -> [ `Forward | `Backward ] -> unit Command.t\n (** Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. *)\n\n val zoom_pane : Pane.target -> unit Command.t\n (** Toggle the window's zoom state around this pane. *)\n\n val respawn_pane :\n ?kill_running:bool -> Pane.target -> Spawn.t -> unit Command.t\n (** Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. *)\n\n val clear_history : Pane.target -> unit Command.t\n (** Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. *)\nend","source":{"file":"lib/libtmux.mli","line":1073,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Construct typed tmux operations for a backend client. Observations are immutable, mutations use explicit targets, and no command retries a mutation against another connection generation. Construction performs no I/O; the descriptions below state what execution does."},"slug":"libtmux-operations"},{"id":"Libtmux.Operations.break_pane","publicId":"Libtmux.Operations.break_pane","qualifiedName":"Libtmux.Operations.break_pane","name":"break_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1257,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. "],"declarations":[{"kind":"function","text":"val break_pane :\n ?name:string ->\n Pane.target ->\n session:Session.target ->\n index:int ->\n Created.t Command.t","source":{"file":"lib/libtmux.mli","line":1257,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Move the pane into a new window at an explicit session index. An occupied destination fails. The returned IDs describe the resulting context; the pane itself already existed."},"signatures":[{"raw":"val break_pane :\n ?name:string ->\n Pane.target -> session:Session.target -> index:int -> Created.t Command.t","params":[{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.target"},{"name":"session","type":"Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"Created.t Command.t"}],"slug":"libtmux-operations-break_pane"},{"id":"Libtmux.Operations.capture","publicId":"Libtmux.Operations.capture","qualifiedName":"Libtmux.Operations.capture","name":"capture","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1074,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Capture and validate the complete session/window-link/pane graph. The\n result records an acquisition interval, not an atomic server instant. "],"declarations":[{"kind":"function","text":"val capture : unit -> Snapshot.t Command.t","source":{"file":"lib/libtmux.mli","line":1074,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Capture and validate the complete session/window-link/pane graph. The result records an acquisition interval, not an atomic server instant."},"signatures":[{"raw":"val capture : unit -> Snapshot.t Command.t","params":[{"name":"arg1","type":"unit"}],"returns":"Snapshot.t Command.t"}],"slug":"libtmux-operations-capture"},{"id":"Libtmux.Operations.capture_environment","publicId":"Libtmux.Operations.capture_environment","qualifiedName":"Libtmux.Operations.capture_environment","name":"capture_environment","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1132,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n "],"declarations":[{"kind":"function","text":"val capture_environment :\n ?hidden:bool -> Environment.scope -> Environment.t Command.t","source":{"file":"lib/libtmux.mli","line":1132,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Acquire a bounded table through a read-only command process. Its response must identify the bound daemon while the original pidfd remains live. Unsupported external variable names fail decoding; they are not omitted."},"signatures":[{"raw":"val capture_environment :\n ?hidden:bool -> Environment.scope -> Environment.t Command.t","params":[{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Environment.scope"}],"returns":"Environment.t Command.t"}],"slug":"libtmux-operations-capture_environment"},{"id":"Libtmux.Operations.capture_hooks","publicId":"Libtmux.Operations.capture_hooks","qualifiedName":"Libtmux.Operations.capture_hooks","name":"capture_hooks","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1190,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. "],"declarations":[{"kind":"function","text":"val capture_hooks : Options.scope -> Options.t Command.t","source":{"file":"lib/libtmux.mli","line":1190,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Capture locally configured built-in hooks. Command values are tmux's printed representation, retained as data."},"signatures":[{"raw":"val capture_hooks : Options.scope -> Options.t Command.t","params":[{"name":"arg1","type":"Options.scope"}],"returns":"Options.t Command.t"}],"slug":"libtmux-operations-capture_hooks"},{"id":"Libtmux.Operations.capture_options","publicId":"Libtmux.Operations.capture_options","qualifiedName":"Libtmux.Operations.capture_options","name":"capture_options","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1152,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Error.Unsupported}. "],"declarations":[{"kind":"function","text":"val capture_options :\n ?include_inherited:bool -> Options.scope -> Options.t Command.t","source":{"file":"lib/libtmux.mli","line":1152,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Acquire one bounded option table, excluding hooks. The default includes only local entries. Inherited table enumeration includes built-ins; inherited user options require `read_option` with their explicit name. Built-in descriptors cover every supported release from tmux 3.3a through 3.8; other versions return {!Error.Unsupported}."},"signatures":[{"raw":"val capture_options :\n ?include_inherited:bool -> Options.scope -> Options.t Command.t","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"}],"returns":"Options.t Command.t"}],"slug":"libtmux-operations-capture_options"},{"id":"Libtmux.Operations.capture_text","publicId":"Libtmux.Operations.capture_text","qualifiedName":"Libtmux.Operations.capture_text","name":"capture_text","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1078,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Capture inclusive visible rows through an operation-owned temporary file.\n Require [0 <= start <= end_ < Pane.height pane]; scrollback is excluded.\n Retained bytes survive client close. The scratch directory must share the\n daemon filesystem. "],"declarations":[{"kind":"function","text":"val capture_text :\n ?scratch_dir:string ->\n Pane.t ->\n start:int ->\n end_:int ->\n Captured_text.t Command.t","source":{"file":"lib/libtmux.mli","line":1078,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Capture inclusive visible rows through an operation-owned temporary file. Require `0 <= start <= end_ < Pane.height pane`; scrollback is excluded. Retained bytes survive client close. The scratch directory must share the daemon filesystem."},"signatures":[{"raw":"val capture_text :\n ?scratch_dir:string ->\n Pane.t -> start:int -> end_:int -> Captured_text.t Command.t","params":[{"name":"scratch_dir","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.t"},{"name":"start","type":"int","keywordOnly":true},{"name":"end_","type":"int","keywordOnly":true}],"returns":"Captured_text.t Command.t"}],"slug":"libtmux-operations-capture_text"},{"id":"Libtmux.Operations.clear_history","publicId":"Libtmux.Operations.clear_history","qualifiedName":"Libtmux.Operations.clear_history","name":"clear_history","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1355,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. "],"declarations":[{"kind":"function","text":"val clear_history : Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1355,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Clear stored scrollback for this pane. The visible screen and running process remain; later captures cannot recover discarded history."},"signatures":[{"raw":"val clear_history : Pane.target -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-clear_history"},{"id":"Libtmux.Operations.clear_option_array","publicId":"Libtmux.Operations.clear_option_array","qualifiedName":"Libtmux.Operations.clear_option_array","name":"clear_option_array","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1187,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a local empty array, masking inheritance. "],"declarations":[{"kind":"function","text":"val clear_option_array : Options.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1187,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set a local empty array, masking inheritance."},"signatures":[{"raw":"val clear_option_array : Options.scope -> string -> unit Command.t","params":[{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-clear_option_array"},{"id":"Libtmux.Operations.create_session","publicId":"Libtmux.Operations.create_session","qualifiedName":"Libtmux.Operations.create_session","name":"create_session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1229,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Create a detached session on the bound daemon. Name collisions fail. "],"declarations":[{"kind":"function","text":"val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Spawn.t ->\n name:string ->\n unit ->\n Created.t Command.t","source":{"file":"lib/libtmux.mli","line":1229,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Create a detached session on the bound daemon. Name collisions fail."},"signatures":[{"raw":"val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int -> ?spawn:Spawn.t -> name:string -> unit -> Created.t Command.t","params":[{"name":"window_name","type":"string","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"spawn","type":"Spawn.t","optional":true,"keywordOnly":true},{"name":"name","type":"string","keywordOnly":true},{"name":"arg1","type":"unit"}],"returns":"Created.t Command.t"}],"slug":"libtmux-operations-create_session"},{"id":"Libtmux.Operations.create_window","publicId":"Libtmux.Operations.create_window","qualifiedName":"Libtmux.Operations.create_window","name":"create_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1239,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Create detached, rejecting an occupied explicit index. "],"declarations":[{"kind":"function","text":"val create_window :\n ?index:int ->\n ?name:string ->\n ?spawn:Spawn.t ->\n Session.target ->\n Created.t Command.t","source":{"file":"lib/libtmux.mli","line":1239,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Create detached, rejecting an occupied explicit index."},"signatures":[{"raw":"val create_window :\n ?index:int ->\n ?name:string -> ?spawn:Spawn.t -> Session.target -> Created.t Command.t","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"spawn","type":"Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"Session.target"}],"returns":"Created.t Command.t"}],"slug":"libtmux-operations-create_window"},{"id":"Libtmux.Operations.cycle_layout","publicId":"Libtmux.Operations.cycle_layout","qualifiedName":"Libtmux.Operations.cycle_layout","name":"cycle_layout","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1325,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Select the next or previous tmux preset layout for this window. "],"declarations":[{"kind":"function","text":"val cycle_layout : Window.target -> [ `Next | `Previous ] -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1325,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Select the next or previous tmux preset layout for this window."},"signatures":[{"raw":"val cycle_layout : Window.target -> [ `Next | `Previous ] -> unit Command.t","params":[{"name":"arg1","type":"Window.target"},{"name":"arg2","type":"[ `Next | `Previous ]"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-cycle_layout"},{"id":"Libtmux.Operations.kill_pane","publicId":"Libtmux.Operations.kill_pane","qualifiedName":"Libtmux.Operations.kill_pane","name":"kill_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1275,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. "],"declarations":[{"kind":"function","text":"val kill_pane : Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1275,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Destroy the target pane and its running process. tmux removes a window that becomes empty and may remove its now-empty sessions."},"signatures":[{"raw":"val kill_pane : Pane.target -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-kill_pane"},{"id":"Libtmux.Operations.kill_session","publicId":"Libtmux.Operations.kill_session","qualifiedName":"Libtmux.Operations.kill_session","name":"kill_session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1267,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. "],"declarations":[{"kind":"function","text":"val kill_session : Session.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1267,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Remove the session and its window links. Windows with no other links and their panes are destroyed. Removing the last session may stop tmux."},"signatures":[{"raw":"val kill_session : Session.target -> unit Command.t","params":[{"name":"arg1","type":"Session.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-kill_session"},{"id":"Libtmux.Operations.kill_window","publicId":"Libtmux.Operations.kill_window","qualifiedName":"Libtmux.Operations.kill_window","name":"kill_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1271,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. "],"declarations":[{"kind":"function","text":"val kill_window : Window.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1271,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Destroy the window, all its session links and every contained pane. This acts on the global window, not a single contextual link."},"signatures":[{"raw":"val kill_window : Window.target -> unit Command.t","params":[{"name":"arg1","type":"Window.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-kill_window"},{"id":"Libtmux.Operations.link_window","publicId":"Libtmux.Operations.link_window","qualifiedName":"Libtmux.Operations.link_window","name":"link_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1288,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. "],"declarations":[{"kind":"function","text":"val link_window :\n Window.target -> session:Session.target -> index:int -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1288,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Add a session-specific link to the global window at `index`, rejecting an occupied index. The source window and its panes stay shared."},"signatures":[{"raw":"val link_window :\n Window.target -> session:Session.target -> index:int -> unit Command.t","params":[{"name":"arg1","type":"Window.target"},{"name":"session","type":"Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-link_window"},{"id":"Libtmux.Operations.move_pane","publicId":"Libtmux.Operations.move_pane","qualifiedName":"Libtmux.Operations.move_pane","name":"move_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1328,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. "],"declarations":[{"kind":"function","text":"val move_pane :\n ?size:Geometry.size ->\n Pane.target ->\n beside:Pane.target ->\n direction:Geometry.direction ->\n unit Command.t","source":{"file":"lib/libtmux.mli","line":1328,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Move the source pane beside another pane, optionally setting the split size. Both targets must belong to the same bound generation. An emptied source window is removed by tmux."},"signatures":[{"raw":"val move_pane :\n ?size:Geometry.size ->\n Pane.target ->\n beside:Pane.target -> direction:Geometry.direction -> unit Command.t","params":[{"name":"size","type":"Geometry.size","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.target"},{"name":"beside","type":"Pane.target","keywordOnly":true},{"name":"direction","type":"Geometry.direction","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-move_pane"},{"id":"Libtmux.Operations.move_window_at","publicId":"Libtmux.Operations.move_window_at","qualifiedName":"Libtmux.Operations.move_window_at","name":"move_window_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1293,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Move the source session's current link at [from_index]. Destination\n collisions fail. "],"declarations":[{"kind":"function","text":"val move_window_at :\n Session.target ->\n from_index:int ->\n session:Session.target ->\n index:int ->\n unit Command.t","source":{"file":"lib/libtmux.mli","line":1293,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Move the source session's current link at `from_index`. Destination collisions fail."},"signatures":[{"raw":"val move_window_at :\n Session.target ->\n from_index:int -> session:Session.target -> index:int -> unit Command.t","params":[{"name":"arg1","type":"Session.target"},{"name":"from_index","type":"int","keywordOnly":true},{"name":"session","type":"Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-move_window_at"},{"id":"Libtmux.Operations.read_hook","publicId":"Libtmux.Operations.read_hook","qualifiedName":"Libtmux.Operations.read_hook","name":"read_hook","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1194,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. "],"declarations":[{"kind":"function","text":"val read_hook :\n ?include_inherited:bool ->\n Options.scope ->\n string ->\n Options.value option Command.t","source":{"file":"lib/libtmux.mli","line":1194,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Read an exact hook name. Inheritance is included by default; `None` means no entry under the selected policy. Missing targets remain errors."},"signatures":[{"raw":"val read_hook :\n ?include_inherited:bool ->\n Options.scope -> string -> Options.value option Command.t","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"Options.value option Command.t"}],"slug":"libtmux-operations-read_hook"},{"id":"Libtmux.Operations.read_option","publicId":"Libtmux.Operations.read_option","qualifiedName":"Libtmux.Operations.read_option","name":"read_option","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1160,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. "],"declarations":[{"kind":"function","text":"val read_option :\n ?include_inherited:bool ->\n Options.scope ->\n string ->\n Options.value option Command.t","source":{"file":"lib/libtmux.mli","line":1160,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Read one exact name, including user-option inheritance. `None` means no entry under the selected policy. An invalid target remains an error. The default follows inheritance; this does not identify the defining parent scope."},"signatures":[{"raw":"val read_option :\n ?include_inherited:bool ->\n Options.scope -> string -> Options.value option Command.t","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"Options.value option Command.t"}],"slug":"libtmux-operations-read_option"},{"id":"Libtmux.Operations.refresh_client_at","publicId":"Libtmux.Operations.refresh_client_at","qualifiedName":"Libtmux.Operations.refresh_client_at","name":"refresh_client_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1111,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request a redraw; no terminal-rendering completion is implied. "],"declarations":[{"kind":"function","text":"val refresh_client_at : ?status_only:bool -> Client_name.t -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1111,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Request a redraw; no terminal-rendering completion is implied."},"signatures":[{"raw":"val refresh_client_at : ?status_only:bool -> Client_name.t -> unit Command.t","params":[{"name":"status_only","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Client_name.t"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-refresh_client_at"},{"id":"Libtmux.Operations.remove_environment","publicId":"Libtmux.Operations.remove_environment","qualifiedName":"Libtmux.Operations.remove_environment","name":"remove_environment","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1149,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Store a removal marker, excluding the variable from future panes. "],"declarations":[{"kind":"function","text":"val remove_environment : Environment.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1149,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Store a removal marker, excluding the variable from future panes."},"signatures":[{"raw":"val remove_environment : Environment.scope -> string -> unit Command.t","params":[{"name":"arg1","type":"Environment.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-remove_environment"},{"id":"Libtmux.Operations.remove_hook","publicId":"Libtmux.Operations.remove_hook","qualifiedName":"Libtmux.Operations.remove_hook","name":"remove_hook","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1217,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. "],"declarations":[{"kind":"function","text":"val remove_hook : ?index:int -> Options.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1217,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Remove the local hook or one indexed array entry. An inherited hook may become effective again; this does not stop work it already started."},"signatures":[{"raw":"val remove_hook : ?index:int -> Options.scope -> string -> unit Command.t","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-remove_hook"},{"id":"Libtmux.Operations.rename_session","publicId":"Libtmux.Operations.rename_session","qualifiedName":"Libtmux.Operations.rename_session","name":"rename_session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1093,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. "],"declarations":[{"kind":"function","text":"val rename_session : Session.target -> name:string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1093,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set the session name, rejecting a conflicting existing name. Bound IDs remain usable; existing snapshots retain their captured names."},"signatures":[{"raw":"val rename_session : Session.target -> name:string -> unit Command.t","params":[{"name":"arg1","type":"Session.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-rename_session"},{"id":"Libtmux.Operations.rename_window","publicId":"Libtmux.Operations.rename_window","qualifiedName":"Libtmux.Operations.rename_window","name":"rename_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1089,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. "],"declarations":[{"kind":"function","text":"val rename_window : Window.target -> name:string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1089,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set the global window name. Every session link observes the new name on its next capture; existing snapshots retain the old value."},"signatures":[{"raw":"val rename_window : Window.target -> name:string -> unit Command.t","params":[{"name":"arg1","type":"Window.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-rename_window"},{"id":"Libtmux.Operations.request_detach_client_at","publicId":"Libtmux.Operations.request_detach_client_at","qualifiedName":"Libtmux.Operations.request_detach_client_at","name":"request_detach_client_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1106,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. "],"declarations":[{"kind":"function","text":"val request_detach_client_at : Client_name.t -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1106,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Request detachment of the client currently bearing this name. Success confirms request processing, not peer exit. Detaching the library's own primary lane can lose the response and retire its generation."},"signatures":[{"raw":"val request_detach_client_at : Client_name.t -> unit Command.t","params":[{"name":"arg1","type":"Client_name.t"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-request_detach_client_at"},{"id":"Libtmux.Operations.resize_control_client_at","publicId":"Libtmux.Operations.resize_control_client_at","qualifiedName":"Libtmux.Operations.resize_control_client_at","name":"resize_control_client_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1114,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a control client's reported size. tmux rejects terminal clients. "],"declarations":[{"kind":"function","text":"val resize_control_client_at :\n Client_name.t -> width:int -> height:int -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1114,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set a control client's reported size. tmux rejects terminal clients."},"signatures":[{"raw":"val resize_control_client_at :\n Client_name.t -> width:int -> height:int -> unit Command.t","params":[{"name":"arg1","type":"Client_name.t"},{"name":"width","type":"int","keywordOnly":true},{"name":"height","type":"int","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-resize_control_client_at"},{"id":"Libtmux.Operations.resize_pane","publicId":"Libtmux.Operations.resize_pane","qualifiedName":"Libtmux.Operations.resize_pane","name":"resize_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1310,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. "],"declarations":[{"kind":"function","text":"val resize_pane : ?width:int -> ?height:int -> Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1310,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. tmux can constrain the result to the available layout. Capture again to observe the actual dimensions."},"signatures":[{"raw":"val resize_pane : ?width:int -> ?height:int -> Pane.target -> unit Command.t","params":[{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-resize_pane"},{"id":"Libtmux.Operations.resize_window","publicId":"Libtmux.Operations.resize_window","qualifiedName":"Libtmux.Operations.resize_window","name":"resize_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1315,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. "],"declarations":[{"kind":"function","text":"val resize_window :\n ?width:int -> ?height:int -> Window.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1315,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. Client-size and window-size policies can affect subsequent sizing."},"signatures":[{"raw":"val resize_window :\n ?width:int -> ?height:int -> Window.target -> unit Command.t","params":[{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"Window.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-resize_window"},{"id":"Libtmux.Operations.respawn_pane","publicId":"Libtmux.Operations.respawn_pane","qualifiedName":"Libtmux.Operations.respawn_pane","name":"respawn_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1349,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. "],"declarations":[{"kind":"function","text":"val respawn_pane :\n ?kill_running:bool -> Pane.target -> Spawn.t -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1349,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Start the supplied command in the existing pane. A running process causes failure unless `kill_running:true` explicitly replaces it. The pane ID remains unchanged."},"signatures":[{"raw":"val respawn_pane :\n ?kill_running:bool -> Pane.target -> Spawn.t -> unit Command.t","params":[{"name":"kill_running","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.target"},{"name":"arg2","type":"Spawn.t"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-respawn_pane"},{"id":"Libtmux.Operations.rotate_panes","publicId":"Libtmux.Operations.rotate_panes","qualifiedName":"Libtmux.Operations.rotate_panes","name":"rotate_panes","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1342,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. "],"declarations":[{"kind":"function","text":"val rotate_panes : Window.target -> [ `Forward | `Backward ] -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1342,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Rotate pane positions in the selected direction. Pane identities and running processes remain attached to their panes."},"signatures":[{"raw":"val rotate_panes :\n Window.target -> [ `Backward | `Forward ] -> unit Command.t","params":[{"name":"arg1","type":"Window.target"},{"name":"arg2","type":"[ `Backward | `Forward ]"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-rotate_panes"},{"id":"Libtmux.Operations.run_hook","publicId":"Libtmux.Operations.run_hook","qualifiedName":"Libtmux.Operations.run_hook","name":"run_hook","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1221,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. "],"declarations":[{"kind":"function","text":"val run_hook : Options.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1221,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Run the effective hook in an explicit session, window or pane context. A successful result follows completion of its synchronous command queue. Background work started by a hook has its own lifetime. A later hook failure returns an uncertain outcome; preceding effects remain. Named `@` hooks return `Unsupported` because tmux can hide their parse failures in the server log. Configuration and inspection remain available."},"signatures":[{"raw":"val run_hook : Options.scope -> string -> unit Command.t","params":[{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-run_hook"},{"id":"Libtmux.Operations.select_layout","publicId":"Libtmux.Operations.select_layout","qualifiedName":"Libtmux.Operations.select_layout","name":"select_layout","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1321,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. "],"declarations":[{"kind":"function","text":"val select_layout : Window.target -> Layout.t -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1321,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Apply a preset or validated custom layout to the window. Pane geometry follows tmux layout rules; capture again to observe the result."},"signatures":[{"raw":"val select_layout : Window.target -> Layout.t -> unit Command.t","params":[{"name":"arg1","type":"Window.target"},{"name":"arg2","type":"Layout.t"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-select_layout"},{"id":"Libtmux.Operations.select_pane","publicId":"Libtmux.Operations.select_pane","qualifiedName":"Libtmux.Operations.select_pane","name":"select_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1302,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Make the pane active in its containing window. This does not open or\n attach a terminal client. "],"declarations":[{"kind":"function","text":"val select_pane : Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1302,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Make the pane active in its containing window. This does not open or attach a terminal client."},"signatures":[{"raw":"val select_pane : Pane.target -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-select_pane"},{"id":"Libtmux.Operations.select_window_at","publicId":"Libtmux.Operations.select_window_at","qualifiedName":"Libtmux.Operations.select_window_at","name":"select_window_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1279,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Operate on the session's current index at execution, not an old link\n incarnation. "],"declarations":[{"kind":"function","text":"val select_window_at : Session.target -> index:int -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1279,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Operate on the session's current index at execution, not an old link incarnation."},"signatures":[{"raw":"val select_window_at : Session.target -> index:int -> unit Command.t","params":[{"name":"arg1","type":"Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-select_window_at"},{"id":"Libtmux.Operations.send_keys","publicId":"Libtmux.Operations.send_keys","qualifiedName":"Libtmux.Operations.send_keys","name":"send_keys","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1121,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. "],"declarations":[{"kind":"function","text":"val send_keys : Pane.target -> Key.t list -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1121,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Send named tmux keys in order, without an implicit Enter. Use {!send_text} for literal bytes rather than key interpretation."},"signatures":[{"raw":"val send_keys : Pane.target -> Key.t list -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"},{"name":"arg2","type":"Key.t list"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-send_keys"},{"id":"Libtmux.Operations.send_text","publicId":"Libtmux.Operations.send_text","qualifiedName":"Libtmux.Operations.send_text","name":"send_text","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1118,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Literal bytes, without an implicit Enter. NUL is rejected at admission. "],"declarations":[{"kind":"function","text":"val send_text : Pane.target -> text:string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1118,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Literal bytes, without an implicit Enter. NUL is rejected at admission."},"signatures":[{"raw":"val send_text : Pane.target -> text:string -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"},{"name":"text","type":"string","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-send_text"},{"id":"Libtmux.Operations.set_environment","publicId":"Libtmux.Operations.set_environment","qualifiedName":"Libtmux.Operations.set_environment","name":"set_environment","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1139,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. "],"declarations":[{"kind":"function","text":"val set_environment :\n ?hidden:bool -> Environment.scope -> name:string -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1139,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set a local environment value for future pane processes. `hidden` defaults to false; hidden values remain internal to tmux. Existing processes keep their environment."},"signatures":[{"raw":"val set_environment :\n ?hidden:bool ->\n Environment.scope -> name:string -> string -> unit Command.t","params":[{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Environment.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-set_environment"},{"id":"Libtmux.Operations.set_hook","publicId":"Libtmux.Operations.set_hook","qualifiedName":"Libtmux.Operations.set_hook","name":"set_hook","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1202,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Options.Text] value; bulk hook capture includes built-ins. Commands may\n cause arbitrary tmux effects when triggered. Hooks that print output are\n outside the supported control transport contract. "],"declarations":[{"kind":"function","text":"val set_hook :\n ?index:int ->\n ?append:bool ->\n Options.scope ->\n name:string ->\n Hook.command list ->\n unit Command.t","source":{"file":"lib/libtmux.mli","line":1202,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set a hook to a nonempty command list. Without an index, replace the whole hook array, or fill the lowest free index when appending. An explicit `@name` custom hook stores command text as a user option; it requires complete replacement and has no array indexes. `read_hook` returns its `Options.Text` value; bulk hook capture includes built-ins. Commands may cause arbitrary tmux effects when triggered. Hooks that print output are outside the supported control transport contract."},"signatures":[{"raw":"val set_hook :\n ?index:int ->\n ?append:bool ->\n Options.scope -> name:string -> Hook.command list -> unit Command.t","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg2","type":"Hook.command list"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-set_hook"},{"id":"Libtmux.Operations.set_option","publicId":"Libtmux.Operations.set_option","qualifiedName":"Libtmux.Operations.set_option","name":"set_option","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1170,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. "],"declarations":[{"kind":"function","text":"val set_option :\n ?index:int ->\n ?append:bool ->\n Options.scope ->\n name:string ->\n Options.scalar ->\n unit Command.t","source":{"file":"lib/libtmux.mli","line":1170,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Validate the scope and scalar kind before admission. Array values require an index, or `append:true`. Without an index, tmux splits appended text using the option's separator and fills the lowest unused indexes. Text is literal; tmux format expansion is disabled. Hooks use a separate operation."},"signatures":[{"raw":"val set_option :\n ?index:int ->\n ?append:bool ->\n Options.scope -> name:string -> Options.scalar -> unit Command.t","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg2","type":"Options.scalar"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-set_option"},{"id":"Libtmux.Operations.set_pane_title","publicId":"Libtmux.Operations.set_pane_title","qualifiedName":"Libtmux.Operations.set_pane_title","name":"set_pane_title","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1306,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. "],"declarations":[{"kind":"function","text":"val set_pane_title : Pane.target -> title:string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1306,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set the pane title as literal text, without tmux format expansion. A running terminal application can subsequently replace the title."},"signatures":[{"raw":"val set_pane_title : Pane.target -> title:string -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"},{"name":"title","type":"string","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-set_pane_title"},{"id":"Libtmux.Operations.signal","publicId":"Libtmux.Operations.signal","qualifiedName":"Libtmux.Operations.signal","name":"signal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1128,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. "],"declarations":[{"kind":"function","text":"val signal : string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1128,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Signal a named tmux semaphore, releasing a waiter or retaining the signal for a later {!wait_for}. This does not signal an OS process."},"signatures":[{"raw":"val signal : string -> unit Command.t","params":[{"name":"arg1","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-signal"},{"id":"Libtmux.Operations.split_pane","publicId":"Libtmux.Operations.split_pane","qualifiedName":"Libtmux.Operations.split_pane","name":"split_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1247,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. "],"declarations":[{"kind":"function","text":"val split_pane :\n ?size:Geometry.size ->\n ?spawn:Spawn.t ->\n Pane.target ->\n direction:Geometry.direction ->\n Created.t Command.t","source":{"file":"lib/libtmux.mli","line":1247,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Create a detached pane beside the target and return the IDs reported by tmux. Omitted `size` lets tmux choose the split; tmux rejects splits when no space remains."},"signatures":[{"raw":"val split_pane :\n ?size:Geometry.size ->\n ?spawn:Spawn.t ->\n Pane.target -> direction:Geometry.direction -> Created.t Command.t","params":[{"name":"size","type":"Geometry.size","optional":true,"keywordOnly":true},{"name":"spawn","type":"Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.target"},{"name":"direction","type":"Geometry.direction","keywordOnly":true}],"returns":"Created.t Command.t"}],"slug":"libtmux-operations-split_pane"},{"id":"Libtmux.Operations.swap_panes","publicId":"Libtmux.Operations.swap_panes","qualifiedName":"Libtmux.Operations.swap_panes","name":"swap_panes","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1338,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. "],"declarations":[{"kind":"function","text":"val swap_panes : Pane.target -> Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1338,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Exchange pane positions without exchanging their identities or running processes. Both targets must belong to the same bound generation."},"signatures":[{"raw":"val swap_panes : Pane.target -> Pane.target -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"},{"name":"arg2","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-swap_panes"},{"id":"Libtmux.Operations.switch_client_at","publicId":"Libtmux.Operations.switch_client_at","qualifiedName":"Libtmux.Operations.switch_client_at","name":"switch_client_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1097,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. "],"declarations":[{"kind":"function","text":"val switch_client_at :\n ?update_environment:bool ->\n Client_name.t ->\n session:Session.target ->\n unit Command.t","source":{"file":"lib/libtmux.mli","line":1097,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Switch the client currently bearing this name to the bound session. Environment updates are disabled by default. This can move either a terminal client or a control client; it does not open a new terminal."},"signatures":[{"raw":"val switch_client_at :\n ?update_environment:bool ->\n Client_name.t -> session:Session.target -> unit Command.t","params":[{"name":"update_environment","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Client_name.t"},{"name":"session","type":"Session.target","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-switch_client_at"},{"id":"Libtmux.Operations.unlink_window_at","publicId":"Libtmux.Operations.unlink_window_at","qualifiedName":"Libtmux.Operations.unlink_window_at","name":"unlink_window_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1283,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Without [allow_kill], tmux rejects removal of the last link to a window.\n "],"declarations":[{"kind":"function","text":"val unlink_window_at :\n ?allow_kill:bool -> Session.target -> index:int -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1283,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Without `allow_kill`, tmux rejects removal of the last link to a window."},"signatures":[{"raw":"val unlink_window_at :\n ?allow_kill:bool -> Session.target -> index:int -> unit Command.t","params":[{"name":"allow_kill","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-unlink_window_at"},{"id":"Libtmux.Operations.unset_environment","publicId":"Libtmux.Operations.unset_environment","qualifiedName":"Libtmux.Operations.unset_environment","name":"unset_environment","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1145,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove the local entry, allowing a global value to apply to future panes.\n "],"declarations":[{"kind":"function","text":"val unset_environment : Environment.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1145,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Remove the local entry, allowing a global value to apply to future panes."},"signatures":[{"raw":"val unset_environment : Environment.scope -> string -> unit Command.t","params":[{"name":"arg1","type":"Environment.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-unset_environment"},{"id":"Libtmux.Operations.unset_option","publicId":"Libtmux.Operations.unset_option","qualifiedName":"Libtmux.Operations.unset_option","name":"unset_option","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1183,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. "],"declarations":[{"kind":"function","text":"val unset_option : ?index:int -> Options.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1183,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Remove a local override or one array element. Global built-ins reset to their tmux defaults; this does not recursively unset child overrides."},"signatures":[{"raw":"val unset_option : ?index:int -> Options.scope -> string -> unit Command.t","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-unset_option"},{"id":"Libtmux.Operations.wait_for","publicId":"Libtmux.Operations.wait_for","qualifiedName":"Libtmux.Operations.wait_for","name":"wait_for","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1125,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Wait on a named tmux semaphore using a dedicated bound lane. "],"declarations":[{"kind":"function","text":"val wait_for : string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1125,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Wait on a named tmux semaphore using a dedicated bound lane."},"signatures":[{"raw":"val wait_for : string -> unit Command.t","params":[{"name":"arg1","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-wait_for"},{"id":"Libtmux.Operations.zoom_pane","publicId":"Libtmux.Operations.zoom_pane","qualifiedName":"Libtmux.Operations.zoom_pane","name":"zoom_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1346,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Toggle the window's zoom state around this pane. "],"declarations":[{"kind":"function","text":"val zoom_pane : Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1346,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Toggle the window's zoom state around this pane."},"signatures":[{"raw":"val zoom_pane : Pane.target -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-zoom_pane"},{"id":"Libtmux.Options","publicId":"Libtmux.Options","qualifiedName":"Libtmux.Options","name":"Options","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":818,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Version-aware option descriptors and captured scoped values. Sparse array\n indexes and inherited entries retain their tmux meaning. "],"declarations":[{"kind":"module","text":"module Options : sig\n module Kind : sig\n type t = Text | Number | Flag | Choice | Key | Colour | Commands\n end\n\n type descriptor = {\n name : string;\n kind : Kind.t;\n array : bool;\n hook : bool;\n scopes : [ `Server | `Session | `Window | `Pane ] list;\n versions : string list;\n }\n (** Generated upstream descriptors. [versions] lists qualified releases; user\n options have no built-in release history. *)\n\n type scope =\n | Server\n | Global_sessions\n | Global_windows\n | Session of Session.target\n | Window of Window.target\n | Pane of Pane.target\n\n type scalar =\n | Text of string\n | Integer of int64\n | Bool of bool\n | Choice of string\n | Key of string\n | Colour of string\n | Commands of string\n\n type value = Scalar of scalar | Array of (int * scalar) Iarray.t\n type entry = { descriptor : descriptor; value : value; inherited : bool }\n\n type t = {\n source : Source.t;\n scope : scope;\n include_inherited : bool;\n entries : entry Iarray.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }\n (** Captured options in tmux order, with original array indexes. An empty\n array differs from an absent local entry. No accessor performs I/O. *)\n\n val catalog : version:string -> (descriptor Iarray.t, Error.t) result\n val describe : version:string -> string -> (descriptor, Error.t) result\n\n val lookup : t -> string -> entry option\n (** [None] means absent from this capture's selected scope and inheritance\n policy. Use [describe] to distinguish an unsupported built-in name. *)\nend","source":{"file":"lib/libtmux.mli","line":818,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Version-aware option descriptors and captured scoped values. Sparse array indexes and inherited entries retain their tmux meaning."},"slug":"libtmux-options"},{"id":"Libtmux.Options.Kind","publicId":"Libtmux.Options.Kind","qualifiedName":"Libtmux.Options.Kind","name":"Kind","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":819,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Kind : sig\n type t = Text | Number | Flag | Choice | Key | Colour | Commands\n end","source":{"file":"lib/libtmux.mli","line":819,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options","slug":"libtmux-options-kind"},{"id":"Libtmux.Options.Kind.t","publicId":"Libtmux.Options.Kind.t","qualifiedName":"Libtmux.Options.Kind.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t = Text | Number | Flag | Choice | Key | Colour | Commands","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.Kind","signatures":[{"raw":"type t =\n | Text \n | Number \n | Flag \n | Choice \n | Key \n | Colour \n | Commands ","params":[]}],"slug":"libtmux-options-kind-t"},{"id":"Libtmux.Options.Kind.t.Choice","publicId":"Libtmux.Options.Kind.t.Choice","name":"Choice","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Choice","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Choice","slug":"libtmux-options-kind-t-choice"},{"id":"Libtmux.Options.Kind.t.Colour","publicId":"Libtmux.Options.Kind.t.Colour","name":"Colour","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Colour","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Colour","slug":"libtmux-options-kind-t-colour"},{"id":"Libtmux.Options.Kind.t.Commands","publicId":"Libtmux.Options.Kind.t.Commands","name":"Commands","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Commands","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Commands","slug":"libtmux-options-kind-t-commands"},{"id":"Libtmux.Options.Kind.t.Flag","publicId":"Libtmux.Options.Kind.t.Flag","name":"Flag","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Flag","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Flag","slug":"libtmux-options-kind-t-flag"},{"id":"Libtmux.Options.Kind.t.Key","publicId":"Libtmux.Options.Kind.t.Key","name":"Key","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Key","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Key","slug":"libtmux-options-kind-t-key"},{"id":"Libtmux.Options.Kind.t.Number","publicId":"Libtmux.Options.Kind.t.Number","name":"Number","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Number","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Number","slug":"libtmux-options-kind-t-number"},{"id":"Libtmux.Options.Kind.t.Text","publicId":"Libtmux.Options.Kind.t.Text","name":"Text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Text","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Text","slug":"libtmux-options-kind-t-text"},{"id":"Libtmux.Options.catalog","publicId":"Libtmux.Options.catalog","qualifiedName":"Libtmux.Options.catalog","name":"catalog","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":865,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val catalog : version:string -> (descriptor Iarray.t, Error.t) result","source":{"file":"lib/libtmux.mli","line":865,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"val catalog : version:string -> (descriptor Iarray.t, Error.t) result","params":[{"name":"version","type":"string","keywordOnly":true}],"returns":"(descriptor Iarray.t, Error.t) result"}],"slug":"libtmux-options-catalog"},{"id":"Libtmux.Options.describe","publicId":"Libtmux.Options.describe","qualifiedName":"Libtmux.Options.describe","name":"describe","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":866,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val describe : version:string -> string -> (descriptor, Error.t) result","source":{"file":"lib/libtmux.mli","line":866,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"val describe : version:string -> string -> (descriptor, Error.t) result","params":[{"name":"version","type":"string","keywordOnly":true},{"name":"arg1","type":"string"}],"returns":"(descriptor, Error.t) result"}],"slug":"libtmux-options-describe"},{"id":"Libtmux.Options.descriptor","publicId":"Libtmux.Options.descriptor","qualifiedName":"Libtmux.Options.descriptor","name":"descriptor","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":823,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Generated upstream descriptors. [versions] lists qualified releases; user\n options have no built-in release history. "],"declarations":[{"kind":"struct","text":"type descriptor = {\n name : string;\n kind : Kind.t;\n array : bool;\n hook : bool;\n scopes : [ `Server | `Session | `Window | `Pane ] list;\n versions : string list;\n }","source":{"file":"lib/libtmux.mli","line":823,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options","doc":{"summary":"Generated upstream descriptors. `versions` lists qualified releases; user options have no built-in release history."},"signatures":[{"raw":"type descriptor =\n {\n name: string ;\n kind: Kind.t ;\n array: bool ;\n hook: bool ;\n scopes: [ `Server | `Session | `Window | `Pane ] list ;\n versions: string list }","params":[]}],"slug":"libtmux-options-descriptor"},{"id":"Libtmux.Options.descriptor.array","publicId":"Libtmux.Options.descriptor.array","name":"array","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":826,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"array : bool;","source":{"file":"lib/libtmux.mli","line":826,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.descriptor","type":"bool","qualifiedName":"Libtmux.Options.array","slug":"libtmux-options-descriptor-array"},{"id":"Libtmux.Options.descriptor.hook","publicId":"Libtmux.Options.descriptor.hook","name":"hook","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":827,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"hook : bool;","source":{"file":"lib/libtmux.mli","line":827,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.descriptor","type":"bool","qualifiedName":"Libtmux.Options.hook","slug":"libtmux-options-descriptor-hook"},{"id":"Libtmux.Options.descriptor.kind","publicId":"Libtmux.Options.descriptor.kind","name":"kind","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":825,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"kind : Kind.t;","source":{"file":"lib/libtmux.mli","line":825,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.descriptor","type":"Kind.t","qualifiedName":"Libtmux.Options.kind","slug":"libtmux-options-descriptor-kind"},{"id":"Libtmux.Options.descriptor.name","publicId":"Libtmux.Options.descriptor.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":824,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":824,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.descriptor","type":"string","qualifiedName":"Libtmux.Options.name","slug":"libtmux-options-descriptor-name"},{"id":"Libtmux.Options.descriptor.scopes","publicId":"Libtmux.Options.descriptor.scopes","name":"scopes","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":828,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scopes : [ `Server | `Session | `Window | `Pane ] list;","source":{"file":"lib/libtmux.mli","line":828,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.descriptor","type":"[ `Pane | `Server | `Session | `Window ] list","qualifiedName":"Libtmux.Options.scopes","slug":"libtmux-options-descriptor-scopes"},{"id":"Libtmux.Options.descriptor.versions","publicId":"Libtmux.Options.descriptor.versions","name":"versions","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":829,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"versions : string list;","source":{"file":"lib/libtmux.mli","line":829,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.descriptor","type":"string list","qualifiedName":"Libtmux.Options.versions","slug":"libtmux-options-descriptor-versions"},{"id":"Libtmux.Options.entry","publicId":"Libtmux.Options.entry","qualifiedName":"Libtmux.Options.entry","name":"entry","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":852,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type entry = { descriptor : descriptor; value : value; inherited : bool }","source":{"file":"lib/libtmux.mli","line":852,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"type entry = {\n descriptor: descriptor ;\n value: value ;\n inherited: bool }","params":[]}],"slug":"libtmux-options-entry"},{"id":"Libtmux.Options.entry.descriptor","publicId":"Libtmux.Options.entry.descriptor","name":"descriptor","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":852,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"descriptor : descriptor;","source":{"file":"lib/libtmux.mli","line":852,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.entry","type":"descriptor","qualifiedName":"Libtmux.Options.descriptor","slug":"libtmux-options-entry-descriptor"},{"id":"Libtmux.Options.entry.inherited","publicId":"Libtmux.Options.entry.inherited","name":"inherited","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":852,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"inherited : bool","source":{"file":"lib/libtmux.mli","line":852,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.entry","type":"bool","qualifiedName":"Libtmux.Options.inherited","slug":"libtmux-options-entry-inherited"},{"id":"Libtmux.Options.entry.value","publicId":"Libtmux.Options.entry.value","name":"value","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":852,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"value : value;","source":{"file":"lib/libtmux.mli","line":852,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.entry","type":"value","qualifiedName":"Libtmux.Options.value","slug":"libtmux-options-entry-value"},{"id":"Libtmux.Options.lookup","publicId":"Libtmux.Options.lookup","qualifiedName":"Libtmux.Options.lookup","name":"lookup","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":868,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" [None] means absent from this capture's selected scope and inheritance\n policy. Use [describe] to distinguish an unsupported built-in name. "],"declarations":[{"kind":"function","text":"val lookup : t -> string -> entry option","source":{"file":"lib/libtmux.mli","line":868,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options","doc":{"summary":"`None` means absent from this capture's selected scope and inheritance policy. Use `describe` to distinguish an unsupported built-in name."},"signatures":[{"raw":"val lookup : t -> string -> entry option","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"entry option"}],"slug":"libtmux-options-lookup"},{"id":"Libtmux.Options.scalar","publicId":"Libtmux.Options.scalar","qualifiedName":"Libtmux.Options.scalar","name":"scalar","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":842,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type scalar =\n | Text of string\n | Integer of int64\n | Bool of bool\n | Choice of string\n | Key of string\n | Colour of string\n | Commands of string","source":{"file":"lib/libtmux.mli","line":842,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"type scalar =\n | Text of string \n | Integer of int64 \n | Bool of bool \n | Choice of string \n | Key of string \n | Colour of string \n | Commands of string ","params":[]}],"slug":"libtmux-options-scalar"},{"id":"Libtmux.Options.scalar.Bool","publicId":"Libtmux.Options.scalar.Bool","name":"Bool","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":845,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Bool of bool","source":{"file":"lib/libtmux.mli","line":845,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Bool","slug":"libtmux-options-scalar-bool"},{"id":"Libtmux.Options.scalar.Choice","publicId":"Libtmux.Options.scalar.Choice","name":"Choice","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":846,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Choice of string","source":{"file":"lib/libtmux.mli","line":846,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Choice","slug":"libtmux-options-scalar-choice"},{"id":"Libtmux.Options.scalar.Colour","publicId":"Libtmux.Options.scalar.Colour","name":"Colour","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":848,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Colour of string","source":{"file":"lib/libtmux.mli","line":848,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Colour","slug":"libtmux-options-scalar-colour"},{"id":"Libtmux.Options.scalar.Commands","publicId":"Libtmux.Options.scalar.Commands","name":"Commands","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":849,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Commands of string","source":{"file":"lib/libtmux.mli","line":849,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Commands","slug":"libtmux-options-scalar-commands"},{"id":"Libtmux.Options.scalar.Integer","publicId":"Libtmux.Options.scalar.Integer","name":"Integer","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":844,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Integer of int64","source":{"file":"lib/libtmux.mli","line":844,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Integer","slug":"libtmux-options-scalar-integer"},{"id":"Libtmux.Options.scalar.Key","publicId":"Libtmux.Options.scalar.Key","name":"Key","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":847,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Key of string","source":{"file":"lib/libtmux.mli","line":847,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Key","slug":"libtmux-options-scalar-key"},{"id":"Libtmux.Options.scalar.Text","publicId":"Libtmux.Options.scalar.Text","name":"Text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":843,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text of string","source":{"file":"lib/libtmux.mli","line":843,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Text","slug":"libtmux-options-scalar-text"},{"id":"Libtmux.Options.scope","publicId":"Libtmux.Options.scope","qualifiedName":"Libtmux.Options.scope","name":"scope","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":834,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type scope =\n | Server\n | Global_sessions\n | Global_windows\n | Session of Session.target\n | Window of Window.target\n | Pane of Pane.target","source":{"file":"lib/libtmux.mli","line":834,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"type scope =\n | Server \n | Global_sessions \n | Global_windows \n | Session of Session.target \n | Window of Window.target \n | Pane of Pane.target ","params":[]}],"slug":"libtmux-options-scope"},{"id":"Libtmux.Options.scope.Global_sessions","publicId":"Libtmux.Options.scope.Global_sessions","name":"Global_sessions","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":836,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Global_sessions","source":{"file":"lib/libtmux.mli","line":836,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scope","variant":"unit","qualifiedName":"Libtmux.Options.Global_sessions","slug":"libtmux-options-scope-global_sessions"},{"id":"Libtmux.Options.scope.Global_windows","publicId":"Libtmux.Options.scope.Global_windows","name":"Global_windows","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":837,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Global_windows","source":{"file":"lib/libtmux.mli","line":837,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scope","variant":"unit","qualifiedName":"Libtmux.Options.Global_windows","slug":"libtmux-options-scope-global_windows"},{"id":"Libtmux.Options.scope.Pane","publicId":"Libtmux.Options.scope.Pane","name":"Pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":840,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Pane of Pane.target","source":{"file":"lib/libtmux.mli","line":840,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scope","variant":"tuple","qualifiedName":"Libtmux.Options.Pane","slug":"libtmux-options-scope-pane"},{"id":"Libtmux.Options.scope.Server","publicId":"Libtmux.Options.scope.Server","name":"Server","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":835,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Server","source":{"file":"lib/libtmux.mli","line":835,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scope","variant":"unit","qualifiedName":"Libtmux.Options.Server","slug":"libtmux-options-scope-server"},{"id":"Libtmux.Options.scope.Session","publicId":"Libtmux.Options.scope.Session","name":"Session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":838,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Session of Session.target","source":{"file":"lib/libtmux.mli","line":838,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scope","variant":"tuple","qualifiedName":"Libtmux.Options.Session","slug":"libtmux-options-scope-session"},{"id":"Libtmux.Options.scope.Window","publicId":"Libtmux.Options.scope.Window","name":"Window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":839,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window of Window.target","source":{"file":"lib/libtmux.mli","line":839,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.scope","variant":"tuple","qualifiedName":"Libtmux.Options.Window","slug":"libtmux-options-scope-window"},{"id":"Libtmux.Options.t","publicId":"Libtmux.Options.t","qualifiedName":"Libtmux.Options.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":854,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Captured options in tmux order, with original array indexes. An empty\n array differs from an absent local entry. No accessor performs I/O. "],"declarations":[{"kind":"struct","text":"type t = {\n source : Source.t;\n scope : scope;\n include_inherited : bool;\n entries : entry Iarray.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }","source":{"file":"lib/libtmux.mli","line":854,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options","doc":{"summary":"Captured options in tmux order, with original array indexes. An empty array differs from an absent local entry. No accessor performs I/O."},"signatures":[{"raw":"type t =\n {\n source: Source.t ;\n scope: scope ;\n include_inherited: bool ;\n entries: entry Iarray.t ;\n started_at_ns: int64 ;\n finished_at_ns: int64 }","params":[]}],"slug":"libtmux-options-t"},{"id":"Libtmux.Options.t.entries","publicId":"Libtmux.Options.t.entries","name":"entries","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":858,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"entries : entry Iarray.t;","source":{"file":"lib/libtmux.mli","line":858,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.t","type":"entry Iarray.t","qualifiedName":"Libtmux.Options.entries","slug":"libtmux-options-t-entries"},{"id":"Libtmux.Options.t.finished_at_ns","publicId":"Libtmux.Options.t.finished_at_ns","name":"finished_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":860,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"finished_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":860,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.t","type":"int64","qualifiedName":"Libtmux.Options.finished_at_ns","slug":"libtmux-options-t-finished_at_ns"},{"id":"Libtmux.Options.t.include_inherited","publicId":"Libtmux.Options.t.include_inherited","name":"include_inherited","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":857,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"include_inherited : bool;","source":{"file":"lib/libtmux.mli","line":857,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.t","type":"bool","qualifiedName":"Libtmux.Options.include_inherited","slug":"libtmux-options-t-include_inherited"},{"id":"Libtmux.Options.t.scope","publicId":"Libtmux.Options.t.scope","name":"scope","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":856,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scope : scope;","source":{"file":"lib/libtmux.mli","line":856,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.t","type":"scope","qualifiedName":"Libtmux.Options.scope","slug":"libtmux-options-t-scope"},{"id":"Libtmux.Options.t.source","publicId":"Libtmux.Options.t.source","name":"source","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":855,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"source : Source.t;","source":{"file":"lib/libtmux.mli","line":855,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.t","type":"Source.t","qualifiedName":"Libtmux.Options.source","slug":"libtmux-options-t-source"},{"id":"Libtmux.Options.t.started_at_ns","publicId":"Libtmux.Options.t.started_at_ns","name":"started_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":859,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"started_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":859,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.t","type":"int64","qualifiedName":"Libtmux.Options.started_at_ns","slug":"libtmux-options-t-started_at_ns"},{"id":"Libtmux.Options.value","publicId":"Libtmux.Options.value","qualifiedName":"Libtmux.Options.value","name":"value","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":851,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type value = Scalar of scalar | Array of (int * scalar) Iarray.t","source":{"file":"lib/libtmux.mli","line":851,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"type value =\n | Scalar of scalar \n | Array of (int * scalar) Iarray.t ","params":[]}],"slug":"libtmux-options-value"},{"id":"Libtmux.Options.value.Array","publicId":"Libtmux.Options.value.Array","name":"Array","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":851,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Array of (int * scalar) Iarray.t","source":{"file":"lib/libtmux.mli","line":851,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.value","variant":"tuple","qualifiedName":"Libtmux.Options.Array","slug":"libtmux-options-value-array"},{"id":"Libtmux.Options.value.Scalar","publicId":"Libtmux.Options.value.Scalar","name":"Scalar","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":851,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Scalar of scalar","source":{"file":"lib/libtmux.mli","line":851,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Options.value","variant":"tuple","qualifiedName":"Libtmux.Options.Scalar","slug":"libtmux-options-value-scalar"},{"id":"Libtmux.Output","publicId":"Libtmux.Output","qualifiedName":"Libtmux.Output","name":"Output","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1034,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Future observed pane bytes, local cursors and explicit continuity loss.\n Output cursors are unrelated to snapshot times or server-side history. "],"declarations":[{"kind":"module","text":"module Output : sig\n type cursor = { generation : Generation.t; offset : int64 }\n (** [offset] is the number of observed bytes through the end of a Data event.\n Cursors from different subscription generations are unrelated. No cursor\n identifies a snapshot instant or a server-side historical position. *)\n\n type reason =\n | Overflow\n | Membership_changed\n | Server_paused\n | Cancelled\n | Client_closed\n | Transport_error of Error.t\n\n type event =\n | Data of { cursor : cursor; bytes : string }\n | Gap of { after : cursor option; lost_bytes : int option; reason : reason }\n | End of reason\n (** Immutable event values. [Gap.after] is the last cursor delivered to\n the caller. Unknown loss is [None]. A gap ends continuity and is\n followed by End; recover with a fresh capture and a new\n subscription. Data preserves bytes, including NUL and invalid UTF-8.\n It is future observed output, not rendered text or historical\n reconstruction. *)\n\n val reason_pp : Format.formatter -> reason -> unit\n\n type wait_error =\n | Ended of reason\n | Failure of Error.t\n (** A future-byte wait either loses its subscription's continuity or\n fails an operation. Neither result establishes that the text was\n absent earlier. *)\nend","source":{"file":"lib/libtmux.mli","line":1034,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Future observed pane bytes, local cursors and explicit continuity loss. Output cursors are unrelated to snapshot times or server-side history."},"slug":"libtmux-output"},{"id":"Libtmux.Output.cursor","publicId":"Libtmux.Output.cursor","qualifiedName":"Libtmux.Output.cursor","name":"cursor","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1035,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" [offset] is the number of observed bytes through the end of a Data event.\n Cursors from different subscription generations are unrelated. No cursor\n identifies a snapshot instant or a server-side historical position. "],"declarations":[{"kind":"struct","text":"type cursor = { generation : Generation.t; offset : int64 }","source":{"file":"lib/libtmux.mli","line":1035,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output","doc":{"summary":"`offset` is the number of observed bytes through the end of a Data event. Cursors from different subscription generations are unrelated. No cursor identifies a snapshot instant or a server-side historical position."},"signatures":[{"raw":"type cursor = {\n generation: Generation.t ;\n offset: int64 }","params":[]}],"slug":"libtmux-output-cursor"},{"id":"Libtmux.Output.cursor.generation","publicId":"Libtmux.Output.cursor.generation","name":"generation","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1035,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"generation : Generation.t;","source":{"file":"lib/libtmux.mli","line":1035,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.cursor","type":"Generation.t","qualifiedName":"Libtmux.Output.generation","slug":"libtmux-output-cursor-generation"},{"id":"Libtmux.Output.cursor.offset","publicId":"Libtmux.Output.cursor.offset","name":"offset","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1035,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"offset : int64","source":{"file":"lib/libtmux.mli","line":1035,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.cursor","type":"int64","qualifiedName":"Libtmux.Output.offset","slug":"libtmux-output-cursor-offset"},{"id":"Libtmux.Output.event","publicId":"Libtmux.Output.event","qualifiedName":"Libtmux.Output.event","name":"event","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1048,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type event =\n | Data of { cursor : cursor; bytes : string }\n | Gap of { after : cursor option; lost_bytes : int option; reason : reason }\n | End of reason","source":{"file":"lib/libtmux.mli","line":1048,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output","signatures":[{"raw":"type event =\n | Data of {\n cursor: cursor ;\n bytes: string } \n | Gap of {\n after: cursor option ;\n lost_bytes: int option ;\n reason: reason } \n | End of reason ","params":[]}],"slug":"libtmux-output-event"},{"id":"Libtmux.Output.event.Data","publicId":"Libtmux.Output.event.Data","name":"Data","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1049,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Data of { cursor : cursor; bytes : string }","source":{"file":"lib/libtmux.mli","line":1049,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.event","variant":"struct","qualifiedName":"Libtmux.Output.Data","slug":"libtmux-output-event-data"},{"id":"Libtmux.Output.event.Data.bytes","publicId":"Libtmux.Output.event.Data.bytes","name":"bytes","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1049,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"bytes : string","source":{"file":"lib/libtmux.mli","line":1049,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.event.Data","type":"string","qualifiedName":"Libtmux.Output.bytes","slug":"libtmux-output-event-data-bytes"},{"id":"Libtmux.Output.event.Data.cursor","publicId":"Libtmux.Output.event.Data.cursor","name":"cursor","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1049,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cursor : cursor;","source":{"file":"lib/libtmux.mli","line":1049,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.event.Data","type":"cursor","qualifiedName":"Libtmux.Output.cursor","slug":"libtmux-output-event-data-cursor"},{"id":"Libtmux.Output.event.End","publicId":"Libtmux.Output.event.End","name":"End","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1051,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Immutable event values. [Gap.after] is the last cursor delivered to\n the caller. Unknown loss is [None]. A gap ends continuity and is\n followed by End; recover with a fresh capture and a new\n subscription. Data preserves bytes, including NUL and invalid UTF-8.\n It is future observed output, not rendered text or historical\n reconstruction. "],"declarations":[{"kind":"constant","text":"| End of reason","source":{"file":"lib/libtmux.mli","line":1051,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.event","doc":{"summary":"Immutable event values. `Gap.after` is the last cursor delivered to the caller. Unknown loss is `None`. A gap ends continuity and is followed by End; recover with a fresh capture and a new subscription. Data preserves bytes, including NUL and invalid UTF-8. It is future observed output, not rendered text or historical reconstruction."},"variant":"tuple","qualifiedName":"Libtmux.Output.End","slug":"libtmux-output-event-end"},{"id":"Libtmux.Output.event.Gap","publicId":"Libtmux.Output.event.Gap","name":"Gap","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1050,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Gap of { after : cursor option; lost_bytes : int option; reason : reason }","source":{"file":"lib/libtmux.mli","line":1050,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.event","variant":"struct","qualifiedName":"Libtmux.Output.Gap","slug":"libtmux-output-event-gap"},{"id":"Libtmux.Output.event.Gap.after","publicId":"Libtmux.Output.event.Gap.after","name":"after","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1050,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"after : cursor option;","source":{"file":"lib/libtmux.mli","line":1050,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.event.Gap","type":"cursor option","qualifiedName":"Libtmux.Output.after","slug":"libtmux-output-event-gap-after"},{"id":"Libtmux.Output.event.Gap.lost_bytes","publicId":"Libtmux.Output.event.Gap.lost_bytes","name":"lost_bytes","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1050,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"lost_bytes : int option;","source":{"file":"lib/libtmux.mli","line":1050,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.event.Gap","type":"int option","qualifiedName":"Libtmux.Output.lost_bytes","slug":"libtmux-output-event-gap-lost_bytes"},{"id":"Libtmux.Output.event.Gap.reason","publicId":"Libtmux.Output.event.Gap.reason","name":"reason","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1050,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"reason : reason","source":{"file":"lib/libtmux.mli","line":1050,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.event.Gap","type":"reason","qualifiedName":"Libtmux.Output.reason","slug":"libtmux-output-event-gap-reason"},{"id":"Libtmux.Output.reason","publicId":"Libtmux.Output.reason","qualifiedName":"Libtmux.Output.reason","name":"reason","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1040,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type reason =\n | Overflow\n | Membership_changed\n | Server_paused\n | Cancelled\n | Client_closed\n | Transport_error of Error.t","source":{"file":"lib/libtmux.mli","line":1040,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output","signatures":[{"raw":"type reason =\n | Overflow \n | Membership_changed \n | Server_paused \n | Cancelled \n | Client_closed \n | Transport_error of Error.t ","params":[]}],"slug":"libtmux-output-reason"},{"id":"Libtmux.Output.reason.Cancelled","publicId":"Libtmux.Output.reason.Cancelled","name":"Cancelled","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1044,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Cancelled","source":{"file":"lib/libtmux.mli","line":1044,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.reason","variant":"unit","qualifiedName":"Libtmux.Output.Cancelled","slug":"libtmux-output-reason-cancelled"},{"id":"Libtmux.Output.reason.Client_closed","publicId":"Libtmux.Output.reason.Client_closed","name":"Client_closed","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1045,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Client_closed","source":{"file":"lib/libtmux.mli","line":1045,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.reason","variant":"unit","qualifiedName":"Libtmux.Output.Client_closed","slug":"libtmux-output-reason-client_closed"},{"id":"Libtmux.Output.reason.Membership_changed","publicId":"Libtmux.Output.reason.Membership_changed","name":"Membership_changed","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1042,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Membership_changed","source":{"file":"lib/libtmux.mli","line":1042,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.reason","variant":"unit","qualifiedName":"Libtmux.Output.Membership_changed","slug":"libtmux-output-reason-membership_changed"},{"id":"Libtmux.Output.reason.Overflow","publicId":"Libtmux.Output.reason.Overflow","name":"Overflow","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1041,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Overflow","source":{"file":"lib/libtmux.mli","line":1041,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.reason","variant":"unit","qualifiedName":"Libtmux.Output.Overflow","slug":"libtmux-output-reason-overflow"},{"id":"Libtmux.Output.reason.Server_paused","publicId":"Libtmux.Output.reason.Server_paused","name":"Server_paused","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1043,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Server_paused","source":{"file":"lib/libtmux.mli","line":1043,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.reason","variant":"unit","qualifiedName":"Libtmux.Output.Server_paused","slug":"libtmux-output-reason-server_paused"},{"id":"Libtmux.Output.reason.Transport_error","publicId":"Libtmux.Output.reason.Transport_error","name":"Transport_error","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1046,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Transport_error of Error.t","source":{"file":"lib/libtmux.mli","line":1046,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.reason","variant":"tuple","qualifiedName":"Libtmux.Output.Transport_error","slug":"libtmux-output-reason-transport_error"},{"id":"Libtmux.Output.reason_pp","publicId":"Libtmux.Output.reason_pp","qualifiedName":"Libtmux.Output.reason_pp","name":"reason_pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1059,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val reason_pp : Format.formatter -> reason -> unit","source":{"file":"lib/libtmux.mli","line":1059,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output","signatures":[{"raw":"val reason_pp : Format.formatter -> reason -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"reason"}],"returns":"unit"}],"slug":"libtmux-output-reason_pp"},{"id":"Libtmux.Output.wait_error","publicId":"Libtmux.Output.wait_error","qualifiedName":"Libtmux.Output.wait_error","name":"wait_error","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1061,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type wait_error =\n | Ended of reason\n | Failure of Error.t","source":{"file":"lib/libtmux.mli","line":1061,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output","signatures":[{"raw":"type wait_error =\n | Ended of reason \n | Failure of Error.t ","params":[]}],"slug":"libtmux-output-wait_error"},{"id":"Libtmux.Output.wait_error.Ended","publicId":"Libtmux.Output.wait_error.Ended","name":"Ended","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1062,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Ended of reason","source":{"file":"lib/libtmux.mli","line":1062,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.wait_error","variant":"tuple","qualifiedName":"Libtmux.Output.Ended","slug":"libtmux-output-wait_error-ended"},{"id":"Libtmux.Output.wait_error.Failure","publicId":"Libtmux.Output.wait_error.Failure","name":"Failure","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1063,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" A future-byte wait either loses its subscription's continuity or\n fails an operation. Neither result establishes that the text was\n absent earlier. "],"declarations":[{"kind":"constant","text":"| Failure of Error.t","source":{"file":"lib/libtmux.mli","line":1063,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Output.wait_error","doc":{"summary":"A future-byte wait either loses its subscription's continuity or fails an operation. Neither result establishes that the text was absent earlier."},"variant":"tuple","qualifiedName":"Libtmux.Output.Failure","slug":"libtmux-output-wait_error-failure"},{"id":"Libtmux.Pane","publicId":"Libtmux.Pane","qualifiedName":"Libtmux.Pane","name":"Pane","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":306,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" A captured pane with local geometry, process metadata and a window\n relationship. Use {!Pane.val-target} for explicit actions; reading the\n observation never refreshes it. "],"declarations":[{"kind":"module","text":"and Pane : sig\n type t\n\n module Fields : sig\n val id : (t, string) Field.t\n val index : (t, int) Field.t\n val active : (t, bool) Field.t\n val dead : (t, bool) Field.t\n val title : (t, string) Field.t\n val current_command : (t, string) Field.t\n val current_path : (t, string) Field.t\n val width : (t, int) Field.t\n val height : (t, int) Field.t\n val left : (t, int) Field.t\n val top : (t, int) Field.t\n end\n\n module Relations : sig\n val window : (t, Window.t) Relation.One.t\n end\n\n module Id : ID\n\n module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n val source : t -> Source.t\n val id : t -> Id.t\n end\n\n type target = Target.t\n\n val id : t -> Id.t\n val index : t -> int\n val active : t -> bool\n val dead : t -> bool\n val title : t -> string\n val current_command : t -> string\n val current_path : t -> string\n\n val pid : t -> int option\n (** The captured process ID, absent when tmux reports no process. *)\n\n val width : t -> int\n val height : t -> int\n val left : t -> int\n val top : t -> int\n val window : t -> Window.t\n val source : t -> Source.t\n val target : t -> target\n\n val same_entity : t -> t -> bool\n (** Compare IDs within the same bound {!Source.t} generation. *)\n\n val same_observation : t -> t -> bool\n (** Compare entity identity and snapshot identity. *)\nend","source":{"file":"lib/libtmux.mli","line":306,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"A captured pane with local geometry, process metadata and a window relationship. Use {!Pane.val-target} for explicit actions; reading the observation never refreshes it."},"slug":"libtmux-pane"},{"id":"Libtmux.Pane.Fields","publicId":"Libtmux.Pane.Fields","qualifiedName":"Libtmux.Pane.Fields","name":"Fields","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":309,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Fields : sig\n val id : (t, string) Field.t\n val index : (t, int) Field.t\n val active : (t, bool) Field.t\n val dead : (t, bool) Field.t\n val title : (t, string) Field.t\n val current_command : (t, string) Field.t\n val current_path : (t, string) Field.t\n val width : (t, int) Field.t\n val height : (t, int) Field.t\n val left : (t, int) Field.t\n val top : (t, int) Field.t\n end","source":{"file":"lib/libtmux.mli","line":309,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","slug":"libtmux-pane-fields"},{"id":"Libtmux.Pane.Fields.active","publicId":"Libtmux.Pane.Fields.active","qualifiedName":"Libtmux.Pane.Fields.active","name":"active","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":312,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val active : (t, bool) Field.t","source":{"file":"lib/libtmux.mli","line":312,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val active : (t, bool) Field.t","params":[],"returns":"(t, bool) Field.t"}],"slug":"libtmux-pane-fields-active"},{"id":"Libtmux.Pane.Fields.current_command","publicId":"Libtmux.Pane.Fields.current_command","qualifiedName":"Libtmux.Pane.Fields.current_command","name":"current_command","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":315,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val current_command : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":315,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val current_command : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-pane-fields-current_command"},{"id":"Libtmux.Pane.Fields.current_path","publicId":"Libtmux.Pane.Fields.current_path","qualifiedName":"Libtmux.Pane.Fields.current_path","name":"current_path","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":316,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val current_path : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":316,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val current_path : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-pane-fields-current_path"},{"id":"Libtmux.Pane.Fields.dead","publicId":"Libtmux.Pane.Fields.dead","qualifiedName":"Libtmux.Pane.Fields.dead","name":"dead","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":313,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val dead : (t, bool) Field.t","source":{"file":"lib/libtmux.mli","line":313,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val dead : (t, bool) Field.t","params":[],"returns":"(t, bool) Field.t"}],"slug":"libtmux-pane-fields-dead"},{"id":"Libtmux.Pane.Fields.height","publicId":"Libtmux.Pane.Fields.height","qualifiedName":"Libtmux.Pane.Fields.height","name":"height","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":318,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val height : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":318,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val height : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-pane-fields-height"},{"id":"Libtmux.Pane.Fields.id","publicId":"Libtmux.Pane.Fields.id","qualifiedName":"Libtmux.Pane.Fields.id","name":"id","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":310,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val id : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":310,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val id : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-pane-fields-id"},{"id":"Libtmux.Pane.Fields.index","publicId":"Libtmux.Pane.Fields.index","qualifiedName":"Libtmux.Pane.Fields.index","name":"index","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":311,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val index : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":311,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val index : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-pane-fields-index"},{"id":"Libtmux.Pane.Fields.left","publicId":"Libtmux.Pane.Fields.left","qualifiedName":"Libtmux.Pane.Fields.left","name":"left","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":319,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val left : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":319,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val left : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-pane-fields-left"},{"id":"Libtmux.Pane.Fields.title","publicId":"Libtmux.Pane.Fields.title","qualifiedName":"Libtmux.Pane.Fields.title","name":"title","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":314,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val title : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":314,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val title : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-pane-fields-title"},{"id":"Libtmux.Pane.Fields.top","publicId":"Libtmux.Pane.Fields.top","qualifiedName":"Libtmux.Pane.Fields.top","name":"top","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":320,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val top : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":320,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val top : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-pane-fields-top"},{"id":"Libtmux.Pane.Fields.width","publicId":"Libtmux.Pane.Fields.width","qualifiedName":"Libtmux.Pane.Fields.width","name":"width","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":317,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val width : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":317,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val width : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-pane-fields-width"},{"id":"Libtmux.Pane.Id","publicId":"Libtmux.Pane.Id","qualifiedName":"Libtmux.Pane.Id","name":"Id","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":327,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Id : ID","source":{"file":"lib/libtmux.mli","line":327,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","slug":"libtmux-pane-id-16to"},{"id":"Libtmux.Pane.Id.compare","publicId":"Libtmux.Pane.Id.compare","qualifiedName":"Libtmux.Pane.Id.compare","name":"compare","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":136,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val compare : t -> t -> int","source":{"file":"lib/libtmux.mli","line":136,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Id","signatures":[{"raw":"val compare : t -> t -> int","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-id-compare"},{"id":"Libtmux.Pane.Id.equal","publicId":"Libtmux.Pane.Id.equal","qualifiedName":"Libtmux.Pane.Id.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Id","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-pane-id-equal"},{"id":"Libtmux.Pane.Id.of_string","publicId":"Libtmux.Pane.Id.of_string","qualifiedName":"Libtmux.Pane.Id.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Accept a canonical prefixed decimal tmux ID in the uint32 range. "],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Id","doc":{"summary":"Accept a canonical prefixed decimal tmux ID in the uint32 range."},"signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-pane-id-of_string"},{"id":"Libtmux.Pane.Id.pp","publicId":"Libtmux.Pane.Id.pp","qualifiedName":"Libtmux.Pane.Id.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":137,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":137,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Id","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-pane-id-pp"},{"id":"Libtmux.Pane.Id.t","publicId":"Libtmux.Pane.Id.t","qualifiedName":"Libtmux.Pane.Id.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Id","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-pane-id-t"},{"id":"Libtmux.Pane.Id.to_string","publicId":"Libtmux.Pane.Id.to_string","qualifiedName":"Libtmux.Pane.Id.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":134,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":134,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Id","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-pane-id-to_string"},{"id":"Libtmux.Pane.Relations","publicId":"Libtmux.Pane.Relations","qualifiedName":"Libtmux.Pane.Relations","name":"Relations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":323,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Relations : sig\n val window : (t, Window.t) Relation.One.t\n end","source":{"file":"lib/libtmux.mli","line":323,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","slug":"libtmux-pane-relations"},{"id":"Libtmux.Pane.Relations.window","publicId":"Libtmux.Pane.Relations.window","qualifiedName":"Libtmux.Pane.Relations.window","name":"window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":324,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val window : (t, Window.t) Relation.One.t","source":{"file":"lib/libtmux.mli","line":324,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Relations","signatures":[{"raw":"val window : (t, Window.t) Relation.One.t","params":[],"returns":"(t, Window.t) Relation.One.t"}],"slug":"libtmux-pane-relations-window"},{"id":"Libtmux.Pane.Target","publicId":"Libtmux.Pane.Target","qualifiedName":"Libtmux.Pane.Target","name":"Target","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":329,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n val source : t -> Source.t\n val id : t -> Id.t\n end","source":{"file":"lib/libtmux.mli","line":329,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","slug":"libtmux-pane-target-nx8w"},{"id":"Libtmux.Pane.Target.id","publicId":"Libtmux.Pane.Target.id","qualifiedName":"Libtmux.Pane.Target.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":334,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":334,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Target","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-pane-target-id"},{"id":"Libtmux.Pane.Target.of_id","publicId":"Libtmux.Pane.Target.of_id","qualifiedName":"Libtmux.Pane.Target.of_id","name":"of_id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":332,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val of_id : source:Source.t -> Id.t -> t","source":{"file":"lib/libtmux.mli","line":332,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Target","signatures":[{"raw":"val of_id : source:Source.t -> Id.t -> t","params":[{"name":"source","type":"Source.t","keywordOnly":true},{"name":"arg1","type":"Id.t"}],"returns":"t"}],"slug":"libtmux-pane-target-of_id"},{"id":"Libtmux.Pane.Target.source","publicId":"Libtmux.Pane.Target.source","qualifiedName":"Libtmux.Pane.Target.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":333,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":333,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Target","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-pane-target-source"},{"id":"Libtmux.Pane.Target.t","publicId":"Libtmux.Pane.Target.t","qualifiedName":"Libtmux.Pane.Target.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":330,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":330,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane.Target","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-pane-target-t"},{"id":"Libtmux.Pane.active","publicId":"Libtmux.Pane.active","qualifiedName":"Libtmux.Pane.active","name":"active","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":341,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val active : t -> bool","source":{"file":"lib/libtmux.mli","line":341,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val active : t -> bool","params":[{"name":"arg1","type":"t"}],"returns":"bool"}],"slug":"libtmux-pane-active"},{"id":"Libtmux.Pane.current_command","publicId":"Libtmux.Pane.current_command","qualifiedName":"Libtmux.Pane.current_command","name":"current_command","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":344,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val current_command : t -> string","source":{"file":"lib/libtmux.mli","line":344,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val current_command : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-pane-current_command"},{"id":"Libtmux.Pane.current_path","publicId":"Libtmux.Pane.current_path","qualifiedName":"Libtmux.Pane.current_path","name":"current_path","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":345,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val current_path : t -> string","source":{"file":"lib/libtmux.mli","line":345,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val current_path : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-pane-current_path"},{"id":"Libtmux.Pane.dead","publicId":"Libtmux.Pane.dead","qualifiedName":"Libtmux.Pane.dead","name":"dead","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":342,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val dead : t -> bool","source":{"file":"lib/libtmux.mli","line":342,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val dead : t -> bool","params":[{"name":"arg1","type":"t"}],"returns":"bool"}],"slug":"libtmux-pane-dead"},{"id":"Libtmux.Pane.height","publicId":"Libtmux.Pane.height","qualifiedName":"Libtmux.Pane.height","name":"height","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":351,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val height : t -> int","source":{"file":"lib/libtmux.mli","line":351,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val height : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-height"},{"id":"Libtmux.Pane.id","publicId":"Libtmux.Pane.id","qualifiedName":"Libtmux.Pane.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":339,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":339,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-pane-id-19ve"},{"id":"Libtmux.Pane.index","publicId":"Libtmux.Pane.index","qualifiedName":"Libtmux.Pane.index","name":"index","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":340,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val index : t -> int","source":{"file":"lib/libtmux.mli","line":340,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val index : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-index"},{"id":"Libtmux.Pane.left","publicId":"Libtmux.Pane.left","qualifiedName":"Libtmux.Pane.left","name":"left","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":352,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val left : t -> int","source":{"file":"lib/libtmux.mli","line":352,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val left : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-left"},{"id":"Libtmux.Pane.pid","publicId":"Libtmux.Pane.pid","qualifiedName":"Libtmux.Pane.pid","name":"pid","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":347,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" The captured process ID, absent when tmux reports no process. "],"declarations":[{"kind":"function","text":"val pid : t -> int option","source":{"file":"lib/libtmux.mli","line":347,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","doc":{"summary":"The captured process ID, absent when tmux reports no process."},"signatures":[{"raw":"val pid : t -> int option","params":[{"name":"arg1","type":"t"}],"returns":"int option"}],"slug":"libtmux-pane-pid"},{"id":"Libtmux.Pane.same_entity","publicId":"Libtmux.Pane.same_entity","qualifiedName":"Libtmux.Pane.same_entity","name":"same_entity","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":358,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Compare IDs within the same bound {!Source.t} generation. "],"declarations":[{"kind":"function","text":"val same_entity : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":358,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","doc":{"summary":"Compare IDs within the same bound {!Source.t} generation."},"signatures":[{"raw":"val same_entity : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-pane-same_entity"},{"id":"Libtmux.Pane.same_observation","publicId":"Libtmux.Pane.same_observation","qualifiedName":"Libtmux.Pane.same_observation","name":"same_observation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":361,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Compare entity identity and snapshot identity. "],"declarations":[{"kind":"function","text":"val same_observation : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":361,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","doc":{"summary":"Compare entity identity and snapshot identity."},"signatures":[{"raw":"val same_observation : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-pane-same_observation"},{"id":"Libtmux.Pane.source","publicId":"Libtmux.Pane.source","qualifiedName":"Libtmux.Pane.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":355,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":355,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-pane-source"},{"id":"Libtmux.Pane.t","publicId":"Libtmux.Pane.t","qualifiedName":"Libtmux.Pane.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":307,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":307,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-pane-t"},{"id":"Libtmux.Pane.target","publicId":"Libtmux.Pane.target","qualifiedName":"Libtmux.Pane.target","name":"target","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":356,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val target : t -> target","source":{"file":"lib/libtmux.mli","line":356,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val target : t -> target","params":[{"name":"arg1","type":"t"}],"returns":"target"}],"slug":"libtmux-pane-target-t3h1"},{"id":"Libtmux.Pane.target:type","publicId":"Libtmux.Pane.target:type","qualifiedName":"Libtmux.Pane.target","name":"target","kind":"typealias","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":337,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type target = Target.t","source":{"file":"lib/libtmux.mli","line":337,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","type":"Target.t","signatures":[{"raw":"type target = Target.t","params":[]}],"slug":"libtmux-pane-target-type"},{"id":"Libtmux.Pane.title","publicId":"Libtmux.Pane.title","qualifiedName":"Libtmux.Pane.title","name":"title","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":343,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val title : t -> string","source":{"file":"lib/libtmux.mli","line":343,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val title : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-pane-title"},{"id":"Libtmux.Pane.top","publicId":"Libtmux.Pane.top","qualifiedName":"Libtmux.Pane.top","name":"top","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":353,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val top : t -> int","source":{"file":"lib/libtmux.mli","line":353,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val top : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-top"},{"id":"Libtmux.Pane.width","publicId":"Libtmux.Pane.width","qualifiedName":"Libtmux.Pane.width","name":"width","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":350,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val width : t -> int","source":{"file":"lib/libtmux.mli","line":350,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val width : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-width"},{"id":"Libtmux.Pane.window","publicId":"Libtmux.Pane.window","qualifiedName":"Libtmux.Pane.window","name":"window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":354,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val window : t -> Window.t","source":{"file":"lib/libtmux.mli","line":354,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val window : t -> Window.t","params":[{"name":"arg1","type":"t"}],"returns":"Window.t"}],"slug":"libtmux-pane-window"},{"id":"Libtmux.Plan","publicId":"Libtmux.Plan","qualifiedName":"Libtmux.Plan","name":"Plan","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":666,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Explicit source-filter planning for a new acquisition. A plan separates\n supported tmux predicates from residual local evaluation; it never changes\n the I/O-free contract of {!Query.matching}. Backend capture operations\n acquire a complete graph and do not consume these plans. "],"declarations":[{"kind":"module","text":"module Plan : sig\n type pushdown = Auto | Never | Require_exact\n type t\n\n val panes : ?pushdown:pushdown -> Pane.t Expr.t -> (t, Error.t) result\n (** Plan without I/O. Exact lowering covers pane active/dead flags and\n complete Boolean combinations. Unsupported children prevent lowering the\n whole expression, including under OR and NOT. Relationships always stay\n local. [Require_exact] rejects an unsupported expression before\n acquisition. *)\n\n val source_filter : t -> string option\n val residual : t -> Pane.t Expr.t\n val required_fields : t -> string list\n val required_relations : t -> string list\n val explanation : t -> string\n val pp : Format.formatter -> t -> unit\nend","source":{"file":"lib/libtmux.mli","line":666,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Explicit source-filter planning for a new acquisition. A plan separates supported tmux predicates from residual local evaluation; it never changes the I/O-free contract of {!Query.matching}. Backend capture operations acquire a complete graph and do not consume these plans."},"slug":"libtmux-plan"},{"id":"Libtmux.Plan.explanation","publicId":"Libtmux.Plan.explanation","qualifiedName":"Libtmux.Plan.explanation","name":"explanation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":681,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val explanation : t -> string","source":{"file":"lib/libtmux.mli","line":681,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val explanation : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-plan-explanation"},{"id":"Libtmux.Plan.panes","publicId":"Libtmux.Plan.panes","qualifiedName":"Libtmux.Plan.panes","name":"panes","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":670,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Plan without I/O. Exact lowering covers pane active/dead flags and\n complete Boolean combinations. Unsupported children prevent lowering the\n whole expression, including under OR and NOT. Relationships always stay\n local. [Require_exact] rejects an unsupported expression before\n acquisition. "],"declarations":[{"kind":"function","text":"val panes : ?pushdown:pushdown -> Pane.t Expr.t -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":670,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan","doc":{"summary":"Plan without I/O. Exact lowering covers pane active/dead flags and complete Boolean combinations. Unsupported children prevent lowering the whole expression, including under OR and NOT. Relationships always stay local. `Require_exact` rejects an unsupported expression before acquisition."},"signatures":[{"raw":"val panes : ?pushdown:pushdown -> Pane.t Expr.t -> (t, Error.t) result","params":[{"name":"pushdown","type":"pushdown","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.t Expr.t"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-plan-panes"},{"id":"Libtmux.Plan.pp","publicId":"Libtmux.Plan.pp","qualifiedName":"Libtmux.Plan.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":682,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":682,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-plan-pp"},{"id":"Libtmux.Plan.pushdown","publicId":"Libtmux.Plan.pushdown","qualifiedName":"Libtmux.Plan.pushdown","name":"pushdown","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":667,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type pushdown = Auto | Never | Require_exact","source":{"file":"lib/libtmux.mli","line":667,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"type pushdown =\n | Auto \n | Never \n | Require_exact ","params":[]}],"slug":"libtmux-plan-pushdown"},{"id":"Libtmux.Plan.pushdown.Auto","publicId":"Libtmux.Plan.pushdown.Auto","name":"Auto","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":667,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Auto","source":{"file":"lib/libtmux.mli","line":667,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan.pushdown","variant":"unit","qualifiedName":"Libtmux.Plan.Auto","slug":"libtmux-plan-pushdown-auto"},{"id":"Libtmux.Plan.pushdown.Never","publicId":"Libtmux.Plan.pushdown.Never","name":"Never","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":667,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Never","source":{"file":"lib/libtmux.mli","line":667,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan.pushdown","variant":"unit","qualifiedName":"Libtmux.Plan.Never","slug":"libtmux-plan-pushdown-never"},{"id":"Libtmux.Plan.pushdown.Require_exact","publicId":"Libtmux.Plan.pushdown.Require_exact","name":"Require_exact","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":667,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Require_exact","source":{"file":"lib/libtmux.mli","line":667,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan.pushdown","variant":"unit","qualifiedName":"Libtmux.Plan.Require_exact","slug":"libtmux-plan-pushdown-require_exact"},{"id":"Libtmux.Plan.required_fields","publicId":"Libtmux.Plan.required_fields","qualifiedName":"Libtmux.Plan.required_fields","name":"required_fields","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":679,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val required_fields : t -> string list","source":{"file":"lib/libtmux.mli","line":679,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val required_fields : t -> string list","params":[{"name":"arg1","type":"t"}],"returns":"string list"}],"slug":"libtmux-plan-required_fields"},{"id":"Libtmux.Plan.required_relations","publicId":"Libtmux.Plan.required_relations","qualifiedName":"Libtmux.Plan.required_relations","name":"required_relations","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":680,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val required_relations : t -> string list","source":{"file":"lib/libtmux.mli","line":680,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val required_relations : t -> string list","params":[{"name":"arg1","type":"t"}],"returns":"string list"}],"slug":"libtmux-plan-required_relations"},{"id":"Libtmux.Plan.residual","publicId":"Libtmux.Plan.residual","qualifiedName":"Libtmux.Plan.residual","name":"residual","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":678,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val residual : t -> Pane.t Expr.t","source":{"file":"lib/libtmux.mli","line":678,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val residual : t -> Pane.t Expr.t","params":[{"name":"arg1","type":"t"}],"returns":"Pane.t Expr.t"}],"slug":"libtmux-plan-residual"},{"id":"Libtmux.Plan.source_filter","publicId":"Libtmux.Plan.source_filter","qualifiedName":"Libtmux.Plan.source_filter","name":"source_filter","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":677,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source_filter : t -> string option","source":{"file":"lib/libtmux.mli","line":677,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val source_filter : t -> string option","params":[{"name":"arg1","type":"t"}],"returns":"string option"}],"slug":"libtmux-plan-source_filter"},{"id":"Libtmux.Plan.t","publicId":"Libtmux.Plan.t","qualifiedName":"Libtmux.Plan.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":668,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":668,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-plan-t"},{"id":"Libtmux.Query","publicId":"Libtmux.Query","qualifiedName":"Libtmux.Query","name":"Query","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":694,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Sequence adapters and bounded cardinality checks over captured values.\n Matching preserves order and duplicates. Expected absence and ambiguity\n remain ordinary result values. "],"declarations":[{"kind":"module","text":"module Query : sig\n val matching : 'a Expr.t -> 'a Seq.t -> 'a Seq.t\n (** [matching expression] compiles once when the adapter is constructed.\n Filtering preserves order and duplicates. Snapshot-derived sequences\n replay captured values; arbitrary input sequences retain their effects,\n exceptions and replay semantics. No tmux acquisition occurs. *)\n\n val exactly_one : 'a Seq.t -> ('a, Cardinality.error) result\n (** Return the unique value. Stop when a second value is found; proving\n uniqueness requires exhausting the remaining sequence. The input's effects\n and exceptions propagate. This does not execute a mutation. *)\n\n val one_or_none : 'a Seq.t -> ('a option, Cardinality.error) result\n (** As {!exactly_one}, with [Ok None] for an empty sequence. Order and\n duplicate entries count toward cardinality; values are not deduplicated.\n *)\nend","source":{"file":"lib/libtmux.mli","line":694,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Sequence adapters and bounded cardinality checks over captured values. Matching preserves order and duplicates. Expected absence and ambiguity remain ordinary result values."},"slug":"libtmux-query"},{"id":"Libtmux.Query.exactly_one","publicId":"Libtmux.Query.exactly_one","qualifiedName":"Libtmux.Query.exactly_one","name":"exactly_one","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":701,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Return the unique value. Stop when a second value is found; proving\n uniqueness requires exhausting the remaining sequence. The input's effects\n and exceptions propagate. This does not execute a mutation. "],"declarations":[{"kind":"function","text":"val exactly_one : 'a Seq.t -> ('a, Cardinality.error) result","source":{"file":"lib/libtmux.mli","line":701,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Query","doc":{"summary":"Return the unique value. Stop when a second value is found; proving uniqueness requires exhausting the remaining sequence. The input's effects and exceptions propagate. This does not execute a mutation."},"signatures":[{"raw":"val exactly_one : 'a Seq.t -> ('a, Cardinality.error) result","params":[{"name":"arg1","type":"'a Seq.t"}],"returns":"('a, Cardinality.error) result"}],"slug":"libtmux-query-exactly_one"},{"id":"Libtmux.Query.matching","publicId":"Libtmux.Query.matching","qualifiedName":"Libtmux.Query.matching","name":"matching","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":695,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" [matching expression] compiles once when the adapter is constructed.\n Filtering preserves order and duplicates. Snapshot-derived sequences\n replay captured values; arbitrary input sequences retain their effects,\n exceptions and replay semantics. No tmux acquisition occurs. "],"declarations":[{"kind":"function","text":"val matching : 'a Expr.t -> 'a Seq.t -> 'a Seq.t","source":{"file":"lib/libtmux.mli","line":695,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Query","doc":{"summary":"`matching expression` compiles once when the adapter is constructed. Filtering preserves order and duplicates. Snapshot-derived sequences replay captured values; arbitrary input sequences retain their effects, exceptions and replay semantics. No tmux acquisition occurs."},"signatures":[{"raw":"val matching : 'a Expr.t -> 'a Seq.t -> 'a Seq.t","params":[{"name":"arg1","type":"'a Expr.t"},{"name":"arg2","type":"'a Seq.t"}],"returns":"'a Seq.t"}],"slug":"libtmux-query-matching"},{"id":"Libtmux.Query.one_or_none","publicId":"Libtmux.Query.one_or_none","qualifiedName":"Libtmux.Query.one_or_none","name":"one_or_none","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":706,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" As {!exactly_one}, with [Ok None] for an empty sequence. Order and\n duplicate entries count toward cardinality; values are not deduplicated.\n "],"declarations":[{"kind":"function","text":"val one_or_none : 'a Seq.t -> ('a option, Cardinality.error) result","source":{"file":"lib/libtmux.mli","line":706,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Query","doc":{"summary":"As {!exactly_one}, with `Ok None` for an empty sequence. Order and duplicate entries count toward cardinality; values are not deduplicated."},"signatures":[{"raw":"val one_or_none : 'a Seq.t -> ('a option, Cardinality.error) result","params":[{"name":"arg1","type":"'a Seq.t"}],"returns":"('a option, Cardinality.error) result"}],"slug":"libtmux-query-one_or_none"},{"id":"Libtmux.Relation","publicId":"Libtmux.Relation","qualifiedName":"Libtmux.Relation","name":"Relation","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":159,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Typed edges in a captured graph. Many, one and optional relations are\n distinct; an unacquired relationship is never represented as an empty one.\n"],"declarations":[{"kind":"module","text":"module Relation : sig\n module Many : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end\n\n module One : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end\n\n module Optional : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end\nend","source":{"file":"lib/libtmux.mli","line":159,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Typed edges in a captured graph. Many, one and optional relations are distinct; an unacquired relationship is never represented as an empty one."},"slug":"libtmux-relation"},{"id":"Libtmux.Relation.Many","publicId":"Libtmux.Relation.Many","qualifiedName":"Libtmux.Relation.Many","name":"Many","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":160,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Many : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end","source":{"file":"lib/libtmux.mli","line":160,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Relation","slug":"libtmux-relation-many"},{"id":"Libtmux.Relation.Many.name","publicId":"Libtmux.Relation.Many.name","qualifiedName":"Libtmux.Relation.Many.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":163,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : ('parent, 'child) t -> string","source":{"file":"lib/libtmux.mli","line":163,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Relation.Many","signatures":[{"raw":"val name : ('parent, 'child) t -> string","params":[{"name":"arg1","type":"('parent, 'child) t"}],"returns":"string"}],"slug":"libtmux-relation-many-name"},{"id":"Libtmux.Relation.Many.t","publicId":"Libtmux.Relation.Many.t","qualifiedName":"Libtmux.Relation.Many.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":161,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type ('parent, 'child) t","source":{"file":"lib/libtmux.mli","line":161,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Relation.Many","signatures":[{"raw":"type ('parent, 'child) t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-relation-many-t"},{"id":"Libtmux.Relation.One","publicId":"Libtmux.Relation.One","qualifiedName":"Libtmux.Relation.One","name":"One","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":166,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module One : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end","source":{"file":"lib/libtmux.mli","line":166,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Relation","slug":"libtmux-relation-one"},{"id":"Libtmux.Relation.One.name","publicId":"Libtmux.Relation.One.name","qualifiedName":"Libtmux.Relation.One.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":169,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : ('parent, 'child) t -> string","source":{"file":"lib/libtmux.mli","line":169,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Relation.One","signatures":[{"raw":"val name : ('parent, 'child) t -> string","params":[{"name":"arg1","type":"('parent, 'child) t"}],"returns":"string"}],"slug":"libtmux-relation-one-name"},{"id":"Libtmux.Relation.One.t","publicId":"Libtmux.Relation.One.t","qualifiedName":"Libtmux.Relation.One.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":167,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type ('parent, 'child) t","source":{"file":"lib/libtmux.mli","line":167,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Relation.One","signatures":[{"raw":"type ('parent, 'child) t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-relation-one-t"},{"id":"Libtmux.Relation.Optional","publicId":"Libtmux.Relation.Optional","qualifiedName":"Libtmux.Relation.Optional","name":"Optional","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":172,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Optional : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end","source":{"file":"lib/libtmux.mli","line":172,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Relation","slug":"libtmux-relation-optional"},{"id":"Libtmux.Relation.Optional.name","publicId":"Libtmux.Relation.Optional.name","qualifiedName":"Libtmux.Relation.Optional.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":175,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : ('parent, 'child) t -> string","source":{"file":"lib/libtmux.mli","line":175,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Relation.Optional","signatures":[{"raw":"val name : ('parent, 'child) t -> string","params":[{"name":"arg1","type":"('parent, 'child) t"}],"returns":"string"}],"slug":"libtmux-relation-optional-name"},{"id":"Libtmux.Relation.Optional.t","publicId":"Libtmux.Relation.Optional.t","qualifiedName":"Libtmux.Relation.Optional.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":173,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type ('parent, 'child) t","source":{"file":"lib/libtmux.mli","line":173,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Relation.Optional","signatures":[{"raw":"type ('parent, 'child) t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-relation-optional-t"},{"id":"Libtmux.Session","publicId":"Libtmux.Session","qualifiedName":"Libtmux.Session","name":"Session","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":181,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" A captured session and its ordered window-link contexts. A session can\n contain repeated links to the same global window. "],"declarations":[{"kind":"module","text":"module rec Session : sig\n type t\n\n module Fields : sig\n val id : (t, string) Field.t\n val name : (t, string) Field.t\n val attached : (t, int) Field.t\n end\n\n module Relations : sig\n val window_links : (t, Window_link.t) Relation.Many.t\n val windows : (t, Window.t) Relation.Many.t\n end\n\n module Id : ID\n\n module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n (** Describe a target in an existing connection generation. No I/O. *)\n\n val source : t -> Source.t\n val id : t -> Id.t\n end\n\n type target = Target.t\n\n val id : t -> Id.t\n val name : t -> string\n val attached : t -> int\n val source : t -> Source.t\n val target : t -> target\n\n val same_entity : t -> t -> bool\n (** Compare IDs within the same bound {!Source.t} generation. *)\n\n val same_observation : t -> t -> bool\n (** Compare entity identity and snapshot identity. *)\n\n val window_links : t -> Window_link.t Iarray.t\n (** All captured links, in capture order, including repeated windows. *)\n\n val windows : t -> Window.t Iarray.t\n (** Distinct windows in first-link order. All accesses are local. *)\nend","source":{"file":"lib/libtmux.mli","line":181,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"A captured session and its ordered window-link contexts. A session can contain repeated links to the same global window."},"slug":"libtmux-session"},{"id":"Libtmux.Session.Fields","publicId":"Libtmux.Session.Fields","qualifiedName":"Libtmux.Session.Fields","name":"Fields","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":184,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Fields : sig\n val id : (t, string) Field.t\n val name : (t, string) Field.t\n val attached : (t, int) Field.t\n end","source":{"file":"lib/libtmux.mli","line":184,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","slug":"libtmux-session-fields"},{"id":"Libtmux.Session.Fields.attached","publicId":"Libtmux.Session.Fields.attached","qualifiedName":"Libtmux.Session.Fields.attached","name":"attached","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":187,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val attached : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":187,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Fields","signatures":[{"raw":"val attached : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-session-fields-attached"},{"id":"Libtmux.Session.Fields.id","publicId":"Libtmux.Session.Fields.id","qualifiedName":"Libtmux.Session.Fields.id","name":"id","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":185,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val id : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":185,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Fields","signatures":[{"raw":"val id : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-session-fields-id"},{"id":"Libtmux.Session.Fields.name","publicId":"Libtmux.Session.Fields.name","qualifiedName":"Libtmux.Session.Fields.name","name":"name","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":186,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val name : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":186,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Fields","signatures":[{"raw":"val name : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-session-fields-name"},{"id":"Libtmux.Session.Id","publicId":"Libtmux.Session.Id","qualifiedName":"Libtmux.Session.Id","name":"Id","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":195,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Id : ID","source":{"file":"lib/libtmux.mli","line":195,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","slug":"libtmux-session-id-12k2"},{"id":"Libtmux.Session.Id.compare","publicId":"Libtmux.Session.Id.compare","qualifiedName":"Libtmux.Session.Id.compare","name":"compare","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":136,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val compare : t -> t -> int","source":{"file":"lib/libtmux.mli","line":136,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Id","signatures":[{"raw":"val compare : t -> t -> int","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"int"}],"slug":"libtmux-session-id-compare"},{"id":"Libtmux.Session.Id.equal","publicId":"Libtmux.Session.Id.equal","qualifiedName":"Libtmux.Session.Id.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Id","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-session-id-equal"},{"id":"Libtmux.Session.Id.of_string","publicId":"Libtmux.Session.Id.of_string","qualifiedName":"Libtmux.Session.Id.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Accept a canonical prefixed decimal tmux ID in the uint32 range. "],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Id","doc":{"summary":"Accept a canonical prefixed decimal tmux ID in the uint32 range."},"signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-session-id-of_string"},{"id":"Libtmux.Session.Id.pp","publicId":"Libtmux.Session.Id.pp","qualifiedName":"Libtmux.Session.Id.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":137,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":137,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Id","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-session-id-pp"},{"id":"Libtmux.Session.Id.t","publicId":"Libtmux.Session.Id.t","qualifiedName":"Libtmux.Session.Id.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Id","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-session-id-t"},{"id":"Libtmux.Session.Id.to_string","publicId":"Libtmux.Session.Id.to_string","qualifiedName":"Libtmux.Session.Id.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":134,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":134,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Id","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-session-id-to_string"},{"id":"Libtmux.Session.Relations","publicId":"Libtmux.Session.Relations","qualifiedName":"Libtmux.Session.Relations","name":"Relations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":190,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Relations : sig\n val window_links : (t, Window_link.t) Relation.Many.t\n val windows : (t, Window.t) Relation.Many.t\n end","source":{"file":"lib/libtmux.mli","line":190,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","slug":"libtmux-session-relations"},{"id":"Libtmux.Session.Relations.window_links","publicId":"Libtmux.Session.Relations.window_links","qualifiedName":"Libtmux.Session.Relations.window_links","name":"window_links","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":191,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val window_links : (t, Window_link.t) Relation.Many.t","source":{"file":"lib/libtmux.mli","line":191,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Relations","signatures":[{"raw":"val window_links : (t, Window_link.t) Relation.Many.t","params":[],"returns":"(t, Window_link.t) Relation.Many.t"}],"slug":"libtmux-session-relations-window_links"},{"id":"Libtmux.Session.Relations.windows","publicId":"Libtmux.Session.Relations.windows","qualifiedName":"Libtmux.Session.Relations.windows","name":"windows","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":192,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val windows : (t, Window.t) Relation.Many.t","source":{"file":"lib/libtmux.mli","line":192,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Relations","signatures":[{"raw":"val windows : (t, Window.t) Relation.Many.t","params":[],"returns":"(t, Window.t) Relation.Many.t"}],"slug":"libtmux-session-relations-windows"},{"id":"Libtmux.Session.Target","publicId":"Libtmux.Session.Target","qualifiedName":"Libtmux.Session.Target","name":"Target","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":197,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n (** Describe a target in an existing connection generation. No I/O. *)\n\n val source : t -> Source.t\n val id : t -> Id.t\n end","source":{"file":"lib/libtmux.mli","line":197,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","slug":"libtmux-session-target-5p2d"},{"id":"Libtmux.Session.Target.id","publicId":"Libtmux.Session.Target.id","qualifiedName":"Libtmux.Session.Target.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":204,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":204,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Target","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-session-target-id"},{"id":"Libtmux.Session.Target.of_id","publicId":"Libtmux.Session.Target.of_id","qualifiedName":"Libtmux.Session.Target.of_id","name":"of_id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":200,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Describe a target in an existing connection generation. No I/O. "],"declarations":[{"kind":"function","text":"val of_id : source:Source.t -> Id.t -> t","source":{"file":"lib/libtmux.mli","line":200,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Target","doc":{"summary":"Describe a target in an existing connection generation. No I/O."},"signatures":[{"raw":"val of_id : source:Source.t -> Id.t -> t","params":[{"name":"source","type":"Source.t","keywordOnly":true},{"name":"arg1","type":"Id.t"}],"returns":"t"}],"slug":"libtmux-session-target-of_id"},{"id":"Libtmux.Session.Target.source","publicId":"Libtmux.Session.Target.source","qualifiedName":"Libtmux.Session.Target.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":203,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":203,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Target","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-session-target-source"},{"id":"Libtmux.Session.Target.t","publicId":"Libtmux.Session.Target.t","qualifiedName":"Libtmux.Session.Target.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":198,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":198,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session.Target","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-session-target-t"},{"id":"Libtmux.Session.attached","publicId":"Libtmux.Session.attached","qualifiedName":"Libtmux.Session.attached","name":"attached","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":211,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val attached : t -> int","source":{"file":"lib/libtmux.mli","line":211,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"val attached : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-session-attached"},{"id":"Libtmux.Session.id","publicId":"Libtmux.Session.id","qualifiedName":"Libtmux.Session.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":209,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":209,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-session-id-12gy"},{"id":"Libtmux.Session.name","publicId":"Libtmux.Session.name","qualifiedName":"Libtmux.Session.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":210,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : t -> string","source":{"file":"lib/libtmux.mli","line":210,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"val name : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-session-name"},{"id":"Libtmux.Session.same_entity","publicId":"Libtmux.Session.same_entity","qualifiedName":"Libtmux.Session.same_entity","name":"same_entity","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":215,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Compare IDs within the same bound {!Source.t} generation. "],"declarations":[{"kind":"function","text":"val same_entity : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":215,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","doc":{"summary":"Compare IDs within the same bound {!Source.t} generation."},"signatures":[{"raw":"val same_entity : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-session-same_entity"},{"id":"Libtmux.Session.same_observation","publicId":"Libtmux.Session.same_observation","qualifiedName":"Libtmux.Session.same_observation","name":"same_observation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":218,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Compare entity identity and snapshot identity. "],"declarations":[{"kind":"function","text":"val same_observation : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":218,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","doc":{"summary":"Compare entity identity and snapshot identity."},"signatures":[{"raw":"val same_observation : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-session-same_observation"},{"id":"Libtmux.Session.source","publicId":"Libtmux.Session.source","qualifiedName":"Libtmux.Session.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":212,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":212,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-session-source"},{"id":"Libtmux.Session.t","publicId":"Libtmux.Session.t","qualifiedName":"Libtmux.Session.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":182,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":182,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-session-t"},{"id":"Libtmux.Session.target","publicId":"Libtmux.Session.target","qualifiedName":"Libtmux.Session.target","name":"target","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":213,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val target : t -> target","source":{"file":"lib/libtmux.mli","line":213,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"val target : t -> target","params":[{"name":"arg1","type":"t"}],"returns":"target"}],"slug":"libtmux-session-target-iu8j"},{"id":"Libtmux.Session.target:type","publicId":"Libtmux.Session.target:type","qualifiedName":"Libtmux.Session.target","name":"target","kind":"typealias","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":207,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type target = Target.t","source":{"file":"lib/libtmux.mli","line":207,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","type":"Target.t","signatures":[{"raw":"type target = Target.t","params":[]}],"slug":"libtmux-session-target-type"},{"id":"Libtmux.Session.window_links","publicId":"Libtmux.Session.window_links","qualifiedName":"Libtmux.Session.window_links","name":"window_links","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":221,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" All captured links, in capture order, including repeated windows. "],"declarations":[{"kind":"function","text":"val window_links : t -> Window_link.t Iarray.t","source":{"file":"lib/libtmux.mli","line":221,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","doc":{"summary":"All captured links, in capture order, including repeated windows.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_graph.ml","intro":"Navigate the typed object graph. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_graph.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"graph: 2 sessions, 2 windows, 3 links, 2 panes\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val window_links : t -> Window_link.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Window_link.t Iarray.t"}],"slug":"libtmux-session-window_links"},{"id":"Libtmux.Session.windows","publicId":"Libtmux.Session.windows","qualifiedName":"Libtmux.Session.windows","name":"windows","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":224,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Distinct windows in first-link order. All accesses are local. "],"declarations":[{"kind":"function","text":"val windows : t -> Window.t Iarray.t","source":{"file":"lib/libtmux.mli","line":224,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Session","doc":{"summary":"Distinct windows in first-link order. All accesses are local."},"signatures":[{"raw":"val windows : t -> Window.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Window.t Iarray.t"}],"slug":"libtmux-session-windows"},{"id":"Libtmux.Snapshot","publicId":"Libtmux.Snapshot","qualifiedName":"Libtmux.Snapshot","name":"Snapshot","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":403,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" A complete immutable graph captured over an acquisition interval.\n Collections are replayable immutable arrays. Capturing several tmux commands\n does not establish an atomic transaction. "],"declarations":[{"kind":"module","text":"module Snapshot : sig\n type t\n\n module Id : sig\n type t\n\n val of_string : string -> (t, Error.t) result\n val to_string : t -> string\n val equal : t -> t -> bool\n end\n\n module Input : sig\n type session = { id : Session.Id.t; name : string; attached : int }\n\n type window = {\n id : Window.Id.t;\n name : string;\n width : int;\n height : int;\n layout : string;\n }\n\n type window_link = {\n session_id : Session.Id.t;\n window_id : Window.Id.t;\n index : int;\n is_current : bool;\n }\n\n type pane = {\n id : Pane.Id.t;\n window_id : Window.Id.t;\n index : int;\n active : bool;\n dead : bool;\n title : string;\n current_command : string;\n current_path : string;\n pid : int option;\n width : int;\n height : int;\n left : int;\n top : int;\n }\n\n type client = {\n name : string;\n session_id : Session.Id.t option;\n pid : int;\n width : int;\n height : int option;\n control_mode : bool;\n }\n end\n\n val create :\n source:Source.t ->\n id:Id.t ->\n started_at_ns:int64 ->\n finished_at_ns:int64 ->\n sessions:Input.session list ->\n windows:Input.window list ->\n window_links:Input.window_link list ->\n panes:Input.pane list ->\n clients:Input.client list ->\n (t, Error.t) result\n (** Validate and materialize a complete captured graph without I/O. Equal\n duplicate global rows collapse in first-occurrence order; conflicting rows\n and dangling references return {!Error.Capture_raced}. Links at different\n indexes remain distinct, including within one session. At most 10,000\n input rows are admitted. Each session needs one current link and each\n window one active pane. Capture spans an interval, not an atomic instant.\n Input strings are bytes; no Unicode normalization is performed. *)\n\n val id : t -> Id.t\n val source : t -> Source.t\n val started_at_ns : t -> int64\n val finished_at_ns : t -> int64\n val sessions : t -> Session.t Iarray.t\n val windows : t -> Window.t Iarray.t\n val window_links : t -> Window_link.t Iarray.t\n val panes : t -> Pane.t Iarray.t\n\n val clients : t -> Client_observation.t Iarray.t\n (** Collections and their contents are immutable. They retain capture order,\n are replayable and remain readable after the acquiring client closes. *)\n\n val find_session : t -> Session.Id.t -> Session.t option\n val find_window : t -> Window.Id.t -> Window.t option\n val find_pane : t -> Pane.Id.t -> Pane.t option\nend","source":{"file":"lib/libtmux.mli","line":403,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"A complete immutable graph captured over an acquisition interval. Collections are replayable immutable arrays. Capturing several tmux commands does not establish an atomic transaction."},"slug":"libtmux-snapshot"},{"id":"Libtmux.Snapshot.Id","publicId":"Libtmux.Snapshot.Id","qualifiedName":"Libtmux.Snapshot.Id","name":"Id","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":406,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Id : sig\n type t\n\n val of_string : string -> (t, Error.t) result\n val to_string : t -> string\n val equal : t -> t -> bool\n end","source":{"file":"lib/libtmux.mli","line":406,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","slug":"libtmux-snapshot-id-1y9h"},{"id":"Libtmux.Snapshot.Id.equal","publicId":"Libtmux.Snapshot.Id.equal","qualifiedName":"Libtmux.Snapshot.Id.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":411,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":411,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Id","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-snapshot-id-equal"},{"id":"Libtmux.Snapshot.Id.of_string","publicId":"Libtmux.Snapshot.Id.of_string","qualifiedName":"Libtmux.Snapshot.Id.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":409,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":409,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Id","signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-snapshot-id-of_string"},{"id":"Libtmux.Snapshot.Id.t","publicId":"Libtmux.Snapshot.Id.t","qualifiedName":"Libtmux.Snapshot.Id.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":407,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":407,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Id","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-snapshot-id-t"},{"id":"Libtmux.Snapshot.Id.to_string","publicId":"Libtmux.Snapshot.Id.to_string","qualifiedName":"Libtmux.Snapshot.Id.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":410,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":410,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Id","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-snapshot-id-to_string"},{"id":"Libtmux.Snapshot.Input","publicId":"Libtmux.Snapshot.Input","qualifiedName":"Libtmux.Snapshot.Input","name":"Input","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":414,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Input : sig\n type session = { id : Session.Id.t; name : string; attached : int }\n\n type window = {\n id : Window.Id.t;\n name : string;\n width : int;\n height : int;\n layout : string;\n }\n\n type window_link = {\n session_id : Session.Id.t;\n window_id : Window.Id.t;\n index : int;\n is_current : bool;\n }\n\n type pane = {\n id : Pane.Id.t;\n window_id : Window.Id.t;\n index : int;\n active : bool;\n dead : bool;\n title : string;\n current_command : string;\n current_path : string;\n pid : int option;\n width : int;\n height : int;\n left : int;\n top : int;\n }\n\n type client = {\n name : string;\n session_id : Session.Id.t option;\n pid : int;\n width : int;\n height : int option;\n control_mode : bool;\n }\n end","source":{"file":"lib/libtmux.mli","line":414,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","slug":"libtmux-snapshot-input"},{"id":"Libtmux.Snapshot.Input.client","publicId":"Libtmux.Snapshot.Input.client","qualifiedName":"Libtmux.Snapshot.Input.client","name":"client","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":448,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type client = {\n name : string;\n session_id : Session.Id.t option;\n pid : int;\n width : int;\n height : int option;\n control_mode : bool;\n }","source":{"file":"lib/libtmux.mli","line":448,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input","signatures":[{"raw":"type client =\n {\n name: string ;\n session_id: Session.Id.t option ;\n pid: int ;\n width: int ;\n height: int option ;\n control_mode: bool }","params":[]}],"slug":"libtmux-snapshot-input-client"},{"id":"Libtmux.Snapshot.Input.client.control_mode","publicId":"Libtmux.Snapshot.Input.client.control_mode","name":"control_mode","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":454,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"control_mode : bool;","source":{"file":"lib/libtmux.mli","line":454,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"bool","qualifiedName":"Libtmux.Snapshot.Input.control_mode","slug":"libtmux-snapshot-input-client-control_mode"},{"id":"Libtmux.Snapshot.Input.client.height","publicId":"Libtmux.Snapshot.Input.client.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":453,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int option;","source":{"file":"lib/libtmux.mli","line":453,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"int option","qualifiedName":"Libtmux.Snapshot.Input.height","slug":"libtmux-snapshot-input-client-height"},{"id":"Libtmux.Snapshot.Input.client.name","publicId":"Libtmux.Snapshot.Input.client.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":449,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":449,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"string","qualifiedName":"Libtmux.Snapshot.Input.name","slug":"libtmux-snapshot-input-client-name"},{"id":"Libtmux.Snapshot.Input.client.pid","publicId":"Libtmux.Snapshot.Input.client.pid","name":"pid","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":451,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pid : int;","source":{"file":"lib/libtmux.mli","line":451,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"int","qualifiedName":"Libtmux.Snapshot.Input.pid","slug":"libtmux-snapshot-input-client-pid"},{"id":"Libtmux.Snapshot.Input.client.session_id","publicId":"Libtmux.Snapshot.Input.client.session_id","name":"session_id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":450,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session_id : Session.Id.t option;","source":{"file":"lib/libtmux.mli","line":450,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"Session.Id.t option","qualifiedName":"Libtmux.Snapshot.Input.session_id","slug":"libtmux-snapshot-input-client-session_id"},{"id":"Libtmux.Snapshot.Input.client.width","publicId":"Libtmux.Snapshot.Input.client.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":452,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"lib/libtmux.mli","line":452,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"int","qualifiedName":"Libtmux.Snapshot.Input.width","slug":"libtmux-snapshot-input-client-width"},{"id":"Libtmux.Snapshot.Input.pane","publicId":"Libtmux.Snapshot.Input.pane","qualifiedName":"Libtmux.Snapshot.Input.pane","name":"pane","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":432,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type pane = {\n id : Pane.Id.t;\n window_id : Window.Id.t;\n index : int;\n active : bool;\n dead : bool;\n title : string;\n current_command : string;\n current_path : string;\n pid : int option;\n width : int;\n height : int;\n left : int;\n top : int;\n }","source":{"file":"lib/libtmux.mli","line":432,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input","signatures":[{"raw":"type pane =\n {\n id: Pane.Id.t ;\n window_id: Window.Id.t ;\n index: int ;\n active: bool ;\n dead: bool ;\n title: string ;\n current_command: string ;\n current_path: string ;\n pid: int option ;\n width: int ;\n height: int ;\n left: int ;\n top: int }","params":[]}],"slug":"libtmux-snapshot-input-pane"},{"id":"Libtmux.Snapshot.Input.pane.active","publicId":"Libtmux.Snapshot.Input.pane.active","name":"active","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":436,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"active : bool;","source":{"file":"lib/libtmux.mli","line":436,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"bool","qualifiedName":"Libtmux.Snapshot.Input.active","slug":"libtmux-snapshot-input-pane-active"},{"id":"Libtmux.Snapshot.Input.pane.current_command","publicId":"Libtmux.Snapshot.Input.pane.current_command","name":"current_command","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":439,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"current_command : string;","source":{"file":"lib/libtmux.mli","line":439,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"string","qualifiedName":"Libtmux.Snapshot.Input.current_command","slug":"libtmux-snapshot-input-pane-current_command"},{"id":"Libtmux.Snapshot.Input.pane.current_path","publicId":"Libtmux.Snapshot.Input.pane.current_path","name":"current_path","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":440,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"current_path : string;","source":{"file":"lib/libtmux.mli","line":440,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"string","qualifiedName":"Libtmux.Snapshot.Input.current_path","slug":"libtmux-snapshot-input-pane-current_path"},{"id":"Libtmux.Snapshot.Input.pane.dead","publicId":"Libtmux.Snapshot.Input.pane.dead","name":"dead","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":437,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"dead : bool;","source":{"file":"lib/libtmux.mli","line":437,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"bool","qualifiedName":"Libtmux.Snapshot.Input.dead","slug":"libtmux-snapshot-input-pane-dead"},{"id":"Libtmux.Snapshot.Input.pane.height","publicId":"Libtmux.Snapshot.Input.pane.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":443,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int;","source":{"file":"lib/libtmux.mli","line":443,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int","qualifiedName":"Libtmux.Snapshot.Input.height","slug":"libtmux-snapshot-input-pane-height"},{"id":"Libtmux.Snapshot.Input.pane.id","publicId":"Libtmux.Snapshot.Input.pane.id","name":"id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":433,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"id : Pane.Id.t;","source":{"file":"lib/libtmux.mli","line":433,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"Pane.Id.t","qualifiedName":"Libtmux.Snapshot.Input.id","slug":"libtmux-snapshot-input-pane-id"},{"id":"Libtmux.Snapshot.Input.pane.index","publicId":"Libtmux.Snapshot.Input.pane.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":435,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":435,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int","qualifiedName":"Libtmux.Snapshot.Input.index","slug":"libtmux-snapshot-input-pane-index"},{"id":"Libtmux.Snapshot.Input.pane.left","publicId":"Libtmux.Snapshot.Input.pane.left","name":"left","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":444,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"left : int;","source":{"file":"lib/libtmux.mli","line":444,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int","qualifiedName":"Libtmux.Snapshot.Input.left","slug":"libtmux-snapshot-input-pane-left"},{"id":"Libtmux.Snapshot.Input.pane.pid","publicId":"Libtmux.Snapshot.Input.pane.pid","name":"pid","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":441,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pid : int option;","source":{"file":"lib/libtmux.mli","line":441,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int option","qualifiedName":"Libtmux.Snapshot.Input.pid","slug":"libtmux-snapshot-input-pane-pid"},{"id":"Libtmux.Snapshot.Input.pane.title","publicId":"Libtmux.Snapshot.Input.pane.title","name":"title","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":438,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"title : string;","source":{"file":"lib/libtmux.mli","line":438,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"string","qualifiedName":"Libtmux.Snapshot.Input.title","slug":"libtmux-snapshot-input-pane-title"},{"id":"Libtmux.Snapshot.Input.pane.top","publicId":"Libtmux.Snapshot.Input.pane.top","name":"top","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":445,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"top : int;","source":{"file":"lib/libtmux.mli","line":445,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int","qualifiedName":"Libtmux.Snapshot.Input.top","slug":"libtmux-snapshot-input-pane-top"},{"id":"Libtmux.Snapshot.Input.pane.width","publicId":"Libtmux.Snapshot.Input.pane.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":442,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"lib/libtmux.mli","line":442,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int","qualifiedName":"Libtmux.Snapshot.Input.width","slug":"libtmux-snapshot-input-pane-width"},{"id":"Libtmux.Snapshot.Input.pane.window_id","publicId":"Libtmux.Snapshot.Input.pane.window_id","name":"window_id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":434,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_id : Window.Id.t;","source":{"file":"lib/libtmux.mli","line":434,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"Window.Id.t","qualifiedName":"Libtmux.Snapshot.Input.window_id","slug":"libtmux-snapshot-input-pane-window_id"},{"id":"Libtmux.Snapshot.Input.session","publicId":"Libtmux.Snapshot.Input.session","qualifiedName":"Libtmux.Snapshot.Input.session","name":"session","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":415,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type session = { id : Session.Id.t; name : string; attached : int }","source":{"file":"lib/libtmux.mli","line":415,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input","signatures":[{"raw":"type session = {\n id: Session.Id.t ;\n name: string ;\n attached: int }","params":[]}],"slug":"libtmux-snapshot-input-session"},{"id":"Libtmux.Snapshot.Input.session.attached","publicId":"Libtmux.Snapshot.Input.session.attached","name":"attached","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":415,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"attached : int","source":{"file":"lib/libtmux.mli","line":415,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.session","type":"int","qualifiedName":"Libtmux.Snapshot.Input.attached","slug":"libtmux-snapshot-input-session-attached"},{"id":"Libtmux.Snapshot.Input.session.id","publicId":"Libtmux.Snapshot.Input.session.id","name":"id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":415,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"id : Session.Id.t;","source":{"file":"lib/libtmux.mli","line":415,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.session","type":"Session.Id.t","qualifiedName":"Libtmux.Snapshot.Input.id","slug":"libtmux-snapshot-input-session-id"},{"id":"Libtmux.Snapshot.Input.session.name","publicId":"Libtmux.Snapshot.Input.session.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":415,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":415,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.session","type":"string","qualifiedName":"Libtmux.Snapshot.Input.name","slug":"libtmux-snapshot-input-session-name"},{"id":"Libtmux.Snapshot.Input.window","publicId":"Libtmux.Snapshot.Input.window","qualifiedName":"Libtmux.Snapshot.Input.window","name":"window","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":417,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type window = {\n id : Window.Id.t;\n name : string;\n width : int;\n height : int;\n layout : string;\n }","source":{"file":"lib/libtmux.mli","line":417,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input","signatures":[{"raw":"type window =\n {\n id: Window.Id.t ;\n name: string ;\n width: int ;\n height: int ;\n layout: string }","params":[]}],"slug":"libtmux-snapshot-input-window"},{"id":"Libtmux.Snapshot.Input.window.height","publicId":"Libtmux.Snapshot.Input.window.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":421,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int;","source":{"file":"lib/libtmux.mli","line":421,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.window","type":"int","qualifiedName":"Libtmux.Snapshot.Input.height","slug":"libtmux-snapshot-input-window-height"},{"id":"Libtmux.Snapshot.Input.window.id","publicId":"Libtmux.Snapshot.Input.window.id","name":"id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":418,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"id : Window.Id.t;","source":{"file":"lib/libtmux.mli","line":418,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.window","type":"Window.Id.t","qualifiedName":"Libtmux.Snapshot.Input.id","slug":"libtmux-snapshot-input-window-id"},{"id":"Libtmux.Snapshot.Input.window.layout","publicId":"Libtmux.Snapshot.Input.window.layout","name":"layout","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":422,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"layout : string;","source":{"file":"lib/libtmux.mli","line":422,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.window","type":"string","qualifiedName":"Libtmux.Snapshot.Input.layout","slug":"libtmux-snapshot-input-window-layout"},{"id":"Libtmux.Snapshot.Input.window.name","publicId":"Libtmux.Snapshot.Input.window.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":419,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":419,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.window","type":"string","qualifiedName":"Libtmux.Snapshot.Input.name","slug":"libtmux-snapshot-input-window-name"},{"id":"Libtmux.Snapshot.Input.window.width","publicId":"Libtmux.Snapshot.Input.window.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":420,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"lib/libtmux.mli","line":420,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.window","type":"int","qualifiedName":"Libtmux.Snapshot.Input.width","slug":"libtmux-snapshot-input-window-width"},{"id":"Libtmux.Snapshot.Input.window_link","publicId":"Libtmux.Snapshot.Input.window_link","qualifiedName":"Libtmux.Snapshot.Input.window_link","name":"window_link","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":425,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type window_link = {\n session_id : Session.Id.t;\n window_id : Window.Id.t;\n index : int;\n is_current : bool;\n }","source":{"file":"lib/libtmux.mli","line":425,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input","signatures":[{"raw":"type window_link =\n {\n session_id: Session.Id.t ;\n window_id: Window.Id.t ;\n index: int ;\n is_current: bool }","params":[]}],"slug":"libtmux-snapshot-input-window_link"},{"id":"Libtmux.Snapshot.Input.window_link.index","publicId":"Libtmux.Snapshot.Input.window_link.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":428,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":428,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.window_link","type":"int","qualifiedName":"Libtmux.Snapshot.Input.index","slug":"libtmux-snapshot-input-window_link-index"},{"id":"Libtmux.Snapshot.Input.window_link.is_current","publicId":"Libtmux.Snapshot.Input.window_link.is_current","name":"is_current","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":429,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"is_current : bool;","source":{"file":"lib/libtmux.mli","line":429,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.window_link","type":"bool","qualifiedName":"Libtmux.Snapshot.Input.is_current","slug":"libtmux-snapshot-input-window_link-is_current"},{"id":"Libtmux.Snapshot.Input.window_link.session_id","publicId":"Libtmux.Snapshot.Input.window_link.session_id","name":"session_id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":426,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session_id : Session.Id.t;","source":{"file":"lib/libtmux.mli","line":426,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.window_link","type":"Session.Id.t","qualifiedName":"Libtmux.Snapshot.Input.session_id","slug":"libtmux-snapshot-input-window_link-session_id"},{"id":"Libtmux.Snapshot.Input.window_link.window_id","publicId":"Libtmux.Snapshot.Input.window_link.window_id","name":"window_id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":427,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_id : Window.Id.t;","source":{"file":"lib/libtmux.mli","line":427,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot.Input.window_link","type":"Window.Id.t","qualifiedName":"Libtmux.Snapshot.Input.window_id","slug":"libtmux-snapshot-input-window_link-window_id"},{"id":"Libtmux.Snapshot.clients","publicId":"Libtmux.Snapshot.clients","qualifiedName":"Libtmux.Snapshot.clients","name":"clients","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":486,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Collections and their contents are immutable. They retain capture order,\n are replayable and remain readable after the acquiring client closes. "],"declarations":[{"kind":"function","text":"val clients : t -> Client_observation.t Iarray.t","source":{"file":"lib/libtmux.mli","line":486,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","doc":{"summary":"Collections and their contents are immutable. They retain capture order, are replayable and remain readable after the acquiring client closes."},"signatures":[{"raw":"val clients : t -> Client_observation.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Client_observation.t Iarray.t"}],"slug":"libtmux-snapshot-clients"},{"id":"Libtmux.Snapshot.create","publicId":"Libtmux.Snapshot.create","qualifiedName":"Libtmux.Snapshot.create","name":"create","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":458,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Validate and materialize a complete captured graph without I/O. Equal\n duplicate global rows collapse in first-occurrence order; conflicting rows\n and dangling references return {!Error.Capture_raced}. Links at different\n indexes remain distinct, including within one session. At most 10,000\n input rows are admitted. Each session needs one current link and each\n window one active pane. Capture spans an interval, not an atomic instant.\n Input strings are bytes; no Unicode normalization is performed. "],"declarations":[{"kind":"function","text":"val create :\n source:Source.t ->\n id:Id.t ->\n started_at_ns:int64 ->\n finished_at_ns:int64 ->\n sessions:Input.session list ->\n windows:Input.window list ->\n window_links:Input.window_link list ->\n panes:Input.pane list ->\n clients:Input.client list ->\n (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":458,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","doc":{"summary":"Validate and materialize a complete captured graph without I/O. Equal duplicate global rows collapse in first-occurrence order; conflicting rows and dangling references return {!Error.Capture_raced}. Links at different indexes remain distinct, including within one session. At most 10,000 input rows are admitted. Each session needs one current link and each window one active pane. Capture spans an interval, not an atomic instant. Input strings are bytes; no Unicode normalization is performed."},"signatures":[{"raw":"val create :\n source:Source.t ->\n id:Id.t ->\n started_at_ns:int64 ->\n finished_at_ns:int64 ->\n sessions:Input.session list ->\n windows:Input.window list ->\n window_links:Input.window_link list ->\n panes:Input.pane list -> clients:Input.client list -> (t, Error.t) result","params":[{"name":"source","type":"Source.t","keywordOnly":true},{"name":"id","type":"Id.t","keywordOnly":true},{"name":"started_at_ns","type":"int64","keywordOnly":true},{"name":"finished_at_ns","type":"int64","keywordOnly":true},{"name":"sessions","type":"Input.session list","keywordOnly":true},{"name":"windows","type":"Input.window list","keywordOnly":true},{"name":"window_links","type":"Input.window_link list","keywordOnly":true},{"name":"panes","type":"Input.pane list","keywordOnly":true},{"name":"clients","type":"Input.client list","keywordOnly":true}],"returns":"(t, Error.t) result"}],"slug":"libtmux-snapshot-create"},{"id":"Libtmux.Snapshot.find_pane","publicId":"Libtmux.Snapshot.find_pane","qualifiedName":"Libtmux.Snapshot.find_pane","name":"find_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":492,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val find_pane : t -> Pane.Id.t -> Pane.t option","source":{"file":"lib/libtmux.mli","line":492,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val find_pane : t -> Pane.Id.t -> Pane.t option","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Pane.Id.t"}],"returns":"Pane.t option"}],"slug":"libtmux-snapshot-find_pane"},{"id":"Libtmux.Snapshot.find_session","publicId":"Libtmux.Snapshot.find_session","qualifiedName":"Libtmux.Snapshot.find_session","name":"find_session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":490,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val find_session : t -> Session.Id.t -> Session.t option","source":{"file":"lib/libtmux.mli","line":490,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val find_session : t -> Session.Id.t -> Session.t option","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Session.Id.t"}],"returns":"Session.t option"}],"slug":"libtmux-snapshot-find_session"},{"id":"Libtmux.Snapshot.find_window","publicId":"Libtmux.Snapshot.find_window","qualifiedName":"Libtmux.Snapshot.find_window","name":"find_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":491,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val find_window : t -> Window.Id.t -> Window.t option","source":{"file":"lib/libtmux.mli","line":491,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val find_window : t -> Window.Id.t -> Window.t option","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Window.Id.t"}],"returns":"Window.t option"}],"slug":"libtmux-snapshot-find_window"},{"id":"Libtmux.Snapshot.finished_at_ns","publicId":"Libtmux.Snapshot.finished_at_ns","qualifiedName":"Libtmux.Snapshot.finished_at_ns","name":"finished_at_ns","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":480,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val finished_at_ns : t -> int64","source":{"file":"lib/libtmux.mli","line":480,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val finished_at_ns : t -> int64","params":[{"name":"arg1","type":"t"}],"returns":"int64"}],"slug":"libtmux-snapshot-finished_at_ns"},{"id":"Libtmux.Snapshot.id","publicId":"Libtmux.Snapshot.id","qualifiedName":"Libtmux.Snapshot.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":477,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":477,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-snapshot-id-1y6d"},{"id":"Libtmux.Snapshot.panes","publicId":"Libtmux.Snapshot.panes","qualifiedName":"Libtmux.Snapshot.panes","name":"panes","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":484,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val panes : t -> Pane.t Iarray.t","source":{"file":"lib/libtmux.mli","line":484,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val panes : t -> Pane.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Pane.t Iarray.t"}],"slug":"libtmux-snapshot-panes"},{"id":"Libtmux.Snapshot.sessions","publicId":"Libtmux.Snapshot.sessions","qualifiedName":"Libtmux.Snapshot.sessions","name":"sessions","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":481,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val sessions : t -> Session.t Iarray.t","source":{"file":"lib/libtmux.mli","line":481,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val sessions : t -> Session.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Session.t Iarray.t"}],"doc":{"summary":"","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_graph.ml","intro":"Navigate the typed object graph. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_graph.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"graph: 2 sessions, 2 windows, 3 links, 2 panes\n","intro":"Expected outcome line, after the temporary socket path:"}]},"slug":"libtmux-snapshot-sessions"},{"id":"Libtmux.Snapshot.source","publicId":"Libtmux.Snapshot.source","qualifiedName":"Libtmux.Snapshot.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":478,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":478,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-snapshot-source"},{"id":"Libtmux.Snapshot.started_at_ns","publicId":"Libtmux.Snapshot.started_at_ns","qualifiedName":"Libtmux.Snapshot.started_at_ns","name":"started_at_ns","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":479,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val started_at_ns : t -> int64","source":{"file":"lib/libtmux.mli","line":479,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val started_at_ns : t -> int64","params":[{"name":"arg1","type":"t"}],"returns":"int64"}],"slug":"libtmux-snapshot-started_at_ns"},{"id":"Libtmux.Snapshot.t","publicId":"Libtmux.Snapshot.t","qualifiedName":"Libtmux.Snapshot.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":404,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":404,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-snapshot-t"},{"id":"Libtmux.Snapshot.window_links","publicId":"Libtmux.Snapshot.window_links","qualifiedName":"Libtmux.Snapshot.window_links","name":"window_links","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":483,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val window_links : t -> Window_link.t Iarray.t","source":{"file":"lib/libtmux.mli","line":483,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val window_links : t -> Window_link.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Window_link.t Iarray.t"}],"slug":"libtmux-snapshot-window_links"},{"id":"Libtmux.Snapshot.windows","publicId":"Libtmux.Snapshot.windows","qualifiedName":"Libtmux.Snapshot.windows","name":"windows","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":482,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val windows : t -> Window.t Iarray.t","source":{"file":"lib/libtmux.mli","line":482,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val windows : t -> Window.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Window.t Iarray.t"}],"slug":"libtmux-snapshot-windows"},{"id":"Libtmux.Source","publicId":"Libtmux.Source","qualifiedName":"Libtmux.Source","name":"Source","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":96,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Endpoint and observed daemon identity for one connection generation.\n Constructing metadata alone does not establish a live binding. "],"declarations":[{"kind":"module","text":"module Source : sig\n type t\n\n val create :\n endpoint:Endpoint.t ->\n generation:Generation.t ->\n server_pid:int ->\n (t, Error.t) result\n (** Pure metadata import for capture adapters. This neither establishes a\n connection nor verifies process identity. The backend must bind the\n generation to a live daemon before it admits operations. *)\n\n val endpoint : t -> Endpoint.t\n val generation : t -> Generation.t\n val server_pid : t -> int\n\n val equal : t -> t -> bool\n (** Compare endpoint, observed daemon PID and connection generation.\n Independent connections compare unequal even when they observe the same\n PID. Equality establishes neither a live binding nor fresh observations.\n *)\nend","source":{"file":"lib/libtmux.mli","line":96,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"Endpoint and observed daemon identity for one connection generation. Constructing metadata alone does not establish a live binding."},"slug":"libtmux-source"},{"id":"Libtmux.Source.create","publicId":"Libtmux.Source.create","qualifiedName":"Libtmux.Source.create","name":"create","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":99,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Pure metadata import for capture adapters. This neither establishes a\n connection nor verifies process identity. The backend must bind the\n generation to a live daemon before it admits operations. "],"declarations":[{"kind":"function","text":"val create :\n endpoint:Endpoint.t ->\n generation:Generation.t ->\n server_pid:int ->\n (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":99,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Source","doc":{"summary":"Pure metadata import for capture adapters. This neither establishes a connection nor verifies process identity. The backend must bind the generation to a live daemon before it admits operations."},"signatures":[{"raw":"val create :\n endpoint:Endpoint.t ->\n generation:Generation.t -> server_pid:int -> (t, Error.t) result","params":[{"name":"endpoint","type":"Endpoint.t","keywordOnly":true},{"name":"generation","type":"Generation.t","keywordOnly":true},{"name":"server_pid","type":"int","keywordOnly":true}],"returns":"(t, Error.t) result"}],"slug":"libtmux-source-create"},{"id":"Libtmux.Source.endpoint","publicId":"Libtmux.Source.endpoint","qualifiedName":"Libtmux.Source.endpoint","name":"endpoint","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val endpoint : t -> Endpoint.t","source":{"file":"lib/libtmux.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Source","signatures":[{"raw":"val endpoint : t -> Endpoint.t","params":[{"name":"arg1","type":"t"}],"returns":"Endpoint.t"}],"slug":"libtmux-source-endpoint"},{"id":"Libtmux.Source.equal","publicId":"Libtmux.Source.equal","qualifiedName":"Libtmux.Source.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":112,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Compare endpoint, observed daemon PID and connection generation.\n Independent connections compare unequal even when they observe the same\n PID. Equality establishes neither a live binding nor fresh observations.\n "],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":112,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Source","doc":{"summary":"Compare endpoint, observed daemon PID and connection generation. Independent connections compare unequal even when they observe the same PID. Equality establishes neither a live binding nor fresh observations."},"signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-source-equal"},{"id":"Libtmux.Source.generation","publicId":"Libtmux.Source.generation","qualifiedName":"Libtmux.Source.generation","name":"generation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":109,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val generation : t -> Generation.t","source":{"file":"lib/libtmux.mli","line":109,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Source","signatures":[{"raw":"val generation : t -> Generation.t","params":[{"name":"arg1","type":"t"}],"returns":"Generation.t"}],"slug":"libtmux-source-generation"},{"id":"Libtmux.Source.server_pid","publicId":"Libtmux.Source.server_pid","qualifiedName":"Libtmux.Source.server_pid","name":"server_pid","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":110,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val server_pid : t -> int","source":{"file":"lib/libtmux.mli","line":110,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Source","signatures":[{"raw":"val server_pid : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-source-server_pid"},{"id":"Libtmux.Source.t","publicId":"Libtmux.Source.t","qualifiedName":"Libtmux.Source.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":97,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":97,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Source","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-source-t"},{"id":"Libtmux.Spawn","publicId":"Libtmux.Spawn","qualifiedName":"Libtmux.Spawn","name":"Spawn","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":739,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" A process description with explicit argv or shell semantics, working\n directory and environment. Describing a process performs no I/O. "],"declarations":[{"kind":"module","text":"module Spawn : sig\n type command =\n | Default\n | Exec of { program : string; args : string list }\n | Shell of string\n\n type t = {\n command : command;\n cwd : string option;\n environment : (string * string) list;\n }\n\n val make : ?cwd:string -> ?environment:(string * string) list -> command -> t\n (** Describe a program without I/O. [Exec] preserves argv; [Shell] explicitly\n requests the daemon's configured shell. [cwd] must be absolute. Validation\n occurs at admission. With no arguments, [Exec] uses a fixed [/bin/sh]\n trampoline because tmux treats a single argument as shell code. [Default]\n follows tmux defaults on creation and reuses the previous command on\n respawn. *)\n\n val default : t\nend","source":{"file":"lib/libtmux.mli","line":739,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"A process description with explicit argv or shell semantics, working directory and environment. Describing a process performs no I/O."},"slug":"libtmux-spawn"},{"id":"Libtmux.Spawn.command","publicId":"Libtmux.Spawn.command","qualifiedName":"Libtmux.Spawn.command","name":"command","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":740,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type command =\n | Default\n | Exec of { program : string; args : string list }\n | Shell of string","source":{"file":"lib/libtmux.mli","line":740,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn","signatures":[{"raw":"type command =\n | Default \n | Exec of {\n program: string ;\n args: string list } \n | Shell of string ","params":[]}],"slug":"libtmux-spawn-command"},{"id":"Libtmux.Spawn.command.Default","publicId":"Libtmux.Spawn.command.Default","name":"Default","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":741,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Default","source":{"file":"lib/libtmux.mli","line":741,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn.command","variant":"unit","qualifiedName":"Libtmux.Spawn.Default","slug":"libtmux-spawn-command-default"},{"id":"Libtmux.Spawn.command.Exec","publicId":"Libtmux.Spawn.command.Exec","name":"Exec","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":742,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Exec of { program : string; args : string list }","source":{"file":"lib/libtmux.mli","line":742,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn.command","variant":"struct","qualifiedName":"Libtmux.Spawn.Exec","slug":"libtmux-spawn-command-exec"},{"id":"Libtmux.Spawn.command.Exec.args","publicId":"Libtmux.Spawn.command.Exec.args","name":"args","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":742,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"args : string list","source":{"file":"lib/libtmux.mli","line":742,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn.command.Exec","type":"string list","qualifiedName":"Libtmux.Spawn.args","slug":"libtmux-spawn-command-exec-args"},{"id":"Libtmux.Spawn.command.Exec.program","publicId":"Libtmux.Spawn.command.Exec.program","name":"program","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":742,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"program : string;","source":{"file":"lib/libtmux.mli","line":742,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn.command.Exec","type":"string","qualifiedName":"Libtmux.Spawn.program","slug":"libtmux-spawn-command-exec-program"},{"id":"Libtmux.Spawn.command.Shell","publicId":"Libtmux.Spawn.command.Shell","name":"Shell","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":743,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Shell of string","source":{"file":"lib/libtmux.mli","line":743,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn.command","variant":"tuple","qualifiedName":"Libtmux.Spawn.Shell","slug":"libtmux-spawn-command-shell"},{"id":"Libtmux.Spawn.default","publicId":"Libtmux.Spawn.default","qualifiedName":"Libtmux.Spawn.default","name":"default","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":759,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val default : t","source":{"file":"lib/libtmux.mli","line":759,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn","signatures":[{"raw":"val default : t","params":[],"returns":"t"}],"slug":"libtmux-spawn-default"},{"id":"Libtmux.Spawn.make","publicId":"Libtmux.Spawn.make","qualifiedName":"Libtmux.Spawn.make","name":"make","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":751,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Describe a program without I/O. [Exec] preserves argv; [Shell] explicitly\n requests the daemon's configured shell. [cwd] must be absolute. Validation\n occurs at admission. With no arguments, [Exec] uses a fixed [/bin/sh]\n trampoline because tmux treats a single argument as shell code. [Default]\n follows tmux defaults on creation and reuses the previous command on\n respawn. "],"declarations":[{"kind":"function","text":"val make : ?cwd:string -> ?environment:(string * string) list -> command -> t","source":{"file":"lib/libtmux.mli","line":751,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn","doc":{"summary":"Describe a program without I/O. `Exec` preserves argv; `Shell` explicitly requests the daemon's configured shell. `cwd` must be absolute. Validation occurs at admission. With no arguments, `Exec` uses a fixed `/bin/sh` trampoline because tmux treats a single argument as shell code. `Default` follows tmux defaults on creation and reuses the previous command on respawn."},"signatures":[{"raw":"val make : ?cwd:string -> ?environment:(string * string) list -> command -> t","params":[{"name":"cwd","type":"string","optional":true,"keywordOnly":true},{"name":"environment","type":"(string * string) list","optional":true,"keywordOnly":true},{"name":"arg1","type":"command"}],"returns":"t"}],"slug":"libtmux-spawn-make"},{"id":"Libtmux.Spawn.t","publicId":"Libtmux.Spawn.t","qualifiedName":"Libtmux.Spawn.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":745,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type t = {\n command : command;\n cwd : string option;\n environment : (string * string) list;\n }","source":{"file":"lib/libtmux.mli","line":745,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn","signatures":[{"raw":"type t =\n {\n command: command ;\n cwd: string option ;\n environment: (string * string) list }","params":[]}],"slug":"libtmux-spawn-t"},{"id":"Libtmux.Spawn.t.command","publicId":"Libtmux.Spawn.t.command","name":"command","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":746,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"command : command;","source":{"file":"lib/libtmux.mli","line":746,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn.t","type":"command","qualifiedName":"Libtmux.Spawn.command","slug":"libtmux-spawn-t-command"},{"id":"Libtmux.Spawn.t.cwd","publicId":"Libtmux.Spawn.t.cwd","name":"cwd","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":747,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cwd : string option;","source":{"file":"lib/libtmux.mli","line":747,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn.t","type":"string option","qualifiedName":"Libtmux.Spawn.cwd","slug":"libtmux-spawn-t-cwd"},{"id":"Libtmux.Spawn.t.environment","publicId":"Libtmux.Spawn.t.environment","name":"environment","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":748,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"environment : (string * string) list;","source":{"file":"lib/libtmux.mli","line":748,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Spawn.t","type":"(string * string) list","qualifiedName":"Libtmux.Spawn.environment","slug":"libtmux-spawn-t-environment"},{"id":"Libtmux.Window","publicId":"Libtmux.Window","qualifiedName":"Libtmux.Window","name":"Window","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":230,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" A global window shared by its session links. Window index and current state\n belong to a link, while panes and geometry belong to the window. "],"declarations":[{"kind":"module","text":"and Window : sig\n type t\n\n module Fields : sig\n val id : (t, string) Field.t\n val name : (t, string) Field.t\n val width : (t, int) Field.t\n val height : (t, int) Field.t\n val layout : (t, string) Field.t\n end\n\n module Relations : sig\n val panes : (t, Pane.t) Relation.Many.t\n val links : (t, Window_link.t) Relation.Many.t\n end\n\n module Id : ID\n\n module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n val source : t -> Source.t\n val id : t -> Id.t\n end\n\n type target = Target.t\n\n val id : t -> Id.t\n val name : t -> string\n val width : t -> int\n val height : t -> int\n val layout : t -> string\n val source : t -> Source.t\n val target : t -> target\n\n val same_entity : t -> t -> bool\n (** Compare IDs within the same bound {!Source.t} generation. *)\n\n val same_observation : t -> t -> bool\n (** Compare entity identity and snapshot identity. *)\n\n val panes : t -> Pane.t Iarray.t\n val links : t -> Window_link.t Iarray.t\nend","source":{"file":"lib/libtmux.mli","line":230,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"A global window shared by its session links. Window index and current state belong to a link, while panes and geometry belong to the window."},"slug":"libtmux-window"},{"id":"Libtmux.Window.Fields","publicId":"Libtmux.Window.Fields","qualifiedName":"Libtmux.Window.Fields","name":"Fields","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":233,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Fields : sig\n val id : (t, string) Field.t\n val name : (t, string) Field.t\n val width : (t, int) Field.t\n val height : (t, int) Field.t\n val layout : (t, string) Field.t\n end","source":{"file":"lib/libtmux.mli","line":233,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","slug":"libtmux-window-fields"},{"id":"Libtmux.Window.Fields.height","publicId":"Libtmux.Window.Fields.height","qualifiedName":"Libtmux.Window.Fields.height","name":"height","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":237,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val height : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":237,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Fields","signatures":[{"raw":"val height : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-window-fields-height"},{"id":"Libtmux.Window.Fields.id","publicId":"Libtmux.Window.Fields.id","qualifiedName":"Libtmux.Window.Fields.id","name":"id","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":234,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val id : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":234,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Fields","signatures":[{"raw":"val id : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-window-fields-id"},{"id":"Libtmux.Window.Fields.layout","publicId":"Libtmux.Window.Fields.layout","qualifiedName":"Libtmux.Window.Fields.layout","name":"layout","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":238,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val layout : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":238,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Fields","signatures":[{"raw":"val layout : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-window-fields-layout"},{"id":"Libtmux.Window.Fields.name","publicId":"Libtmux.Window.Fields.name","qualifiedName":"Libtmux.Window.Fields.name","name":"name","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":235,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val name : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":235,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Fields","signatures":[{"raw":"val name : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-window-fields-name"},{"id":"Libtmux.Window.Fields.width","publicId":"Libtmux.Window.Fields.width","qualifiedName":"Libtmux.Window.Fields.width","name":"width","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":236,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val width : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":236,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Fields","signatures":[{"raw":"val width : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-window-fields-width"},{"id":"Libtmux.Window.Id","publicId":"Libtmux.Window.Id","qualifiedName":"Libtmux.Window.Id","name":"Id","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":246,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Id : ID","source":{"file":"lib/libtmux.mli","line":246,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","slug":"libtmux-window-id-1sgu"},{"id":"Libtmux.Window.Id.compare","publicId":"Libtmux.Window.Id.compare","qualifiedName":"Libtmux.Window.Id.compare","name":"compare","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":136,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val compare : t -> t -> int","source":{"file":"lib/libtmux.mli","line":136,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Id","signatures":[{"raw":"val compare : t -> t -> int","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"int"}],"slug":"libtmux-window-id-compare"},{"id":"Libtmux.Window.Id.equal","publicId":"Libtmux.Window.Id.equal","qualifiedName":"Libtmux.Window.Id.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Id","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-window-id-equal"},{"id":"Libtmux.Window.Id.of_string","publicId":"Libtmux.Window.Id.of_string","qualifiedName":"Libtmux.Window.Id.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Accept a canonical prefixed decimal tmux ID in the uint32 range. "],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Id","doc":{"summary":"Accept a canonical prefixed decimal tmux ID in the uint32 range."},"signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-window-id-of_string"},{"id":"Libtmux.Window.Id.pp","publicId":"Libtmux.Window.Id.pp","qualifiedName":"Libtmux.Window.Id.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":137,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":137,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Id","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-window-id-pp"},{"id":"Libtmux.Window.Id.t","publicId":"Libtmux.Window.Id.t","qualifiedName":"Libtmux.Window.Id.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Id","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-window-id-t"},{"id":"Libtmux.Window.Id.to_string","publicId":"Libtmux.Window.Id.to_string","qualifiedName":"Libtmux.Window.Id.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":134,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":134,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Id","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-window-id-to_string"},{"id":"Libtmux.Window.Relations","publicId":"Libtmux.Window.Relations","qualifiedName":"Libtmux.Window.Relations","name":"Relations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":241,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Relations : sig\n val panes : (t, Pane.t) Relation.Many.t\n val links : (t, Window_link.t) Relation.Many.t\n end","source":{"file":"lib/libtmux.mli","line":241,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","slug":"libtmux-window-relations"},{"id":"Libtmux.Window.Relations.links","publicId":"Libtmux.Window.Relations.links","qualifiedName":"Libtmux.Window.Relations.links","name":"links","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":243,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val links : (t, Window_link.t) Relation.Many.t","source":{"file":"lib/libtmux.mli","line":243,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Relations","signatures":[{"raw":"val links : (t, Window_link.t) Relation.Many.t","params":[],"returns":"(t, Window_link.t) Relation.Many.t"}],"slug":"libtmux-window-relations-links"},{"id":"Libtmux.Window.Relations.panes","publicId":"Libtmux.Window.Relations.panes","qualifiedName":"Libtmux.Window.Relations.panes","name":"panes","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":242,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val panes : (t, Pane.t) Relation.Many.t","source":{"file":"lib/libtmux.mli","line":242,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Relations","signatures":[{"raw":"val panes : (t, Pane.t) Relation.Many.t","params":[],"returns":"(t, Pane.t) Relation.Many.t"}],"slug":"libtmux-window-relations-panes"},{"id":"Libtmux.Window.Target","publicId":"Libtmux.Window.Target","qualifiedName":"Libtmux.Window.Target","name":"Target","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":248,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n val source : t -> Source.t\n val id : t -> Id.t\n end","source":{"file":"lib/libtmux.mli","line":248,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","slug":"libtmux-window-target-6ecc"},{"id":"Libtmux.Window.Target.id","publicId":"Libtmux.Window.Target.id","qualifiedName":"Libtmux.Window.Target.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":253,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":253,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Target","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-window-target-id"},{"id":"Libtmux.Window.Target.of_id","publicId":"Libtmux.Window.Target.of_id","qualifiedName":"Libtmux.Window.Target.of_id","name":"of_id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":251,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val of_id : source:Source.t -> Id.t -> t","source":{"file":"lib/libtmux.mli","line":251,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Target","signatures":[{"raw":"val of_id : source:Source.t -> Id.t -> t","params":[{"name":"source","type":"Source.t","keywordOnly":true},{"name":"arg1","type":"Id.t"}],"returns":"t"}],"slug":"libtmux-window-target-of_id"},{"id":"Libtmux.Window.Target.source","publicId":"Libtmux.Window.Target.source","qualifiedName":"Libtmux.Window.Target.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":252,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":252,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Target","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-window-target-source"},{"id":"Libtmux.Window.Target.t","publicId":"Libtmux.Window.Target.t","qualifiedName":"Libtmux.Window.Target.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":249,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":249,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window.Target","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-window-target-t"},{"id":"Libtmux.Window.height","publicId":"Libtmux.Window.height","qualifiedName":"Libtmux.Window.height","name":"height","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":261,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val height : t -> int","source":{"file":"lib/libtmux.mli","line":261,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val height : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-window-height"},{"id":"Libtmux.Window.id","publicId":"Libtmux.Window.id","qualifiedName":"Libtmux.Window.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":258,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":258,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-window-id-1sjw"},{"id":"Libtmux.Window.layout","publicId":"Libtmux.Window.layout","qualifiedName":"Libtmux.Window.layout","name":"layout","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":262,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val layout : t -> string","source":{"file":"lib/libtmux.mli","line":262,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val layout : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-window-layout"},{"id":"Libtmux.Window.links","publicId":"Libtmux.Window.links","qualifiedName":"Libtmux.Window.links","name":"links","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":273,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val links : t -> Window_link.t Iarray.t","source":{"file":"lib/libtmux.mli","line":273,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val links : t -> Window_link.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Window_link.t Iarray.t"}],"slug":"libtmux-window-links"},{"id":"Libtmux.Window.name","publicId":"Libtmux.Window.name","qualifiedName":"Libtmux.Window.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":259,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : t -> string","source":{"file":"lib/libtmux.mli","line":259,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val name : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-window-name"},{"id":"Libtmux.Window.panes","publicId":"Libtmux.Window.panes","qualifiedName":"Libtmux.Window.panes","name":"panes","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":272,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val panes : t -> Pane.t Iarray.t","source":{"file":"lib/libtmux.mli","line":272,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val panes : t -> Pane.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Pane.t Iarray.t"}],"doc":{"summary":"","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_graph.ml","intro":"Navigate the typed object graph. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_graph.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"graph: 2 sessions, 2 windows, 3 links, 2 panes\n","intro":"Expected outcome line, after the temporary socket path:"}]},"slug":"libtmux-window-panes"},{"id":"Libtmux.Window.same_entity","publicId":"Libtmux.Window.same_entity","qualifiedName":"Libtmux.Window.same_entity","name":"same_entity","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":266,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Compare IDs within the same bound {!Source.t} generation. "],"declarations":[{"kind":"function","text":"val same_entity : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":266,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","doc":{"summary":"Compare IDs within the same bound {!Source.t} generation."},"signatures":[{"raw":"val same_entity : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-window-same_entity"},{"id":"Libtmux.Window.same_observation","publicId":"Libtmux.Window.same_observation","qualifiedName":"Libtmux.Window.same_observation","name":"same_observation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":269,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Compare entity identity and snapshot identity. "],"declarations":[{"kind":"function","text":"val same_observation : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":269,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","doc":{"summary":"Compare entity identity and snapshot identity."},"signatures":[{"raw":"val same_observation : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-window-same_observation"},{"id":"Libtmux.Window.source","publicId":"Libtmux.Window.source","qualifiedName":"Libtmux.Window.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":263,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":263,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-window-source"},{"id":"Libtmux.Window.t","publicId":"Libtmux.Window.t","qualifiedName":"Libtmux.Window.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":231,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":231,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-window-t"},{"id":"Libtmux.Window.target","publicId":"Libtmux.Window.target","qualifiedName":"Libtmux.Window.target","name":"target","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":264,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val target : t -> target","source":{"file":"lib/libtmux.mli","line":264,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val target : t -> target","params":[{"name":"arg1","type":"t"}],"returns":"target"}],"slug":"libtmux-window-target-1sbf"},{"id":"Libtmux.Window.target:type","publicId":"Libtmux.Window.target:type","qualifiedName":"Libtmux.Window.target","name":"target","kind":"typealias","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":256,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type target = Target.t","source":{"file":"lib/libtmux.mli","line":256,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","type":"Target.t","signatures":[{"raw":"type target = Target.t","params":[]}],"slug":"libtmux-window-target-type"},{"id":"Libtmux.Window.width","publicId":"Libtmux.Window.width","qualifiedName":"Libtmux.Window.width","name":"width","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":260,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val width : t -> int","source":{"file":"lib/libtmux.mli","line":260,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val width : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-window-width"},{"id":"Libtmux.Window_link","publicId":"Libtmux.Window_link","qualifiedName":"Libtmux.Window_link","name":"Window_link","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":278,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" One captured session/index/window context. It is not a stable link\n incarnation across unlinking, movement or reindexing. "],"declarations":[{"kind":"module","text":"and Window_link : sig\n type t\n\n module Fields : sig\n val index : (t, int) Field.t\n val is_current : (t, bool) Field.t\n end\n\n module Relations : sig\n val session : (t, Session.t) Relation.One.t\n val window : (t, Window.t) Relation.One.t\n end\n\n val index : t -> int\n val is_current : t -> bool\n val session : t -> Session.t\n val window : t -> Window.t\n\n val same_context : t -> t -> bool\n (** Compare source, session, index and window. An equal context does not\n certify a stable link incarnation across reindexing or unlink/relink. *)\n\n val same_observation : t -> t -> bool\nend","source":{"file":"lib/libtmux.mli","line":278,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux","doc":{"summary":"One captured session/index/window context. It is not a stable link incarnation across unlinking, movement or reindexing."},"slug":"libtmux-window_link"},{"id":"Libtmux.Window_link.Fields","publicId":"Libtmux.Window_link.Fields","qualifiedName":"Libtmux.Window_link.Fields","name":"Fields","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":281,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Fields : sig\n val index : (t, int) Field.t\n val is_current : (t, bool) Field.t\n end","source":{"file":"lib/libtmux.mli","line":281,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link","slug":"libtmux-window_link-fields"},{"id":"Libtmux.Window_link.Fields.index","publicId":"Libtmux.Window_link.Fields.index","qualifiedName":"Libtmux.Window_link.Fields.index","name":"index","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":282,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val index : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":282,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link.Fields","signatures":[{"raw":"val index : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-window_link-fields-index"},{"id":"Libtmux.Window_link.Fields.is_current","publicId":"Libtmux.Window_link.Fields.is_current","qualifiedName":"Libtmux.Window_link.Fields.is_current","name":"is_current","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":283,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val is_current : (t, bool) Field.t","source":{"file":"lib/libtmux.mli","line":283,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link.Fields","signatures":[{"raw":"val is_current : (t, bool) Field.t","params":[],"returns":"(t, bool) Field.t"}],"slug":"libtmux-window_link-fields-is_current"},{"id":"Libtmux.Window_link.Relations","publicId":"Libtmux.Window_link.Relations","qualifiedName":"Libtmux.Window_link.Relations","name":"Relations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":286,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Relations : sig\n val session : (t, Session.t) Relation.One.t\n val window : (t, Window.t) Relation.One.t\n end","source":{"file":"lib/libtmux.mli","line":286,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link","slug":"libtmux-window_link-relations"},{"id":"Libtmux.Window_link.Relations.session","publicId":"Libtmux.Window_link.Relations.session","qualifiedName":"Libtmux.Window_link.Relations.session","name":"session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":287,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val session : (t, Session.t) Relation.One.t","source":{"file":"lib/libtmux.mli","line":287,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link.Relations","signatures":[{"raw":"val session : (t, Session.t) Relation.One.t","params":[],"returns":"(t, Session.t) Relation.One.t"}],"slug":"libtmux-window_link-relations-session"},{"id":"Libtmux.Window_link.Relations.window","publicId":"Libtmux.Window_link.Relations.window","qualifiedName":"Libtmux.Window_link.Relations.window","name":"window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":288,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val window : (t, Window.t) Relation.One.t","source":{"file":"lib/libtmux.mli","line":288,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link.Relations","signatures":[{"raw":"val window : (t, Window.t) Relation.One.t","params":[],"returns":"(t, Window.t) Relation.One.t"}],"slug":"libtmux-window_link-relations-window"},{"id":"Libtmux.Window_link.index","publicId":"Libtmux.Window_link.index","qualifiedName":"Libtmux.Window_link.index","name":"index","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":291,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val index : t -> int","source":{"file":"lib/libtmux.mli","line":291,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"val index : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-window_link-index"},{"id":"Libtmux.Window_link.is_current","publicId":"Libtmux.Window_link.is_current","qualifiedName":"Libtmux.Window_link.is_current","name":"is_current","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":292,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is_current : t -> bool","source":{"file":"lib/libtmux.mli","line":292,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"val is_current : t -> bool","params":[{"name":"arg1","type":"t"}],"returns":"bool"}],"slug":"libtmux-window_link-is_current"},{"id":"Libtmux.Window_link.same_context","publicId":"Libtmux.Window_link.same_context","qualifiedName":"Libtmux.Window_link.same_context","name":"same_context","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":296,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Compare source, session, index and window. An equal context does not\n certify a stable link incarnation across reindexing or unlink/relink. "],"declarations":[{"kind":"function","text":"val same_context : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":296,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link","doc":{"summary":"Compare source, session, index and window. An equal context does not certify a stable link incarnation across reindexing or unlink/relink."},"signatures":[{"raw":"val same_context : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-window_link-same_context"},{"id":"Libtmux.Window_link.same_observation","publicId":"Libtmux.Window_link.same_observation","qualifiedName":"Libtmux.Window_link.same_observation","name":"same_observation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":300,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val same_observation : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":300,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"val same_observation : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-window_link-same_observation"},{"id":"Libtmux.Window_link.session","publicId":"Libtmux.Window_link.session","qualifiedName":"Libtmux.Window_link.session","name":"session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":293,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val session : t -> Session.t","source":{"file":"lib/libtmux.mli","line":293,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"val session : t -> Session.t","params":[{"name":"arg1","type":"t"}],"returns":"Session.t"}],"slug":"libtmux-window_link-session"},{"id":"Libtmux.Window_link.t","publicId":"Libtmux.Window_link.t","qualifiedName":"Libtmux.Window_link.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":279,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":279,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-window_link-t"},{"id":"Libtmux.Window_link.window","publicId":"Libtmux.Window_link.window","qualifiedName":"Libtmux.Window_link.window","name":"window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":294,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val window : t -> Window.t","source":{"file":"lib/libtmux.mli","line":294,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"val window : t -> Window.t","params":[{"name":"arg1","type":"t"}],"returns":"Window.t"}],"slug":"libtmux-window_link-window"},{"id":"Libtmux_eio","publicId":"Libtmux_eio","qualifiedName":"Libtmux_eio","name":"Libtmux_eio","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":1,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Concurrent Linux tmux clients using the application's Eio scheduler.\n\n Client methods perform I/O unless documented otherwise. Captured\n {!Libtmux.Snapshot} observations and retained {!Operation.inspect} remain\n local. Clients belong to the connecting domain. Closure releases their owned\n resources; tmux applies its configured daemon lifetime.\n\n See {!Client} for acquisition and commands, {!Operation} for cancellation\n outcomes, and {!Subscription} for bounded future output. The\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md}streaming\n guide} demonstrates application-owned switches, cancellation and continuity\n gaps. "],"declarations":[{"kind":"module","text":"","source":{"file":"eio/libtmux_eio.mli","line":1,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"doc":{"summary":"Concurrent Linux tmux clients using the application's Eio scheduler.","body":"Client methods perform I/O unless documented otherwise. Captured {!Libtmux.Snapshot} observations and retained {!Operation.inspect} remain local. Clients belong to the connecting domain. Closure releases their owned resources; tmux applies its configured daemon lifetime.\n\nSee {!Client} for acquisition and commands, {!Operation} for cancellation outcomes, and {!Subscription} for bounded future output. The [streaming guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md) demonstrates application-owned switches, cancellation and continuity gaps."},"slug":"libtmux_eio"},{"id":"Libtmux_eio.Cleanup","publicId":"Libtmux_eio.Cleanup","qualifiedName":"Libtmux_eio.Cleanup","name":"Cleanup","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":14,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Domain-owned cleanup diagnostics shared with the blocking backend. Supply a\n report before setup to inspect secondary failures after native cancellation.\n No scheduler is needed to inspect a report. "],"declarations":[{"kind":"module","text":"module Cleanup = Libtmux_unix.Cleanup","source":{"file":"eio/libtmux_eio.mli","line":14,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio","doc":{"summary":"Domain-owned cleanup diagnostics shared with the blocking backend. Supply a report before setup to inspect secondary failures after native cancellation. No scheduler is needed to inspect a report."},"exportedFrom":"Libtmux_unix.Cleanup","slug":"libtmux_eio-cleanup"},{"id":"Libtmux_eio.Client","publicId":"Libtmux_eio.Client","qualifiedName":"Libtmux_eio.Client","name":"Client","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":127,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" An explicit generation-bound connection. Applications retain ownership of\n the endpoint choice and resource lifetime. "],"declarations":[{"kind":"module","text":"module Client : sig\n type t\n\n val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:_ Eio.Process.mgr ->\n mono_clock:_ Eio.Time.Mono.t ->\n Libtmux.Endpoint.t ->\n (t, Libtmux.Error.t) result\n (** Attach to an existing local Linux daemon in the same PID namespace and\n shared filesystem. Requires pidfd support. Default exchange timeout: one\n second. All client calls belong to the connecting OCaml domain. Initial\n and auxiliary attachments suppress tmux's [update-environment] behavior.\n *)\n\n val cleanup : t -> Cleanup.t\n (** Read the supplied report or the client's fresh default without I/O.\n {!Cleanup.inspect} remains available after close. *)\n\n val source : t -> Libtmux.Source.t\n (** Read the retained endpoint, daemon PID and connection generation without\n I/O. *)\n\n val version : t -> string\n (** Read the bound daemon's observed version without I/O. *)\n\n val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t ->\n Libtmux.Pane.t ->\n (Subscription.t, Libtmux.Error.t) result\n (** Acquire verified coverage through one shared lane per session; choose the\n least observed session ID unless supplied. A client-owned reader delivers\n future bytes without application callbacks. Default queue bounds are 1\n MiB/1024 events; max 16 subscribers and eight total client lanes, sharing\n the 32 MiB payload budget. Queue capacities remain reserved while empty;\n captures and reads need additional scratch space and can return\n {!Libtmux.Error.Capacity} below the subscriber-count limit. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity}shared\n capacity guide} for combined reservations and process slots.\n\n Overflow or coverage/layout changes emit Gap then End. Data starts after\n admission's marker, with no snapshot/history barrier, automatic reconnect\n or silent cursor reuse. New admission returns [Error Libtmux.Error.Closed]\n once {!close} starts. *)\n\n val wait_for_text :\n ?timeout:float ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n text:string ->\n (Rendered.t, Libtmux.Error.t) result\n (** Subscribe and capture the screen immediately, then recapture on output.\n Membership/overflow gaps establish fresh coverage in the same binding.\n Maximum pattern: 64 KiB. Return captured rendered text containing it;\n transient text may be missed. Deadlines are checked between bounded\n acquisitions, whose I/O retains the client exchange timeout. Cancellation\n propagates and releases the subscription. A cleanup failure cannot replace\n an earlier error or cancellation; inspect {!cleanup} for secondary\n failures. Otherwise cleanup failure prevents success or renewed coverage.\n No history/barrier guarantee. *)\n\n val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result\n (** Validate and reserve bounded capacity without I/O. Return\n [Error Libtmux.Error.Closed] once {!close} starts. *)\n\n val await : 'a Operation.t -> ('a, Libtmux.Error.t) result\n (** Cancellation propagates as Eio cancellation. Store the handle outside the\n cancelled fiber: the client drains written work independently, and the\n eventual result remains inspectable. *)\n\n val run : t -> 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result\n (** Submit and await an explicit command. Retain a separate submitted handle\n when the outcome must remain inspectable after caller cancellation. *)\n\n val capture : t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result\n (** Acquire a complete immutable graph over an interval. Conflicting or\n disappearing entities fail capture; they do not become empty relations.\n The returned values remain readable after client closure. *)\n\n val capture_text :\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int ->\n end_:int ->\n (Rendered.t, Libtmux.Error.t) result\n (** Inclusive ordinary screen rows, using a bounded private file transfer.\n Qualified local scratch storage must be shared with the daemon. *)\n\n (* BEGIN GENERATED OPERATIONS *)\n val rename_window :\n t -> Libtmux.Window.target -> name:string -> (unit, Libtmux.Error.t) result\n (** Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. *)\n\n val rename_session :\n t -> Libtmux.Session.target -> name:string -> (unit, Libtmux.Error.t) result\n (** Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. *)\n\n val switch_client_at :\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result\n (** Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. *)\n\n val request_detach_client_at :\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result\n (** Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. *)\n\n val refresh_client_at :\n ?status_only:bool ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result\n (** Request a redraw; no terminal-rendering completion is implied. *)\n\n val resize_control_client_at :\n t ->\n Libtmux.Client_name.t ->\n width:int ->\n height:int ->\n (unit, Libtmux.Error.t) result\n (** Set a control client's reported size. tmux rejects terminal clients. *)\n\n val send_text :\n t -> Libtmux.Pane.target -> text:string -> (unit, Libtmux.Error.t) result\n (** Literal bytes, without an implicit Enter. NUL is rejected at admission. *)\n\n val send_keys :\n t ->\n Libtmux.Pane.target ->\n Libtmux.Key.t list ->\n (unit, Libtmux.Error.t) result\n (** Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. *)\n\n val wait_for : t -> string -> (unit, Libtmux.Error.t) result\n (** Wait on a named tmux semaphore using a dedicated bound lane. *)\n\n val signal : t -> string -> (unit, Libtmux.Error.t) result\n (** Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. *)\n\n val capture_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result\n (** Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n *)\n\n val set_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. *)\n\n val unset_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result\n (** Remove the local entry, allowing a global value to apply to future panes.\n *)\n\n val remove_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result\n (** Store a removal marker, excluding the variable from future panes. *)\n\n val capture_options :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result\n (** Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Libtmux.Error.Unsupported}. *)\n\n val read_option :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result\n (** Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. *)\n\n val set_option :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Options.scalar ->\n (unit, Libtmux.Error.t) result\n (** Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. *)\n\n val unset_option :\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. *)\n\n val clear_option_array :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result\n (** Set a local empty array, masking inheritance. *)\n\n val capture_hooks :\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result\n (** Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. *)\n\n val read_hook :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result\n (** Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. *)\n\n val set_hook :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Hook.command list ->\n (unit, Libtmux.Error.t) result\n (** Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Libtmux.Options.Text] value; bulk hook capture includes built-ins.\n Commands may cause arbitrary tmux effects when triggered. Hooks that print\n output are outside the supported control transport contract. *)\n\n val remove_hook :\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. *)\n\n val run_hook :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result\n (** Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. *)\n\n val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n name:string ->\n unit ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create a detached session on the bound daemon. Name collisions fail. *)\n\n val create_window :\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Session.target ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create detached, rejecting an occupied explicit index. *)\n\n val split_pane :\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. *)\n\n val break_pane :\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. *)\n\n val kill_session :\n t -> Libtmux.Session.target -> (unit, Libtmux.Error.t) result\n (** Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. *)\n\n val kill_window : t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result\n (** Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. *)\n\n val kill_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result\n (** Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. *)\n\n val select_window_at :\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result\n (** Operate on the session's current index at execution, not an old link\n incarnation. *)\n\n val unlink_window_at :\n ?allow_kill:bool ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Without [allow_kill], tmux rejects removal of the last link to a window.\n *)\n\n val link_window :\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. *)\n\n val move_window_at :\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Move the source session's current link at [from_index]. Destination\n collisions fail. *)\n\n val select_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result\n (** Make the pane active in its containing window. This does not open or\n attach a terminal client. *)\n\n val set_pane_title :\n t -> Libtmux.Pane.target -> title:string -> (unit, Libtmux.Error.t) result\n (** Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. *)\n\n val resize_pane :\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. *)\n\n val resize_window :\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. *)\n\n val select_layout :\n t ->\n Libtmux.Window.target ->\n Libtmux.Layout.t ->\n (unit, Libtmux.Error.t) result\n (** Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. *)\n\n val cycle_layout :\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] ->\n (unit, Libtmux.Error.t) result\n (** Select the next or previous tmux preset layout for this window. *)\n\n val move_pane :\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (unit, Libtmux.Error.t) result\n (** Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. *)\n\n val swap_panes :\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. *)\n\n val rotate_panes :\n t ->\n Libtmux.Window.target ->\n [ `Forward | `Backward ] ->\n (unit, Libtmux.Error.t) result\n (** Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. *)\n\n val zoom_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result\n (** Toggle the window's zoom state around this pane. *)\n\n val respawn_pane :\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Spawn.t ->\n (unit, Libtmux.Error.t) result\n (** Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. *)\n\n val clear_history : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result\n (** Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. *)\n\n (* END GENERATED OPERATIONS *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** Retire the generation and close owned control clients and descriptors.\n Reject new {!submit} and {!subscribe} calls as soon as closing starts.\n Concurrent calls await the same teardown result. Later calls retain a\n teardown failure instead of treating the closed flag as success. Each\n helper gets 200 ms of TERM grace, followed by KILL if needed and reaping.\n Other fibers can run during that wait. The grace is per helper; it does\n not bound scheduling, filesystem or uninterruptible kernel work. No signal\n targets the daemon. tmux's [exit-unattached] and [exit-empty] policies can\n end the daemon after its clients or sessions disappear. *)\nend","source":{"file":"eio/libtmux_eio.mli","line":127,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio","doc":{"summary":"An explicit generation-bound connection. Applications retain ownership of the endpoint choice and resource lifetime."},"slug":"libtmux_eio-client"},{"id":"Libtmux_eio.Client.await","publicId":"Libtmux_eio.Client.await","qualifiedName":"Libtmux_eio.Client.await","name":"await","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":200,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Cancellation propagates as Eio cancellation. Store the handle outside the\n cancelled fiber: the client drains written work independently, and the\n eventual result remains inspectable. "],"declarations":[{"kind":"function","text":"val await : 'a Operation.t -> ('a, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":200,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Cancellation propagates as Eio cancellation. Store the handle outside the cancelled fiber: the client drains written work independently, and the eventual result remains inspectable."},"signatures":[{"raw":"val await : 'a Operation.t -> ('a, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a Operation.t"}],"returns":"('a, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-await"},{"id":"Libtmux_eio.Client.break_pane","publicId":"Libtmux_eio.Client.break_pane","qualifiedName":"Libtmux_eio.Client.break_pane","name":"break_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":443,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. "],"declarations":[{"kind":"function","text":"val break_pane :\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":443,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Move the pane into a new window at an explicit session index. An occupied destination fails. The returned IDs describe the resulting context; the pane itself already existed."},"signatures":[{"raw":"val break_pane :\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-break_pane"},{"id":"Libtmux_eio.Client.capture","publicId":"Libtmux_eio.Client.capture","qualifiedName":"Libtmux_eio.Client.capture","name":"capture","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":209,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Acquire a complete immutable graph over an interval. Conflicting or\n disappearing entities fail capture; they do not become empty relations.\n The returned values remain readable after client closure. "],"declarations":[{"kind":"function","text":"val capture : t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":209,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Acquire a complete immutable graph over an interval. Conflicting or disappearing entities fail capture; they do not become empty relations. The returned values remain readable after client closure."},"signatures":[{"raw":"val capture : t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(Libtmux.Snapshot.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-capture"},{"id":"Libtmux_eio.Client.capture_environment","publicId":"Libtmux_eio.Client.capture_environment","qualifiedName":"Libtmux_eio.Client.capture_environment","name":"capture_environment","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":285,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n "],"declarations":[{"kind":"function","text":"val capture_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":285,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Acquire a bounded table through a read-only command process. Its response must identify the bound daemon while the original pidfd remains live. Unsupported external variable names fail decoding; they are not omitted."},"signatures":[{"raw":"val capture_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result","params":[{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"}],"returns":"(Libtmux.Environment.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-capture_environment"},{"id":"Libtmux_eio.Client.capture_hooks","publicId":"Libtmux_eio.Client.capture_hooks","qualifiedName":"Libtmux_eio.Client.capture_hooks","name":"capture_hooks","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":364,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. "],"declarations":[{"kind":"function","text":"val capture_hooks :\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":364,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Capture locally configured built-in hooks. Command values are tmux's printed representation, retained as data."},"signatures":[{"raw":"val capture_hooks :\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"}],"returns":"(Libtmux.Options.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-capture_hooks"},{"id":"Libtmux_eio.Client.capture_options","publicId":"Libtmux_eio.Client.capture_options","qualifiedName":"Libtmux_eio.Client.capture_options","name":"capture_options","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":315,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Libtmux.Error.Unsupported}. "],"declarations":[{"kind":"function","text":"val capture_options :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":315,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Acquire one bounded option table, excluding hooks. The default includes only local entries. Inherited table enumeration includes built-ins; inherited user options require `read_option` with their explicit name. Built-in descriptors cover every supported release from tmux 3.3a through 3.8; other versions return {!Libtmux.Error.Unsupported}."},"signatures":[{"raw":"val capture_options :\n ?include_inherited:bool ->\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"}],"returns":"(Libtmux.Options.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-capture_options"},{"id":"Libtmux_eio.Client.capture_text","publicId":"Libtmux_eio.Client.capture_text","qualifiedName":"Libtmux_eio.Client.capture_text","name":"capture_text","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":214,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Inclusive ordinary screen rows, using a bounded private file transfer.\n Qualified local scratch storage must be shared with the daemon. "],"declarations":[{"kind":"function","text":"val capture_text :\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int ->\n end_:int ->\n (Rendered.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":214,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Inclusive ordinary screen rows, using a bounded private file transfer. Qualified local scratch storage must be shared with the daemon."},"signatures":[{"raw":"val capture_text :\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int -> end_:int -> (Rendered.t, Libtmux.Error.t) result","params":[{"name":"scratch_dir","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"},{"name":"start","type":"int","keywordOnly":true},{"name":"end_","type":"int","keywordOnly":true}],"returns":"(Rendered.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-capture_text"},{"id":"Libtmux_eio.Client.cleanup","publicId":"Libtmux_eio.Client.cleanup","qualifiedName":"Libtmux_eio.Client.cleanup","name":"cleanup","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":145,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read the supplied report or the client's fresh default without I/O.\n {!Cleanup.inspect} remains available after close. "],"declarations":[{"kind":"function","text":"val cleanup : t -> Cleanup.t","source":{"file":"eio/libtmux_eio.mli","line":145,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Read the supplied report or the client's fresh default without I/O. {!Cleanup.inspect} remains available after close."},"signatures":[{"raw":"val cleanup : t -> Cleanup.t","params":[{"name":"arg1","type":"t"}],"returns":"Cleanup.t"}],"slug":"libtmux_eio-client-cleanup"},{"id":"Libtmux_eio.Client.clear_history","publicId":"Libtmux_eio.Client.clear_history","qualifiedName":"Libtmux_eio.Client.clear_history","name":"clear_history","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":584,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. "],"declarations":[{"kind":"function","text":"val clear_history : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":584,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Clear stored scrollback for this pane. The visible screen and running process remain; later captures cannot recover discarded history."},"signatures":[{"raw":"val clear_history :\n t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-clear_history"},{"id":"Libtmux_eio.Client.clear_option_array","publicId":"Libtmux_eio.Client.clear_option_array","qualifiedName":"Libtmux_eio.Client.clear_option_array","name":"clear_option_array","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":360,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a local empty array, masking inheritance. "],"declarations":[{"kind":"function","text":"val clear_option_array :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":360,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set a local empty array, masking inheritance."},"signatures":[{"raw":"val clear_option_array :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-clear_option_array"},{"id":"Libtmux_eio.Client.close","publicId":"Libtmux_eio.Client.close","qualifiedName":"Libtmux_eio.Client.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":590,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Retire the generation and close owned control clients and descriptors.\n Reject new {!submit} and {!subscribe} calls as soon as closing starts.\n Concurrent calls await the same teardown result. Later calls retain a\n teardown failure instead of treating the closed flag as success. Each\n helper gets 200 ms of TERM grace, followed by KILL if needed and reaping.\n Other fibers can run during that wait. The grace is per helper; it does\n not bound scheduling, filesystem or uninterruptible kernel work. No signal\n targets the daemon. tmux's [exit-unattached] and [exit-empty] policies can\n end the daemon after its clients or sessions disappear. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":590,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Retire the generation and close owned control clients and descriptors. Reject new {!submit} and {!subscribe} calls as soon as closing starts. Concurrent calls await the same teardown result. Later calls retain a teardown failure instead of treating the closed flag as success. Each helper gets 200 ms of TERM grace, followed by KILL if needed and reaping. Other fibers can run during that wait. The grace is per helper; it does not bound scheduling, filesystem or uninterruptible kernel work. No signal targets the daemon. tmux's `exit-unattached` and `exit-empty` policies can end the daemon after its clients or sessions disappear."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-close"},{"id":"Libtmux_eio.Client.connect","publicId":"Libtmux_eio.Client.connect","qualifiedName":"Libtmux_eio.Client.connect","name":"connect","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":130,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Attach to an existing local Linux daemon in the same PID namespace and\n shared filesystem. Requires pidfd support. Default exchange timeout: one\n second. All client calls belong to the connecting OCaml domain. Initial\n and auxiliary attachments suppress tmux's [update-environment] behavior.\n "],"declarations":[{"kind":"function","text":"val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:_ Eio.Process.mgr ->\n mono_clock:_ Eio.Time.Mono.t ->\n Libtmux.Endpoint.t ->\n (t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":130,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Attach to an existing local Linux daemon in the same PID namespace and shared filesystem. Requires pidfd support. Default exchange timeout: one second. All client calls belong to the connecting OCaml domain. Initial and auxiliary attachments suppress tmux's `update-environment` behavior."},"signatures":[{"raw":"val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr ->\n mono_clock:[> Eio.Time.Mono.ty ] Eio.Time.Mono.t ->\n Libtmux.Endpoint.t -> (t, Libtmux.Error.t) result","params":[{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"sw","type":"Eio.Switch.t","keywordOnly":true},{"name":"process_mgr","type":"[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr","keywordOnly":true},{"name":"mono_clock","type":"[> Eio.Time.Mono.ty ] Eio.Time.Mono.t","keywordOnly":true},{"name":"arg1","type":"Libtmux.Endpoint.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-connect"},{"id":"Libtmux_eio.Client.create_session","publicId":"Libtmux_eio.Client.create_session","qualifiedName":"Libtmux_eio.Client.create_session","name":"create_session","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":412,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Create a detached session on the bound daemon. Name collisions fail. "],"declarations":[{"kind":"function","text":"val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n name:string ->\n unit ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":412,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Create a detached session on the bound daemon. Name collisions fail."},"signatures":[{"raw":"val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t -> name:string -> unit -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"window_name","type":"string","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg2","type":"unit"}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-create_session"},{"id":"Libtmux_eio.Client.create_window","publicId":"Libtmux_eio.Client.create_window","qualifiedName":"Libtmux_eio.Client.create_window","name":"create_window","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":423,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Create detached, rejecting an occupied explicit index. "],"declarations":[{"kind":"function","text":"val create_window :\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Session.target ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":423,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Create detached, rejecting an occupied explicit index."},"signatures":[{"raw":"val create_window :\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t -> Libtmux.Session.target -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-create_window"},{"id":"Libtmux_eio.Client.cycle_layout","publicId":"Libtmux_eio.Client.cycle_layout","qualifiedName":"Libtmux_eio.Client.cycle_layout","name":"cycle_layout","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":537,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Select the next or previous tmux preset layout for this window. "],"declarations":[{"kind":"function","text":"val cycle_layout :\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":537,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Select the next or previous tmux preset layout for this window."},"signatures":[{"raw":"val cycle_layout :\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"[ `Next | `Previous ]"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-cycle_layout"},{"id":"Libtmux_eio.Client.kill_pane","publicId":"Libtmux_eio.Client.kill_pane","qualifiedName":"Libtmux_eio.Client.kill_pane","name":"kill_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":463,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. "],"declarations":[{"kind":"function","text":"val kill_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":463,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Destroy the target pane and its running process. tmux removes a window that becomes empty and may remove its now-empty sessions."},"signatures":[{"raw":"val kill_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-kill_pane"},{"id":"Libtmux_eio.Client.kill_session","publicId":"Libtmux_eio.Client.kill_session","qualifiedName":"Libtmux_eio.Client.kill_session","name":"kill_session","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":454,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. "],"declarations":[{"kind":"function","text":"val kill_session :\n t -> Libtmux.Session.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":454,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Remove the session and its window links. Windows with no other links and their panes are destroyed. Removing the last session may stop tmux."},"signatures":[{"raw":"val kill_session :\n t -> Libtmux.Session.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-kill_session"},{"id":"Libtmux_eio.Client.kill_window","publicId":"Libtmux_eio.Client.kill_window","qualifiedName":"Libtmux_eio.Client.kill_window","name":"kill_window","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":459,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. "],"declarations":[{"kind":"function","text":"val kill_window : t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":459,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Destroy the window, all its session links and every contained pane. This acts on the global window, not a single contextual link."},"signatures":[{"raw":"val kill_window :\n t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-kill_window"},{"id":"Libtmux_eio.Client.link_window","publicId":"Libtmux_eio.Client.link_window","qualifiedName":"Libtmux_eio.Client.link_window","name":"link_window","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":481,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. "],"declarations":[{"kind":"function","text":"val link_window :\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":481,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Add a session-specific link to the global window at `index`, rejecting an occupied index. The source window and its panes stay shared."},"signatures":[{"raw":"val link_window :\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-link_window"},{"id":"Libtmux_eio.Client.move_pane","publicId":"Libtmux_eio.Client.move_pane","qualifiedName":"Libtmux_eio.Client.move_pane","name":"move_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":544,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. "],"declarations":[{"kind":"function","text":"val move_pane :\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":544,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Move the source pane beside another pane, optionally setting the split size. Both targets must belong to the same bound generation. An emptied source window is removed by tmux."},"signatures":[{"raw":"val move_pane :\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction -> (unit, Libtmux.Error.t) result","params":[{"name":"size","type":"Libtmux.Geometry.size","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"beside","type":"Libtmux.Pane.target","keywordOnly":true},{"name":"direction","type":"Libtmux.Geometry.direction","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-move_pane"},{"id":"Libtmux_eio.Client.move_window_at","publicId":"Libtmux_eio.Client.move_window_at","qualifiedName":"Libtmux_eio.Client.move_window_at","name":"move_window_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":490,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Move the source session's current link at [from_index]. Destination\n collisions fail. "],"declarations":[{"kind":"function","text":"val move_window_at :\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":490,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Move the source session's current link at `from_index`. Destination collisions fail."},"signatures":[{"raw":"val move_window_at :\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"from_index","type":"int","keywordOnly":true},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-move_window_at"},{"id":"Libtmux_eio.Client.read_hook","publicId":"Libtmux_eio.Client.read_hook","qualifiedName":"Libtmux_eio.Client.read_hook","name":"read_hook","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":369,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. "],"declarations":[{"kind":"function","text":"val read_hook :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":369,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Read an exact hook name. Inheritance is included by default; `None` means no entry under the selected policy. Missing targets remain errors."},"signatures":[{"raw":"val read_hook :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string -> (Libtmux.Options.value option, Libtmux.Error.t) result","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(Libtmux.Options.value option, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-read_hook"},{"id":"Libtmux_eio.Client.read_option","publicId":"Libtmux_eio.Client.read_option","qualifiedName":"Libtmux_eio.Client.read_option","name":"read_option","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":326,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. "],"declarations":[{"kind":"function","text":"val read_option :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":326,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Read one exact name, including user-option inheritance. `None` means no entry under the selected policy. An invalid target remains an error. The default follows inheritance; this does not identify the defining parent scope."},"signatures":[{"raw":"val read_option :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string -> (Libtmux.Options.value option, Libtmux.Error.t) result","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(Libtmux.Options.value option, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-read_option"},{"id":"Libtmux_eio.Client.refresh_client_at","publicId":"Libtmux_eio.Client.refresh_client_at","qualifiedName":"Libtmux_eio.Client.refresh_client_at","name":"refresh_client_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":251,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request a redraw; no terminal-rendering completion is implied. "],"declarations":[{"kind":"function","text":"val refresh_client_at :\n ?status_only:bool ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":251,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Request a redraw; no terminal-rendering completion is implied."},"signatures":[{"raw":"val refresh_client_at :\n ?status_only:bool ->\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result","params":[{"name":"status_only","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-refresh_client_at"},{"id":"Libtmux_eio.Client.remove_environment","publicId":"Libtmux_eio.Client.remove_environment","qualifiedName":"Libtmux_eio.Client.remove_environment","name":"remove_environment","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":311,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Store a removal marker, excluding the variable from future panes. "],"declarations":[{"kind":"function","text":"val remove_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":311,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Store a removal marker, excluding the variable from future panes."},"signatures":[{"raw":"val remove_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-remove_environment"},{"id":"Libtmux_eio.Client.remove_hook","publicId":"Libtmux_eio.Client.remove_hook","qualifiedName":"Libtmux_eio.Client.remove_hook","name":"remove_hook","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":394,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. "],"declarations":[{"kind":"function","text":"val remove_hook :\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":394,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Remove the local hook or one indexed array entry. An inherited hook may become effective again; this does not stop work it already started."},"signatures":[{"raw":"val remove_hook :\n ?index:int ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-remove_hook"},{"id":"Libtmux_eio.Client.rename_session","publicId":"Libtmux_eio.Client.rename_session","qualifiedName":"Libtmux_eio.Client.rename_session","name":"rename_session","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":230,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. "],"declarations":[{"kind":"function","text":"val rename_session :\n t -> Libtmux.Session.target -> name:string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":230,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set the session name, rejecting a conflicting existing name. Bound IDs remain usable; existing snapshots retain their captured names."},"signatures":[{"raw":"val rename_session :\n t ->\n Libtmux.Session.target -> name:string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-rename_session"},{"id":"Libtmux_eio.Client.rename_window","publicId":"Libtmux_eio.Client.rename_window","qualifiedName":"Libtmux_eio.Client.rename_window","name":"rename_window","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":225,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. "],"declarations":[{"kind":"function","text":"val rename_window :\n t -> Libtmux.Window.target -> name:string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":225,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set the global window name. Every session link observes the new name on its next capture; existing snapshots retain the old value."},"signatures":[{"raw":"val rename_window :\n t -> Libtmux.Window.target -> name:string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-rename_window"},{"id":"Libtmux_eio.Client.request_detach_client_at","publicId":"Libtmux_eio.Client.request_detach_client_at","qualifiedName":"Libtmux_eio.Client.request_detach_client_at","name":"request_detach_client_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":245,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. "],"declarations":[{"kind":"function","text":"val request_detach_client_at :\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":245,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Request detachment of the client currently bearing this name. Success confirms request processing, not peer exit. Detaching the library's own primary lane can lose the response and retire its generation."},"signatures":[{"raw":"val request_detach_client_at :\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-request_detach_client_at"},{"id":"Libtmux_eio.Client.resize_control_client_at","publicId":"Libtmux_eio.Client.resize_control_client_at","qualifiedName":"Libtmux_eio.Client.resize_control_client_at","name":"resize_control_client_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":258,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a control client's reported size. tmux rejects terminal clients. "],"declarations":[{"kind":"function","text":"val resize_control_client_at :\n t ->\n Libtmux.Client_name.t ->\n width:int ->\n height:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":258,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set a control client's reported size. tmux rejects terminal clients."},"signatures":[{"raw":"val resize_control_client_at :\n t ->\n Libtmux.Client_name.t ->\n width:int -> height:int -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"},{"name":"width","type":"int","keywordOnly":true},{"name":"height","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-resize_control_client_at"},{"id":"Libtmux_eio.Client.resize_pane","publicId":"Libtmux_eio.Client.resize_pane","qualifiedName":"Libtmux_eio.Client.resize_pane","name":"resize_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":509,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. "],"declarations":[{"kind":"function","text":"val resize_pane :\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":509,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. tmux can constrain the result to the available layout. Capture again to observe the actual dimensions."},"signatures":[{"raw":"val resize_pane :\n ?width:int ->\n ?height:int -> t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-resize_pane"},{"id":"Libtmux_eio.Client.resize_window","publicId":"Libtmux_eio.Client.resize_window","qualifiedName":"Libtmux_eio.Client.resize_window","name":"resize_window","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":519,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. "],"declarations":[{"kind":"function","text":"val resize_window :\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":519,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. Client-size and window-size policies can affect subsequent sizing."},"signatures":[{"raw":"val resize_window :\n ?width:int ->\n ?height:int -> t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result","params":[{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-resize_window"},{"id":"Libtmux_eio.Client.respawn_pane","publicId":"Libtmux_eio.Client.respawn_pane","qualifiedName":"Libtmux_eio.Client.respawn_pane","name":"respawn_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":574,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. "],"declarations":[{"kind":"function","text":"val respawn_pane :\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Spawn.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":574,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Start the supplied command in the existing pane. A running process causes failure unless `kill_running:true` explicitly replaces it. The pane ID remains unchanged."},"signatures":[{"raw":"val respawn_pane :\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target -> Libtmux.Spawn.t -> (unit, Libtmux.Error.t) result","params":[{"name":"kill_running","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Spawn.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-respawn_pane"},{"id":"Libtmux_eio.Client.rotate_panes","publicId":"Libtmux_eio.Client.rotate_panes","qualifiedName":"Libtmux_eio.Client.rotate_panes","name":"rotate_panes","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":563,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. "],"declarations":[{"kind":"function","text":"val rotate_panes :\n t ->\n Libtmux.Window.target ->\n [ `Forward | `Backward ] ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":563,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Rotate pane positions in the selected direction. Pane identities and running processes remain attached to their panes."},"signatures":[{"raw":"val rotate_panes :\n t ->\n Libtmux.Window.target ->\n [ `Backward | `Forward ] -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"[ `Backward | `Forward ]"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-rotate_panes"},{"id":"Libtmux_eio.Client.run","publicId":"Libtmux_eio.Client.run","qualifiedName":"Libtmux_eio.Client.run","name":"run","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":205,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Submit and await an explicit command. Retain a separate submitted handle\n when the outcome must remain inspectable after caller cancellation. "],"declarations":[{"kind":"function","text":"val run : t -> 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":205,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Submit and await an explicit command. Retain a separate submitted handle when the outcome must remain inspectable after caller cancellation."},"signatures":[{"raw":"val run : t -> 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"'a Libtmux.Command.t"}],"returns":"('a, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-run"},{"id":"Libtmux_eio.Client.run_hook","publicId":"Libtmux_eio.Client.run_hook","qualifiedName":"Libtmux_eio.Client.run_hook","name":"run_hook","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":403,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. "],"declarations":[{"kind":"function","text":"val run_hook :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":403,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Run the effective hook in an explicit session, window or pane context. A successful result follows completion of its synchronous command queue. Background work started by a hook has its own lifetime. A later hook failure returns an uncertain outcome; preceding effects remain. Named `@` hooks return `Unsupported` because tmux can hide their parse failures in the server log. Configuration and inspection remain available."},"signatures":[{"raw":"val run_hook :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-run_hook"},{"id":"Libtmux_eio.Client.select_layout","publicId":"Libtmux_eio.Client.select_layout","qualifiedName":"Libtmux_eio.Client.select_layout","name":"select_layout","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":529,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. "],"declarations":[{"kind":"function","text":"val select_layout :\n t ->\n Libtmux.Window.target ->\n Libtmux.Layout.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":529,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Apply a preset or validated custom layout to the window. Pane geometry follows tmux layout rules; capture again to observe the result."},"signatures":[{"raw":"val select_layout :\n t ->\n Libtmux.Window.target -> Libtmux.Layout.t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"Libtmux.Layout.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-select_layout"},{"id":"Libtmux_eio.Client.select_pane","publicId":"Libtmux_eio.Client.select_pane","qualifiedName":"Libtmux_eio.Client.select_pane","name":"select_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":500,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Make the pane active in its containing window. This does not open or\n attach a terminal client. "],"declarations":[{"kind":"function","text":"val select_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":500,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Make the pane active in its containing window. This does not open or attach a terminal client."},"signatures":[{"raw":"val select_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-select_pane"},{"id":"Libtmux_eio.Client.select_window_at","publicId":"Libtmux_eio.Client.select_window_at","qualifiedName":"Libtmux_eio.Client.select_window_at","name":"select_window_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":467,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Operate on the session's current index at execution, not an old link\n incarnation. "],"declarations":[{"kind":"function","text":"val select_window_at :\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":467,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Operate on the session's current index at execution, not an old link incarnation."},"signatures":[{"raw":"val select_window_at :\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-select_window_at"},{"id":"Libtmux_eio.Client.send_keys","publicId":"Libtmux_eio.Client.send_keys","qualifiedName":"Libtmux_eio.Client.send_keys","name":"send_keys","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":270,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. "],"declarations":[{"kind":"function","text":"val send_keys :\n t ->\n Libtmux.Pane.target ->\n Libtmux.Key.t list ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":270,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Send named tmux keys in order, without an implicit Enter. Use {!send_text} for literal bytes rather than key interpretation."},"signatures":[{"raw":"val send_keys :\n t ->\n Libtmux.Pane.target -> Libtmux.Key.t list -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Key.t list"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-send_keys"},{"id":"Libtmux_eio.Client.send_text","publicId":"Libtmux_eio.Client.send_text","qualifiedName":"Libtmux_eio.Client.send_text","name":"send_text","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":266,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Literal bytes, without an implicit Enter. NUL is rejected at admission. "],"declarations":[{"kind":"function","text":"val send_text :\n t -> Libtmux.Pane.target -> text:string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":266,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Literal bytes, without an implicit Enter. NUL is rejected at admission."},"signatures":[{"raw":"val send_text :\n t -> Libtmux.Pane.target -> text:string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-send_text"},{"id":"Libtmux_eio.Client.set_environment","publicId":"Libtmux_eio.Client.set_environment","qualifiedName":"Libtmux_eio.Client.set_environment","name":"set_environment","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":295,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. "],"declarations":[{"kind":"function","text":"val set_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":295,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set a local environment value for future pane processes. `hidden` defaults to false; hidden values remain internal to tmux. Existing processes keep their environment."},"signatures":[{"raw":"val set_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-set_environment"},{"id":"Libtmux_eio.Client.set_hook","publicId":"Libtmux_eio.Client.set_hook","qualifiedName":"Libtmux_eio.Client.set_hook","name":"set_hook","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":378,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Libtmux.Options.Text] value; bulk hook capture includes built-ins.\n Commands may cause arbitrary tmux effects when triggered. Hooks that print\n output are outside the supported control transport contract. "],"declarations":[{"kind":"function","text":"val set_hook :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Hook.command list ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":378,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set a hook to a nonempty command list. Without an index, replace the whole hook array, or fill the lowest free index when appending. An explicit `@name` custom hook stores command text as a user option; it requires complete replacement and has no array indexes. `read_hook` returns its `Libtmux.Options.Text` value; bulk hook capture includes built-ins. Commands may cause arbitrary tmux effects when triggered. Hooks that print output are outside the supported control transport contract."},"signatures":[{"raw":"val set_hook :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string -> Libtmux.Hook.command list -> (unit, Libtmux.Error.t) result","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"Libtmux.Hook.command list"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-set_hook"},{"id":"Libtmux_eio.Client.set_option","publicId":"Libtmux_eio.Client.set_option","qualifiedName":"Libtmux_eio.Client.set_option","name":"set_option","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":337,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. "],"declarations":[{"kind":"function","text":"val set_option :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Options.scalar ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":337,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Validate the scope and scalar kind before admission. Array values require an index, or `append:true`. Without an index, tmux splits appended text using the option's separator and fills the lowest unused indexes. Text is literal; tmux format expansion is disabled. Hooks use a separate operation."},"signatures":[{"raw":"val set_option :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string -> Libtmux.Options.scalar -> (unit, Libtmux.Error.t) result","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"Libtmux.Options.scalar"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-set_option"},{"id":"Libtmux_eio.Client.set_pane_title","publicId":"Libtmux_eio.Client.set_pane_title","qualifiedName":"Libtmux_eio.Client.set_pane_title","name":"set_pane_title","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":504,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. "],"declarations":[{"kind":"function","text":"val set_pane_title :\n t -> Libtmux.Pane.target -> title:string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":504,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set the pane title as literal text, without tmux format expansion. A running terminal application can subsequently replace the title."},"signatures":[{"raw":"val set_pane_title :\n t -> Libtmux.Pane.target -> title:string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"title","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-set_pane_title"},{"id":"Libtmux_eio.Client.signal","publicId":"Libtmux_eio.Client.signal","qualifiedName":"Libtmux_eio.Client.signal","name":"signal","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":281,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. "],"declarations":[{"kind":"function","text":"val signal : t -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":281,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Signal a named tmux semaphore, releasing a waiter or retaining the signal for a later {!wait_for}. This does not signal an OS process."},"signatures":[{"raw":"val signal : t -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-signal"},{"id":"Libtmux_eio.Client.source","publicId":"Libtmux_eio.Client.source","qualifiedName":"Libtmux_eio.Client.source","name":"source","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":149,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read the retained endpoint, daemon PID and connection generation without\n I/O. "],"declarations":[{"kind":"function","text":"val source : t -> Libtmux.Source.t","source":{"file":"eio/libtmux_eio.mli","line":149,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Read the retained endpoint, daemon PID and connection generation without I/O."},"signatures":[{"raw":"val source : t -> Libtmux.Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Libtmux.Source.t"}],"slug":"libtmux_eio-client-source"},{"id":"Libtmux_eio.Client.split_pane","publicId":"Libtmux_eio.Client.split_pane","qualifiedName":"Libtmux_eio.Client.split_pane","name":"split_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":432,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. "],"declarations":[{"kind":"function","text":"val split_pane :\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":432,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Create a detached pane beside the target and return the IDs reported by tmux. Omitted `size` lets tmux choose the split; tmux rejects splits when no space remains."},"signatures":[{"raw":"val split_pane :\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"size","type":"Libtmux.Geometry.size","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"direction","type":"Libtmux.Geometry.direction","keywordOnly":true}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-split_pane"},{"id":"Libtmux_eio.Client.submit","publicId":"Libtmux_eio.Client.submit","qualifiedName":"Libtmux_eio.Client.submit","name":"submit","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":195,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Validate and reserve bounded capacity without I/O. Return\n [Error Libtmux.Error.Closed] once {!close} starts. "],"declarations":[{"kind":"function","text":"val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":195,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Validate and reserve bounded capacity without I/O. Return `Error Libtmux.Error.Closed` once {!close} starts."},"signatures":[{"raw":"val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"'a Libtmux.Command.t"}],"returns":"('a Operation.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-submit"},{"id":"Libtmux_eio.Client.subscribe","publicId":"Libtmux_eio.Client.subscribe","qualifiedName":"Libtmux_eio.Client.subscribe","name":"subscribe","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":156,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Acquire verified coverage through one shared lane per session; choose the\n least observed session ID unless supplied. A client-owned reader delivers\n future bytes without application callbacks. Default queue bounds are 1\n MiB/1024 events; max 16 subscribers and eight total client lanes, sharing\n the 32 MiB payload budget. Queue capacities remain reserved while empty;\n captures and reads need additional scratch space and can return\n {!Libtmux.Error.Capacity} below the subscriber-count limit. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity}shared\n capacity guide} for combined reservations and process slots.\n\n Overflow or coverage/layout changes emit Gap then End. Data starts after\n admission's marker, with no snapshot/history barrier, automatic reconnect\n or silent cursor reuse. New admission returns [Error Libtmux.Error.Closed]\n once {!close} starts. "],"declarations":[{"kind":"function","text":"val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t ->\n Libtmux.Pane.t ->\n (Subscription.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":156,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Acquire verified coverage through one shared lane per session; choose the least observed session ID unless supplied. A client-owned reader delivers future bytes without application callbacks. Default queue bounds are 1 MiB/1024 events; max 16 subscribers and eight total client lanes, sharing the 32 MiB payload budget. Queue capacities remain reserved while empty; captures and reads need additional scratch space and can return {!Libtmux.Error.Capacity} below the subscriber-count limit. See the [shared capacity guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity) for combined reservations and process slots.","body":"Overflow or coverage/layout changes emit Gap then End. Data starts after admission's marker, with no snapshot/history barrier, automatic reconnect or silent cursor reuse. New admission returns `Error Libtmux.Error.Closed` once {!close} starts.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet watch_output binary blocking (initial : Created.t) _spawn =\n Eio_main.run @@ fun env ->\n Eio.Switch.run @@ fun sw ->\n let module Client = Libtmux_eio.Client in\n let module Subscription = Libtmux_eio.Subscription in\n let client =\n get\n (Client.connect ~sw ~binary\n ~process_mgr:(Eio.Stdenv.process_mgr env)\n ~mono_clock:(Eio.Stdenv.mono_clock env)\n (Source.endpoint (Libtmux_unix.Client.source blocking)))\n in\n Fun.protect\n ~finally:(fun () ->\n Eio.Cancel.protect (fun () -> get (Client.close client)))\n (fun () ->\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n let subscription =\n get (Client.subscribe ~capacity_bytes:4096 client pane)\n in\n Fun.protect\n ~finally:(fun () ->\n Eio.Cancel.protect (fun () -> get (Subscription.close subscription)))\n (fun () ->\n let cursor, () =\n Eio.Fiber.pair\n (fun () ->\n match\n Subscription.wait_for_bytes ~timeout:0.5 subscription\n ~text:\"changed\"\n with\n | Ok cursor -> cursor\n | Error (Output.Failure error) ->\n failwith (Format.asprintf \"%a\" Error.pp error)\n | Error (Output.Ended reason) ->\n failwith (Format.asprintf \"%a\" Output.reason_pp reason))\n (fun () ->\n get (Client.send_text client (Pane.target pane) ~text:\"changed\");\n get (Client.send_keys client (Pane.target pane) [ Key.Enter ]))\n in\n assert (cursor.offset >= 7L);\n print_endline \"observed: changed\"))\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary (watch_output binary)\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_watch.ml","intro":"Observe future output with Eio. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_watch.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"observed: changed\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t -> Libtmux.Pane.t -> (Subscription.t, Libtmux.Error.t) result","params":[{"name":"session","type":"Libtmux.Session.target","optional":true,"keywordOnly":true},{"name":"capacity_bytes","type":"int","optional":true,"keywordOnly":true},{"name":"capacity_events","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"}],"returns":"(Subscription.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-subscribe"},{"id":"Libtmux_eio.Client.swap_panes","publicId":"Libtmux_eio.Client.swap_panes","qualifiedName":"Libtmux_eio.Client.swap_panes","name":"swap_panes","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":555,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. "],"declarations":[{"kind":"function","text":"val swap_panes :\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":555,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Exchange pane positions without exchanging their identities or running processes. Both targets must belong to the same bound generation."},"signatures":[{"raw":"val swap_panes :\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-swap_panes"},{"id":"Libtmux_eio.Client.switch_client_at","publicId":"Libtmux_eio.Client.switch_client_at","qualifiedName":"Libtmux_eio.Client.switch_client_at","name":"switch_client_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":235,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. "],"declarations":[{"kind":"function","text":"val switch_client_at :\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":235,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Switch the client currently bearing this name to the bound session. Environment updates are disabled by default. This can move either a terminal client or a control client; it does not open a new terminal."},"signatures":[{"raw":"val switch_client_at :\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target -> (unit, Libtmux.Error.t) result","params":[{"name":"update_environment","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-switch_client_at"},{"id":"Libtmux_eio.Client.t","publicId":"Libtmux_eio.Client.t","qualifiedName":"Libtmux_eio.Client.t","name":"t","kind":"typealias","package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":128,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"eio/libtmux_eio.mli","line":128,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_eio-client-t"},{"id":"Libtmux_eio.Client.unlink_window_at","publicId":"Libtmux_eio.Client.unlink_window_at","qualifiedName":"Libtmux_eio.Client.unlink_window_at","name":"unlink_window_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":472,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Without [allow_kill], tmux rejects removal of the last link to a window.\n "],"declarations":[{"kind":"function","text":"val unlink_window_at :\n ?allow_kill:bool ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":472,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Without `allow_kill`, tmux rejects removal of the last link to a window."},"signatures":[{"raw":"val unlink_window_at :\n ?allow_kill:bool ->\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"allow_kill","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-unlink_window_at"},{"id":"Libtmux_eio.Client.unset_environment","publicId":"Libtmux_eio.Client.unset_environment","qualifiedName":"Libtmux_eio.Client.unset_environment","name":"unset_environment","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":306,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove the local entry, allowing a global value to apply to future panes.\n "],"declarations":[{"kind":"function","text":"val unset_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":306,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Remove the local entry, allowing a global value to apply to future panes."},"signatures":[{"raw":"val unset_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-unset_environment"},{"id":"Libtmux_eio.Client.unset_option","publicId":"Libtmux_eio.Client.unset_option","qualifiedName":"Libtmux_eio.Client.unset_option","name":"unset_option","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":351,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. "],"declarations":[{"kind":"function","text":"val unset_option :\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":351,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Remove a local override or one array element. Global built-ins reset to their tmux defaults; this does not recursively unset child overrides."},"signatures":[{"raw":"val unset_option :\n ?index:int ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-unset_option"},{"id":"Libtmux_eio.Client.version","publicId":"Libtmux_eio.Client.version","qualifiedName":"Libtmux_eio.Client.version","name":"version","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":153,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read the bound daemon's observed version without I/O. "],"declarations":[{"kind":"function","text":"val version : t -> string","source":{"file":"eio/libtmux_eio.mli","line":153,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Read the bound daemon's observed version without I/O."},"signatures":[{"raw":"val version : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux_eio-client-version"},{"id":"Libtmux_eio.Client.wait_for","publicId":"Libtmux_eio.Client.wait_for","qualifiedName":"Libtmux_eio.Client.wait_for","name":"wait_for","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":278,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Wait on a named tmux semaphore using a dedicated bound lane. "],"declarations":[{"kind":"function","text":"val wait_for : t -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":278,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Wait on a named tmux semaphore using a dedicated bound lane."},"signatures":[{"raw":"val wait_for : t -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-wait_for"},{"id":"Libtmux_eio.Client.wait_for_text","publicId":"Libtmux_eio.Client.wait_for_text","qualifiedName":"Libtmux_eio.Client.wait_for_text","name":"wait_for_text","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":178,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Subscribe and capture the screen immediately, then recapture on output.\n Membership/overflow gaps establish fresh coverage in the same binding.\n Maximum pattern: 64 KiB. Return captured rendered text containing it;\n transient text may be missed. Deadlines are checked between bounded\n acquisitions, whose I/O retains the client exchange timeout. Cancellation\n propagates and releases the subscription. A cleanup failure cannot replace\n an earlier error or cancellation; inspect {!cleanup} for secondary\n failures. Otherwise cleanup failure prevents success or renewed coverage.\n No history/barrier guarantee. "],"declarations":[{"kind":"function","text":"val wait_for_text :\n ?timeout:float ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n text:string ->\n (Rendered.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":178,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Subscribe and capture the screen immediately, then recapture on output. Membership/overflow gaps establish fresh coverage in the same binding. Maximum pattern: 64 KiB. Return captured rendered text containing it; transient text may be missed. Deadlines are checked between bounded acquisitions, whose I/O retains the client exchange timeout. Cancellation propagates and releases the subscription. A cleanup failure cannot replace an earlier error or cancellation; inspect {!cleanup} for secondary failures. Otherwise cleanup failure prevents success or renewed coverage. No history/barrier guarantee."},"signatures":[{"raw":"val wait_for_text :\n ?timeout:float ->\n ?scratch_dir:string ->\n t -> Libtmux.Pane.t -> text:string -> (Rendered.t, Libtmux.Error.t) result","params":[{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"scratch_dir","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(Rendered.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-wait_for_text"},{"id":"Libtmux_eio.Client.zoom_pane","publicId":"Libtmux_eio.Client.zoom_pane","qualifiedName":"Libtmux_eio.Client.zoom_pane","name":"zoom_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":571,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Toggle the window's zoom state around this pane. "],"declarations":[{"kind":"function","text":"val zoom_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":571,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Toggle the window's zoom state around this pane."},"signatures":[{"raw":"val zoom_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-zoom_pane"},{"id":"Libtmux_eio.Operation","publicId":"Libtmux_eio.Operation","qualifiedName":"Libtmux_eio.Operation","name":"Operation","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":55,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" A retained admitted command. A cancelled waiter does not erase its eventual\n success, failure or uncertainty. "],"declarations":[{"kind":"module","text":"module Operation : sig\n type 'a t\n\n type cleanup_receipt = {\n cause : Libtmux.Error.t;\n owned_buffers : string list;\n created : Libtmux.Created.t list;\n }\n (** [created] retains IDs reported before a later hook or completion failure.\n It does not prove those resources still exist or authorize retry. When the\n daemon watcher retires an in-flight operation, [cause] retains\n {!Libtmux.Error.Disconnected}. Idle-reader failures also retain their\n library cause instead of becoming an explicit client-close reason. *)\n\n type 'a state =\n | Queued\n | Not_started\n | Written\n | Acknowledged\n | Finished of ('a, Libtmux.Error.t) result\n | Outcome_unknown of cleanup_receipt\n\n val id : 'a t -> string\n\n val inspect : 'a t -> ('a state, Libtmux.Error.t) result\n (** Read without I/O, including after client closure. Owning domain only. *)\n\n val cancel : 'a t -> (unit, Libtmux.Error.t) result\n (** Remove unsent work. A written request remains owned and drained by the\n client. *)\n\n val await_stage :\n 'a t -> [ `Written | `Acknowledged ] -> ('a state, Libtmux.Error.t) result\n (** Wait for the named stage or a terminal state. Acknowledgement does not\n establish completion. Cancelling this observer leaves the operation alone.\n *)\nend","source":{"file":"eio/libtmux_eio.mli","line":55,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio","doc":{"summary":"A retained admitted command. A cancelled waiter does not erase its eventual success, failure or uncertainty."},"slug":"libtmux_eio-operation"},{"id":"Libtmux_eio.Operation.await_stage","publicId":"Libtmux_eio.Operation.await_stage","qualifiedName":"Libtmux_eio.Operation.await_stage","name":"await_stage","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":86,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Wait for the named stage or a terminal state. Acknowledgement does not\n establish completion. Cancelling this observer leaves the operation alone.\n "],"declarations":[{"kind":"function","text":"val await_stage :\n 'a t -> [ `Written | `Acknowledged ] -> ('a state, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":86,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation","doc":{"summary":"Wait for the named stage or a terminal state. Acknowledgement does not establish completion. Cancelling this observer leaves the operation alone."},"signatures":[{"raw":"val await_stage :\n 'a t -> [ `Acknowledged | `Written ] -> ('a state, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a t"},{"name":"arg2","type":"[ `Acknowledged | `Written ]"}],"returns":"('a state, Libtmux.Error.t) result"}],"slug":"libtmux_eio-operation-await_stage"},{"id":"Libtmux_eio.Operation.cancel","publicId":"Libtmux_eio.Operation.cancel","qualifiedName":"Libtmux_eio.Operation.cancel","name":"cancel","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":82,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove unsent work. A written request remains owned and drained by the\n client. "],"declarations":[{"kind":"function","text":"val cancel : 'a t -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":82,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation","doc":{"summary":"Remove unsent work. A written request remains owned and drained by the client."},"signatures":[{"raw":"val cancel : 'a t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-operation-cancel"},{"id":"Libtmux_eio.Operation.cleanup_receipt","publicId":"Libtmux_eio.Operation.cleanup_receipt","qualifiedName":"Libtmux_eio.Operation.cleanup_receipt","name":"cleanup_receipt","kind":"struct","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":58,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" [created] retains IDs reported before a later hook or completion failure.\n It does not prove those resources still exist or authorize retry. When the\n daemon watcher retires an in-flight operation, [cause] retains\n {!Libtmux.Error.Disconnected}. Idle-reader failures also retain their\n library cause instead of becoming an explicit client-close reason. "],"declarations":[{"kind":"struct","text":"type cleanup_receipt = {\n cause : Libtmux.Error.t;\n owned_buffers : string list;\n created : Libtmux.Created.t list;\n }","source":{"file":"eio/libtmux_eio.mli","line":58,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation","doc":{"summary":"`created` retains IDs reported before a later hook or completion failure. It does not prove those resources still exist or authorize retry. When the daemon watcher retires an in-flight operation, `cause` retains {!Libtmux.Error.Disconnected}. Idle-reader failures also retain their library cause instead of becoming an explicit client-close reason."},"signatures":[{"raw":"type cleanup_receipt =\n {\n cause: Libtmux.Error.t ;\n owned_buffers: string list ;\n created: Libtmux.Created.t list }","params":[]}],"slug":"libtmux_eio-operation-cleanup_receipt"},{"id":"Libtmux_eio.Operation.cleanup_receipt.cause","publicId":"Libtmux_eio.Operation.cleanup_receipt.cause","name":"cause","kind":"attribute","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":59,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cause : Libtmux.Error.t;","source":{"file":"eio/libtmux_eio.mli","line":59,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation.cleanup_receipt","type":"Libtmux.Error.t","qualifiedName":"Libtmux_eio.Operation.cause","slug":"libtmux_eio-operation-cleanup_receipt-cause"},{"id":"Libtmux_eio.Operation.cleanup_receipt.created","publicId":"Libtmux_eio.Operation.cleanup_receipt.created","name":"created","kind":"attribute","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":61,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"created : Libtmux.Created.t list;","source":{"file":"eio/libtmux_eio.mli","line":61,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation.cleanup_receipt","type":"Libtmux.Created.t list","qualifiedName":"Libtmux_eio.Operation.created","slug":"libtmux_eio-operation-cleanup_receipt-created"},{"id":"Libtmux_eio.Operation.cleanup_receipt.owned_buffers","publicId":"Libtmux_eio.Operation.cleanup_receipt.owned_buffers","name":"owned_buffers","kind":"attribute","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":60,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"owned_buffers : string list;","source":{"file":"eio/libtmux_eio.mli","line":60,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation.cleanup_receipt","type":"string list","qualifiedName":"Libtmux_eio.Operation.owned_buffers","slug":"libtmux_eio-operation-cleanup_receipt-owned_buffers"},{"id":"Libtmux_eio.Operation.id","publicId":"Libtmux_eio.Operation.id","qualifiedName":"Libtmux_eio.Operation.id","name":"id","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":77,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : 'a t -> string","source":{"file":"eio/libtmux_eio.mli","line":77,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation","signatures":[{"raw":"val id : 'a t -> string","params":[{"name":"arg1","type":"'a t"}],"returns":"string"}],"slug":"libtmux_eio-operation-id"},{"id":"Libtmux_eio.Operation.inspect","publicId":"Libtmux_eio.Operation.inspect","qualifiedName":"Libtmux_eio.Operation.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":79,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read without I/O, including after client closure. Owning domain only. "],"declarations":[{"kind":"function","text":"val inspect : 'a t -> ('a state, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":79,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation","doc":{"summary":"Read without I/O, including after client closure. Owning domain only."},"signatures":[{"raw":"val inspect : 'a t -> ('a state, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a t"}],"returns":"('a state, Libtmux.Error.t) result"}],"slug":"libtmux_eio-operation-inspect"},{"id":"Libtmux_eio.Operation.state","publicId":"Libtmux_eio.Operation.state","qualifiedName":"Libtmux_eio.Operation.state","name":"state","kind":"enum","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":69,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type 'a state =\n | Queued\n | Not_started\n | Written\n | Acknowledged\n | Finished of ('a, Libtmux.Error.t) result\n | Outcome_unknown of cleanup_receipt","source":{"file":"eio/libtmux_eio.mli","line":69,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation","signatures":[{"raw":"type 'a state =\n | Queued \n | Not_started \n | Written \n | Acknowledged \n | Finished of ('a, Libtmux.Error.t) result \n | Outcome_unknown of cleanup_receipt ","params":[]}],"slug":"libtmux_eio-operation-state"},{"id":"Libtmux_eio.Operation.state.Acknowledged","publicId":"Libtmux_eio.Operation.state.Acknowledged","name":"Acknowledged","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Acknowledged","source":{"file":"eio/libtmux_eio.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation.state","variant":"unit","qualifiedName":"Libtmux_eio.Operation.Acknowledged","slug":"libtmux_eio-operation-state-acknowledged"},{"id":"Libtmux_eio.Operation.state.Finished","publicId":"Libtmux_eio.Operation.state.Finished","name":"Finished","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":74,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Finished of ('a, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":74,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation.state","variant":"tuple","qualifiedName":"Libtmux_eio.Operation.Finished","slug":"libtmux_eio-operation-state-finished"},{"id":"Libtmux_eio.Operation.state.Not_started","publicId":"Libtmux_eio.Operation.state.Not_started","name":"Not_started","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":71,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Not_started","source":{"file":"eio/libtmux_eio.mli","line":71,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation.state","variant":"unit","qualifiedName":"Libtmux_eio.Operation.Not_started","slug":"libtmux_eio-operation-state-not_started"},{"id":"Libtmux_eio.Operation.state.Outcome_unknown","publicId":"Libtmux_eio.Operation.state.Outcome_unknown","name":"Outcome_unknown","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":75,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Outcome_unknown of cleanup_receipt","source":{"file":"eio/libtmux_eio.mli","line":75,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation.state","variant":"tuple","qualifiedName":"Libtmux_eio.Operation.Outcome_unknown","slug":"libtmux_eio-operation-state-outcome_unknown"},{"id":"Libtmux_eio.Operation.state.Queued","publicId":"Libtmux_eio.Operation.state.Queued","name":"Queued","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":70,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Queued","source":{"file":"eio/libtmux_eio.mli","line":70,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation.state","variant":"unit","qualifiedName":"Libtmux_eio.Operation.Queued","slug":"libtmux_eio-operation-state-queued"},{"id":"Libtmux_eio.Operation.state.Written","publicId":"Libtmux_eio.Operation.state.Written","name":"Written","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":72,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Written","source":{"file":"eio/libtmux_eio.mli","line":72,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation.state","variant":"unit","qualifiedName":"Libtmux_eio.Operation.Written","slug":"libtmux_eio-operation-state-written"},{"id":"Libtmux_eio.Operation.t","publicId":"Libtmux_eio.Operation.t","qualifiedName":"Libtmux_eio.Operation.t","name":"t","kind":"typealias","package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":56,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type 'a t","source":{"file":"eio/libtmux_eio.mli","line":56,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Operation","signatures":[{"raw":"type 'a t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_eio-operation-t"},{"id":"Libtmux_eio.Rendered","publicId":"Libtmux_eio.Rendered","qualifiedName":"Libtmux_eio.Rendered","name":"Rendered","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":19,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Rendered = Libtmux.Captured_text","source":{"file":"eio/libtmux_eio.mli","line":19,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio","exportedFrom":"Libtmux.Captured_text","slug":"libtmux_eio-rendered"},{"id":"Libtmux_eio.Subscription","publicId":"Libtmux_eio.Subscription","qualifiedName":"Libtmux_eio.Subscription","name":"Subscription","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":95,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Bounded future-byte observation with Data/Gap/End and local cursors. Polling\n is local; waiting and admission belong to the backend. "],"declarations":[{"kind":"module","text":"module Subscription : sig\n type t\n\n val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result\n (** Remove a queued event without I/O, on the owning domain. *)\n\n val next :\n ?timeout:float -> t -> (Libtmux.Output.event option, Libtmux.Error.t) result\n (** Await one event, defaulting to a one-second deadline. [None] follows a\n consumed End. A deadline keeps the subscription active. Eio cancellation\n closes it, releases its lane when unused, and propagates. *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** End an active subscription with Cancelled and discard pending data.\n Preserve an already ended subscription's terminal reason. Concurrent calls\n join the same cleanup, including reaping a lane when it becomes unused;\n later calls retain cleanup failures. Borrowed clients and the daemon\n remain alive. {!poll} can still read the terminal event. *)\n\n val wait_for_bytes :\n ?timeout:float ->\n t ->\n text:string ->\n (Libtmux.Output.cursor, Libtmux.Output.wait_error) result\n (** Consume future observed bytes through a match, with a maximum 64 KiB\n nonempty pattern. Match across Data boundaries and return its end cursor.\n Gaps end matching. This searches neither rendered text nor history. A\n deadline leaves the subscription active; cancellation closes it. *)\nend","source":{"file":"eio/libtmux_eio.mli","line":95,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio","doc":{"summary":"Bounded future-byte observation with Data/Gap/End and local cursors. Polling is local; waiting and admission belong to the backend."},"slug":"libtmux_eio-subscription"},{"id":"Libtmux_eio.Subscription.close","publicId":"Libtmux_eio.Subscription.close","qualifiedName":"Libtmux_eio.Subscription.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":107,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" End an active subscription with Cancelled and discard pending data.\n Preserve an already ended subscription's terminal reason. Concurrent calls\n join the same cleanup, including reaping a lane when it becomes unused;\n later calls retain cleanup failures. Borrowed clients and the daemon\n remain alive. {!poll} can still read the terminal event. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":107,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Subscription","doc":{"summary":"End an active subscription with Cancelled and discard pending data. Preserve an already ended subscription's terminal reason. Concurrent calls join the same cleanup, including reaping a lane when it becomes unused; later calls retain cleanup failures. Borrowed clients and the daemon remain alive. {!poll} can still read the terminal event."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-subscription-close"},{"id":"Libtmux_eio.Subscription.next","publicId":"Libtmux_eio.Subscription.next","qualifiedName":"Libtmux_eio.Subscription.next","name":"next","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":101,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Await one event, defaulting to a one-second deadline. [None] follows a\n consumed End. A deadline keeps the subscription active. Eio cancellation\n closes it, releases its lane when unused, and propagates. "],"declarations":[{"kind":"function","text":"val next :\n ?timeout:float -> t -> (Libtmux.Output.event option, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":101,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Subscription","doc":{"summary":"Await one event, defaulting to a one-second deadline. `None` follows a consumed End. A deadline keeps the subscription active. Eio cancellation closes it, releases its lane when unused, and propagates."},"signatures":[{"raw":"val next :\n ?timeout:float ->\n t -> (Libtmux.Output.event option, Libtmux.Error.t) result","params":[{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"(Libtmux.Output.event option, Libtmux.Error.t) result"}],"slug":"libtmux_eio-subscription-next"},{"id":"Libtmux_eio.Subscription.poll","publicId":"Libtmux_eio.Subscription.poll","qualifiedName":"Libtmux_eio.Subscription.poll","name":"poll","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":98,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove a queued event without I/O, on the owning domain. "],"declarations":[{"kind":"function","text":"val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":98,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Subscription","doc":{"summary":"Remove a queued event without I/O, on the owning domain."},"signatures":[{"raw":"val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(Libtmux.Output.event option, Libtmux.Error.t) result"}],"slug":"libtmux_eio-subscription-poll"},{"id":"Libtmux_eio.Subscription.t","publicId":"Libtmux_eio.Subscription.t","qualifiedName":"Libtmux_eio.Subscription.t","name":"t","kind":"typealias","package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":96,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"eio/libtmux_eio.mli","line":96,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Subscription","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_eio-subscription-t"},{"id":"Libtmux_eio.Subscription.wait_for_bytes","publicId":"Libtmux_eio.Subscription.wait_for_bytes","qualifiedName":"Libtmux_eio.Subscription.wait_for_bytes","name":"wait_for_bytes","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":114,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Consume future observed bytes through a match, with a maximum 64 KiB\n nonempty pattern. Match across Data boundaries and return its end cursor.\n Gaps end matching. This searches neither rendered text nor history. A\n deadline leaves the subscription active; cancellation closes it. "],"declarations":[{"kind":"function","text":"val wait_for_bytes :\n ?timeout:float ->\n t ->\n text:string ->\n (Libtmux.Output.cursor, Libtmux.Output.wait_error) result","source":{"file":"eio/libtmux_eio.mli","line":114,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Subscription","doc":{"summary":"Consume future observed bytes through a match, with a maximum 64 KiB nonempty pattern. Match across Data boundaries and return its end cursor. Gaps end matching. This searches neither rendered text nor history. A deadline leaves the subscription active; cancellation closes it.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet watch_output binary blocking (initial : Created.t) _spawn =\n Eio_main.run @@ fun env ->\n Eio.Switch.run @@ fun sw ->\n let module Client = Libtmux_eio.Client in\n let module Subscription = Libtmux_eio.Subscription in\n let client =\n get\n (Client.connect ~sw ~binary\n ~process_mgr:(Eio.Stdenv.process_mgr env)\n ~mono_clock:(Eio.Stdenv.mono_clock env)\n (Source.endpoint (Libtmux_unix.Client.source blocking)))\n in\n Fun.protect\n ~finally:(fun () ->\n Eio.Cancel.protect (fun () -> get (Client.close client)))\n (fun () ->\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n let subscription =\n get (Client.subscribe ~capacity_bytes:4096 client pane)\n in\n Fun.protect\n ~finally:(fun () ->\n Eio.Cancel.protect (fun () -> get (Subscription.close subscription)))\n (fun () ->\n let cursor, () =\n Eio.Fiber.pair\n (fun () ->\n match\n Subscription.wait_for_bytes ~timeout:0.5 subscription\n ~text:\"changed\"\n with\n | Ok cursor -> cursor\n | Error (Output.Failure error) ->\n failwith (Format.asprintf \"%a\" Error.pp error)\n | Error (Output.Ended reason) ->\n failwith (Format.asprintf \"%a\" Output.reason_pp reason))\n (fun () ->\n get (Client.send_text client (Pane.target pane) ~text:\"changed\");\n get (Client.send_keys client (Pane.target pane) [ Key.Enter ]))\n in\n assert (cursor.offset >= 7L);\n print_endline \"observed: changed\"))\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary (watch_output binary)\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_watch.ml","intro":"Observe future output with Eio. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_watch.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"observed: changed\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val wait_for_bytes :\n ?timeout:float ->\n t ->\n text:string -> (Libtmux.Output.cursor, Libtmux.Output.wait_error) result","params":[{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(Libtmux.Output.cursor, Libtmux.Output.wait_error) result"}],"slug":"libtmux_eio-subscription-wait_for_bytes"},{"id":"Libtmux_eio.Terminal","publicId":"Libtmux_eio.Terminal","qualifiedName":"Libtmux_eio.Terminal","name":"Terminal","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":24,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Interactive attachment using borrowed application streams. This utility\n addresses the current daemon explicitly and does not reuse captured targets.\n"],"declarations":[{"kind":"module","text":"module Terminal : sig\n val attach_current :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:_ Eio.Flow.source ->\n ?stdout:_ Eio.Flow.sink ->\n ?stderr:_ Eio.Flow.sink ->\n process_mgr:_ Eio.Process.mgr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t ->\n (unit, Libtmux.Error.t) result\n (** Run an interactive terminal client until exit, using the application's\n process manager and standard streams unless explicit flows are supplied.\n [stdin] must be backed by a terminal descriptor; a pipe-backed flow is\n rejected by tmux. Select the exact ID on the daemon currently listening at\n [endpoint], without a captured target, binding, retry or daemon startup.\n\n Environment updates and read-only mode default to false. Clear inherited\n [TMUX] and [TMUX_PANE]. Cancellation propagates after terminating and\n reaping this client; it does not stop the daemon. Cooperative TERM gets\n 200 ms of grace before forced termination, while other fibers can run.\n Scheduling and kernel completion can add time. Success proves terminal\n client exit. Diagnostics go to [stderr]; borrowed flows stay open. Supply\n [cleanup] before the call to retain secondary failures after cancellation.\n *)\nend","source":{"file":"eio/libtmux_eio.mli","line":24,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio","doc":{"summary":"Interactive attachment using borrowed application streams. This utility addresses the current daemon explicitly and does not reuse captured targets."},"slug":"libtmux_eio-terminal"},{"id":"Libtmux_eio.Terminal.attach_current","publicId":"Libtmux_eio.Terminal.attach_current","qualifiedName":"Libtmux_eio.Terminal.attach_current","name":"attach_current","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":25,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Run an interactive terminal client until exit, using the application's\n process manager and standard streams unless explicit flows are supplied.\n [stdin] must be backed by a terminal descriptor; a pipe-backed flow is\n rejected by tmux. Select the exact ID on the daemon currently listening at\n [endpoint], without a captured target, binding, retry or daemon startup.\n\n Environment updates and read-only mode default to false. Clear inherited\n [TMUX] and [TMUX_PANE]. Cancellation propagates after terminating and\n reaping this client; it does not stop the daemon. Cooperative TERM gets\n 200 ms of grace before forced termination, while other fibers can run.\n Scheduling and kernel completion can add time. Success proves terminal\n client exit. Diagnostics go to [stderr]; borrowed flows stay open. Supply\n [cleanup] before the call to retain secondary failures after cancellation.\n "],"declarations":[{"kind":"function","text":"val attach_current :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:_ Eio.Flow.source ->\n ?stdout:_ Eio.Flow.sink ->\n ?stderr:_ Eio.Flow.sink ->\n process_mgr:_ Eio.Process.mgr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":25,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Terminal","doc":{"summary":"Run an interactive terminal client until exit, using the application's process manager and standard streams unless explicit flows are supplied. `stdin` must be backed by a terminal descriptor; a pipe-backed flow is rejected by tmux. Select the exact ID on the daemon currently listening at `endpoint`, without a captured target, binding, retry or daemon startup.","body":"Environment updates and read-only mode default to false. Clear inherited `TMUX` and `TMUX_PANE`. Cancellation propagates after terminating and reaping this client; it does not stop the daemon. Cooperative TERM gets 200 ms of grace before forced termination, while other fibers can run. Scheduling and kernel completion can add time. Success proves terminal client exit. Diagnostics go to `stderr`; borrowed flows stay open. Supply `cleanup` before the call to retain secondary failures after cancellation."},"signatures":[{"raw":"val attach_current :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:[> Eio.Flow.source_ty ] Eio.Flow.source ->\n ?stdout:[> Eio.Flow.sink_ty ] Eio.Flow.sink ->\n ?stderr:[> Eio.Flow.sink_ty ] Eio.Flow.sink ->\n process_mgr:[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"read_only","type":"bool","optional":true,"keywordOnly":true},{"name":"update_environment","type":"bool","optional":true,"keywordOnly":true},{"name":"stdin","type":"[> Eio.Flow.source_ty ] Eio.Flow.source","optional":true,"keywordOnly":true},{"name":"stdout","type":"[> Eio.Flow.sink_ty ] Eio.Flow.sink","optional":true,"keywordOnly":true},{"name":"stderr","type":"[> Eio.Flow.sink_ty ] Eio.Flow.sink","optional":true,"keywordOnly":true},{"name":"process_mgr","type":"[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr","keywordOnly":true},{"name":"arg1","type":"Libtmux.Endpoint.t"},{"name":"session","type":"Libtmux.Session.Id.t","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-terminal-attach_current"},{"id":"Libtmux_eio.Workspace","publicId":"Libtmux_eio.Workspace","qualifiedName":"Libtmux_eio.Workspace","name":"Workspace","kind":"module","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":605,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Apply workspace plans through Eio while retaining journals across caller\n cancellation. Handles belong to the creating domain; the application owns\n the scheduler and switch. "],"declarations":[{"kind":"module","text":"module Workspace : sig\n type t\n\n val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result\n (** Allocate a generation-bound handle without I/O. The supplied client is\n borrowed; closing the handle leaves it open. *)\n\n val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:_ Eio.Process.mgr ->\n mono_clock:_ Eio.Time.Mono.t ->\n Libtmux_workspace.Plan.t ->\n (t, Libtmux.Error.t) result\n (** Allocate a missing-endpoint execution without I/O. Await starts control\n new-session and binds that same connection. The handle owns its new client\n within [sw]; it never owns the daemon. *)\n\n val await :\n ?compensate_on_failure:bool ->\n t ->\n (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result\n (** Apply steps at most once per execution handle. Expected failures return a\n retained journal. On initial application, [compensate_on_failure] defaults\n to [true], attempting removal of proven newly created panes after failure\n or cancellation. Passing [false] skips that compensation. Eio cancellation\n propagates after progress is recorded and at most 500 ms of protected\n compensation. Admitted commands can still complete under client ownership;\n use {!inspect} before manual recovery. *)\n\n val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result\n (** Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O,\n on the owning domain, including after execution or client closure. Pending\n steps can settle as the client progresses; earlier receipts keep their own\n step and cleanup arrays. *)\n\n val client : t -> Client.t option\n (** Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent\n actions or recovery. {!close} releases a client owned by this workspace\n execution handle. *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** Release an owned client through {!Client.close}. Active await returns\n Busy. Closing is idempotent; completed journals remain readable. *)\nend","source":{"file":"eio/libtmux_eio.mli","line":605,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio","doc":{"summary":"Apply workspace plans through Eio while retaining journals across caller cancellation. Handles belong to the creating domain; the application owns the scheduler and switch."},"slug":"libtmux_eio-workspace"},{"id":"Libtmux_eio.Workspace.await","publicId":"Libtmux_eio.Workspace.await","qualifiedName":"Libtmux_eio.Workspace.await","name":"await","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":626,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Apply steps at most once per execution handle. Expected failures return a\n retained journal. On initial application, [compensate_on_failure] defaults\n to [true], attempting removal of proven newly created panes after failure\n or cancellation. Passing [false] skips that compensation. Eio cancellation\n propagates after progress is recorded and at most 500 ms of protected\n compensation. Admitted commands can still complete under client ownership;\n use {!inspect} before manual recovery. "],"declarations":[{"kind":"function","text":"val await :\n ?compensate_on_failure:bool ->\n t ->\n (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":626,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Apply steps at most once per execution handle. Expected failures return a retained journal. On initial application, `compensate_on_failure` defaults to `true`, attempting removal of proven newly created panes after failure or cancellation. Passing `false` skips that compensation. Eio cancellation propagates after progress is recorded and at most 500 ms of protected compensation. Admitted commands can still complete under client ownership; use {!inspect} before manual recovery."},"signatures":[{"raw":"val await :\n ?compensate_on_failure:bool ->\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","params":[{"name":"compensate_on_failure","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"(Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result"}],"slug":"libtmux_eio-workspace-await"},{"id":"Libtmux_eio.Workspace.client","publicId":"Libtmux_eio.Workspace.client","qualifiedName":"Libtmux_eio.Workspace.client","name":"client","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":645,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent\n actions or recovery. {!close} releases a client owned by this workspace\n execution handle. "],"declarations":[{"kind":"function","text":"val client : t -> Client.t option","source":{"file":"eio/libtmux_eio.mli","line":645,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent actions or recovery. {!close} releases a client owned by this workspace execution handle."},"signatures":[{"raw":"val client : t -> Client.t option","params":[{"name":"arg1","type":"t"}],"returns":"Client.t option"}],"slug":"libtmux_eio-workspace-client"},{"id":"Libtmux_eio.Workspace.close","publicId":"Libtmux_eio.Workspace.close","qualifiedName":"Libtmux_eio.Workspace.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":650,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Release an owned client through {!Client.close}. Active await returns\n Busy. Closing is idempotent; completed journals remain readable. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":650,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Release an owned client through {!Client.close}. Active await returns Busy. Closing is idempotent; completed journals remain readable."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-workspace-close"},{"id":"Libtmux_eio.Workspace.inspect","publicId":"Libtmux_eio.Workspace.inspect","qualifiedName":"Libtmux_eio.Workspace.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":638,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O,\n on the owning domain, including after execution or client closure. Pending\n steps can settle as the client progresses; earlier receipts keep their own\n step and cleanup arrays. "],"declarations":[{"kind":"function","text":"val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":638,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O, on the owning domain, including after execution or client closure. Pending steps can settle as the client progresses; earlier receipts keep their own step and cleanup arrays."},"signatures":[{"raw":"val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result"}],"slug":"libtmux_eio-workspace-inspect"},{"id":"Libtmux_eio.Workspace.submit","publicId":"Libtmux_eio.Workspace.submit","qualifiedName":"Libtmux_eio.Workspace.submit","name":"submit","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":608,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Allocate a generation-bound handle without I/O. The supplied client is\n borrowed; closing the handle leaves it open. "],"declarations":[{"kind":"function","text":"val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":608,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Allocate a generation-bound handle without I/O. The supplied client is borrowed; closing the handle leaves it open."},"signatures":[{"raw":"val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"Client.t"},{"name":"arg2","type":"Libtmux_workspace.Plan.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-workspace-submit"},{"id":"Libtmux_eio.Workspace.submit_bootstrap","publicId":"Libtmux_eio.Workspace.submit_bootstrap","qualifiedName":"Libtmux_eio.Workspace.submit_bootstrap","name":"submit_bootstrap","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":613,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Allocate a missing-endpoint execution without I/O. Await starts control\n new-session and binds that same connection. The handle owns its new client\n within [sw]; it never owns the daemon. "],"declarations":[{"kind":"function","text":"val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:_ Eio.Process.mgr ->\n mono_clock:_ Eio.Time.Mono.t ->\n Libtmux_workspace.Plan.t ->\n (t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":613,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Allocate a missing-endpoint execution without I/O. Await starts control new-session and binds that same connection. The handle owns its new client within `sw`; it never owns the daemon."},"signatures":[{"raw":"val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr ->\n mono_clock:[> Eio.Time.Mono.ty ] Eio.Time.Mono.t ->\n Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","params":[{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"sw","type":"Eio.Switch.t","keywordOnly":true},{"name":"process_mgr","type":"[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr","keywordOnly":true},{"name":"mono_clock","type":"[> Eio.Time.Mono.ty ] Eio.Time.Mono.t","keywordOnly":true},{"name":"arg1","type":"Libtmux_workspace.Plan.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-workspace-submit_bootstrap"},{"id":"Libtmux_eio.Workspace.t","publicId":"Libtmux_eio.Workspace.t","qualifiedName":"Libtmux_eio.Workspace.t","name":"t","kind":"typealias","package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":606,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"eio/libtmux_eio.mli","line":606,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_eio.Workspace","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_eio-workspace-t"},{"id":"Libtmux_json","publicId":"Libtmux_json","qualifiedName":"Libtmux_json","name":"Libtmux_json","kind":"module","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":1,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Pure, bounded query and workspace JSON interchange.\n\n {!Expr} validates portable queries and {!Workspace} decodes configurations\n and encodes plans and receipts. Both return {!Decode_error.t} on invalid\n data. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/queries.md}query\n guide} and\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/workspaces.md}workspace\n guide} for complete programs. "],"declarations":[{"kind":"module","text":"","source":{"file":"json/libtmux_json.mli","line":1,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"doc":{"summary":"Pure, bounded query and workspace JSON interchange.","body":"{!Expr} validates portable queries and {!Workspace} decodes configurations and encodes plans and receipts. Both return {!Decode_error.t} on invalid data. See the [query guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/queries.md) and [workspace guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/workspaces.md) for complete programs."},"slug":"libtmux_json"},{"id":"Libtmux_json.Decode_error","publicId":"Libtmux_json.Decode_error","qualifiedName":"Libtmux_json.Decode_error","name":"Decode_error","kind":"module","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":11,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Decode_error : sig\n type category =\n | Syntax\n | Limit\n | Unknown\n | Wrong_type\n | Out_of_range\n | Unsupported\n\n type t = { pointer : string; category : category; message : string }\n\n val pp : Format.formatter -> t -> unit\nend","source":{"file":"json/libtmux_json.mli","line":11,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json","slug":"libtmux_json-decode_error"},{"id":"Libtmux_json.Decode_error.category","publicId":"Libtmux_json.Decode_error.category","qualifiedName":"Libtmux_json.Decode_error.category","name":"category","kind":"enum","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":12,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type category =\n | Syntax\n | Limit\n | Unknown\n | Wrong_type\n | Out_of_range\n | Unsupported","source":{"file":"json/libtmux_json.mli","line":12,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error","signatures":[{"raw":"type category =\n | Syntax \n | Limit \n | Unknown \n | Wrong_type \n | Out_of_range \n | Unsupported ","params":[]}],"slug":"libtmux_json-decode_error-category"},{"id":"Libtmux_json.Decode_error.category.Limit","publicId":"Libtmux_json.Decode_error.category.Limit","name":"Limit","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":14,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Limit","source":{"file":"json/libtmux_json.mli","line":14,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Limit","slug":"libtmux_json-decode_error-category-limit"},{"id":"Libtmux_json.Decode_error.category.Out_of_range","publicId":"Libtmux_json.Decode_error.category.Out_of_range","name":"Out_of_range","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":17,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Out_of_range","source":{"file":"json/libtmux_json.mli","line":17,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Out_of_range","slug":"libtmux_json-decode_error-category-out_of_range"},{"id":"Libtmux_json.Decode_error.category.Syntax","publicId":"Libtmux_json.Decode_error.category.Syntax","name":"Syntax","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":13,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Syntax","source":{"file":"json/libtmux_json.mli","line":13,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Syntax","slug":"libtmux_json-decode_error-category-syntax"},{"id":"Libtmux_json.Decode_error.category.Unknown","publicId":"Libtmux_json.Decode_error.category.Unknown","name":"Unknown","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":15,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unknown","source":{"file":"json/libtmux_json.mli","line":15,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Unknown","slug":"libtmux_json-decode_error-category-unknown"},{"id":"Libtmux_json.Decode_error.category.Unsupported","publicId":"Libtmux_json.Decode_error.category.Unsupported","name":"Unsupported","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":18,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported","source":{"file":"json/libtmux_json.mli","line":18,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Unsupported","slug":"libtmux_json-decode_error-category-unsupported"},{"id":"Libtmux_json.Decode_error.category.Wrong_type","publicId":"Libtmux_json.Decode_error.category.Wrong_type","name":"Wrong_type","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":16,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Wrong_type","source":{"file":"json/libtmux_json.mli","line":16,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Wrong_type","slug":"libtmux_json-decode_error-category-wrong_type"},{"id":"Libtmux_json.Decode_error.pp","publicId":"Libtmux_json.Decode_error.pp","qualifiedName":"Libtmux_json.Decode_error.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":22,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"json/libtmux_json.mli","line":22,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux_json-decode_error-pp"},{"id":"Libtmux_json.Decode_error.t","publicId":"Libtmux_json.Decode_error.t","qualifiedName":"Libtmux_json.Decode_error.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":20,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type t = { pointer : string; category : category; message : string }","source":{"file":"json/libtmux_json.mli","line":20,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error","signatures":[{"raw":"type t = {\n pointer: string ;\n category: category ;\n message: string }","params":[]}],"slug":"libtmux_json-decode_error-t"},{"id":"Libtmux_json.Decode_error.t.category","publicId":"Libtmux_json.Decode_error.t.category","name":"category","kind":"attribute","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":20,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"category : category;","source":{"file":"json/libtmux_json.mli","line":20,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error.t","type":"category","qualifiedName":"Libtmux_json.Decode_error.category","slug":"libtmux_json-decode_error-t-category"},{"id":"Libtmux_json.Decode_error.t.message","publicId":"Libtmux_json.Decode_error.t.message","name":"message","kind":"attribute","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":20,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"message : string","source":{"file":"json/libtmux_json.mli","line":20,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error.t","type":"string","qualifiedName":"Libtmux_json.Decode_error.message","slug":"libtmux_json-decode_error-t-message"},{"id":"Libtmux_json.Decode_error.t.pointer","publicId":"Libtmux_json.Decode_error.t.pointer","name":"pointer","kind":"attribute","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":20,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pointer : string;","source":{"file":"json/libtmux_json.mli","line":20,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Decode_error.t","type":"string","qualifiedName":"Libtmux_json.Decode_error.pointer","slug":"libtmux_json-decode_error-t-pointer"},{"id":"Libtmux_json.Error","publicId":"Libtmux_json.Error","qualifiedName":"Libtmux_json.Error","name":"Error","kind":"module","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":26,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Structured native failures for JSON consumers. "],"declarations":[{"kind":"module","text":"module Error : sig\n val encode : Libtmux.Error.t -> Yojson.Safe.t\n (** Return a stable [code], bounded [message], [message_truncated] flag and\n relevant operation, resource or target metadata. Messages and text\n attributes retain at most 4096 bytes; invalid UTF-8 uses the tagged hex\n representation described by {!Workspace.encode_receipt}. No I/O. *)\nend","source":{"file":"json/libtmux_json.mli","line":26,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json","doc":{"summary":"Structured native failures for JSON consumers."},"slug":"libtmux_json-error"},{"id":"Libtmux_json.Error.encode","publicId":"Libtmux_json.Error.encode","qualifiedName":"Libtmux_json.Error.encode","name":"encode","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":27,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Return a stable [code], bounded [message], [message_truncated] flag and\n relevant operation, resource or target metadata. Messages and text\n attributes retain at most 4096 bytes; invalid UTF-8 uses the tagged hex\n representation described by {!Workspace.encode_receipt}. No I/O. "],"declarations":[{"kind":"function","text":"val encode : Libtmux.Error.t -> Yojson.Safe.t","source":{"file":"json/libtmux_json.mli","line":27,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Error","doc":{"summary":"Return a stable `code`, bounded `message`, `message_truncated` flag and relevant operation, resource or target metadata. Messages and text attributes retain at most 4096 bytes; invalid UTF-8 uses the tagged hex representation described by {!Workspace.encode_receipt}. No I/O."},"signatures":[{"raw":"val encode : Libtmux.Error.t -> Yojson.Safe.t","params":[{"name":"arg1","type":"Libtmux.Error.t"}],"returns":"Yojson.Safe.t"}],"slug":"libtmux_json-error-encode"},{"id":"Libtmux_json.Expr","publicId":"Libtmux_json.Expr","qualifiedName":"Libtmux_json.Expr","name":"Expr","kind":"module","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Portable scalar pane expressions. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/query-interchange.md}wire\n subset} for canonical fields, operators and bounds. "],"declarations":[{"kind":"module","text":"module Expr : sig\n val decode :\n 'a Libtmux.Model.t ->\n Yojson.Safe.t ->\n ('a Libtmux.Expr.t, Decode_error.t) result\n (** Validate the supplied tree, including duplicate properties, before typed\n construction. Only the shared scalar pane registry and Boolean composition\n are accepted. Java regex, relationships and native extension fields return\n [Unsupported]. Numbers must fit signed 32-bit integers. *)\n\n val of_string :\n 'a Libtmux.Model.t -> string -> ('a Libtmux.Expr.t, Decode_error.t) result\n (** Enforce 64 KiB and 32 JSON nesting levels before parsing; require valid\n UTF-8 JSON. Expressions have at most 1,024 nodes and membership lists at\n most 256 values. Errors include a JSON pointer, never the whole input. *)\n\n val encode :\n 'a Libtmux.Model.t ->\n 'a Libtmux.Expr.t ->\n (Yojson.Safe.t, Decode_error.t) result\n\n val to_string :\n 'a Libtmux.Model.t -> 'a Libtmux.Expr.t -> (string, Decode_error.t) result\n (** Apply the same bounds and subset when encoding. Text with invalid UTF-8\n has no representation in this schema. These functions perform no I/O. *)\nend","source":{"file":"json/libtmux_json.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json","doc":{"summary":"Portable scalar pane expressions. See the [wire subset](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/query-interchange.md) for canonical fields, operators and bounds."},"slug":"libtmux_json-expr"},{"id":"Libtmux_json.Expr.decode","publicId":"Libtmux_json.Expr.decode","qualifiedName":"Libtmux_json.Expr.decode","name":"decode","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":74,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Validate the supplied tree, including duplicate properties, before typed\n construction. Only the shared scalar pane registry and Boolean composition\n are accepted. Java regex, relationships and native extension fields return\n [Unsupported]. Numbers must fit signed 32-bit integers. "],"declarations":[{"kind":"function","text":"val decode :\n 'a Libtmux.Model.t ->\n Yojson.Safe.t ->\n ('a Libtmux.Expr.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":74,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Expr","doc":{"summary":"Validate the supplied tree, including duplicate properties, before typed construction. Only the shared scalar pane registry and Boolean composition are accepted. Java regex, relationships and native extension fields return `Unsupported`. Numbers must fit signed 32-bit integers."},"signatures":[{"raw":"val decode :\n 'a Libtmux.Model.t ->\n Yojson.Safe.t -> ('a Libtmux.Expr.t, Decode_error.t) result","params":[{"name":"arg1","type":"'a Libtmux.Model.t"},{"name":"arg2","type":"Yojson.Safe.t"}],"returns":"('a Libtmux.Expr.t, Decode_error.t) result"}],"slug":"libtmux_json-expr-decode"},{"id":"Libtmux_json.Expr.encode","publicId":"Libtmux_json.Expr.encode","qualifiedName":"Libtmux_json.Expr.encode","name":"encode","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":89,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val encode :\n 'a Libtmux.Model.t ->\n 'a Libtmux.Expr.t ->\n (Yojson.Safe.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":89,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Expr","signatures":[{"raw":"val encode :\n 'a Libtmux.Model.t ->\n 'a Libtmux.Expr.t -> (Yojson.Safe.t, Decode_error.t) result","params":[{"name":"arg1","type":"'a Libtmux.Model.t"},{"name":"arg2","type":"'a Libtmux.Expr.t"}],"returns":"(Yojson.Safe.t, Decode_error.t) result"}],"slug":"libtmux_json-expr-encode"},{"id":"Libtmux_json.Expr.of_string","publicId":"Libtmux_json.Expr.of_string","qualifiedName":"Libtmux_json.Expr.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":83,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Enforce 64 KiB and 32 JSON nesting levels before parsing; require valid\n UTF-8 JSON. Expressions have at most 1,024 nodes and membership lists at\n most 256 values. Errors include a JSON pointer, never the whole input. "],"declarations":[{"kind":"function","text":"val of_string :\n 'a Libtmux.Model.t -> string -> ('a Libtmux.Expr.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":83,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Expr","doc":{"summary":"Enforce 64 KiB and 32 JSON nesting levels before parsing; require valid UTF-8 JSON. Expressions have at most 1,024 nodes and membership lists at most 256 values. Errors include a JSON pointer, never the whole input."},"signatures":[{"raw":"val of_string :\n 'a Libtmux.Model.t -> string -> ('a Libtmux.Expr.t, Decode_error.t) result","params":[{"name":"arg1","type":"'a Libtmux.Model.t"},{"name":"arg2","type":"string"}],"returns":"('a Libtmux.Expr.t, Decode_error.t) result"}],"slug":"libtmux_json-expr-of_string"},{"id":"Libtmux_json.Expr.to_string","publicId":"Libtmux_json.Expr.to_string","qualifiedName":"Libtmux_json.Expr.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":94,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Apply the same bounds and subset when encoding. Text with invalid UTF-8\n has no representation in this schema. These functions perform no I/O. "],"declarations":[{"kind":"function","text":"val to_string :\n 'a Libtmux.Model.t -> 'a Libtmux.Expr.t -> (string, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":94,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Expr","doc":{"summary":"Apply the same bounds and subset when encoding. Text with invalid UTF-8 has no representation in this schema. These functions perform no I/O."},"signatures":[{"raw":"val to_string :\n 'a Libtmux.Model.t -> 'a Libtmux.Expr.t -> (string, Decode_error.t) result","params":[{"name":"arg1","type":"'a Libtmux.Model.t"},{"name":"arg2","type":"'a Libtmux.Expr.t"}],"returns":"(string, Decode_error.t) result"}],"slug":"libtmux_json-expr-to_string"},{"id":"Libtmux_json.Workspace","publicId":"Libtmux_json.Workspace","qualifiedName":"Libtmux_json.Workspace","name":"Workspace","kind":"module","modifiers":[],"package":"libtmux-json","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":36,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Validate workspace documents and describe plans and retained execution.\n Preview output never supplies executable targets. "],"declarations":[{"kind":"module","text":"module Workspace : sig\n val decode :\n directory:string ->\n Yojson.Safe.t ->\n (Libtmux_workspace.Config.t, Decode_error.t) result\n\n val of_string :\n directory:string ->\n string ->\n (Libtmux_workspace.Config.t, Decode_error.t) result\n (** Decode [libtmux.workspace/1] with the query codec's 64 KiB, UTF-8 and\n 32-level JSON bounds. Reject duplicate and unknown properties, invalid\n argv/shell combinations and configuration errors. [directory] is the\n absolute document directory; these functions perform no filesystem I/O. *)\n\n val encode_plan :\n Libtmux_workspace.Plan.t -> (Yojson.Safe.t, Decode_error.t) result\n (** Describe [libtmux.workspace-plan/1] without I/O. The advisory preview\n contains command argv, cwd and environment names, excluding environment\n values, option values and startup text. It is not an execution script. *)\n\n val encode_receipt :\n Libtmux_workspace.Execution.receipt ->\n (Yojson.Safe.t, Decode_error.t) result\n (** Describe [libtmux.workspace-receipt/1] with ordered steps, outcome index\n lists, creation IDs, unbound hints and per-pane cleanup. Diagnostic\n messages are limited to 4096 bytes with an explicit truncation flag;\n command payloads are omitted.\n\n Both output schemas have a 4 MiB bound. Invalid UTF-8 values use\n [{\"encoding\":\"hex\",\"bytes\":\"...\"}] instead of losing bytes. Imported IDs\n and hints never establish a connection binding. *)\nend","source":{"file":"json/libtmux_json.mli","line":36,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json","doc":{"summary":"Validate workspace documents and describe plans and retained execution. Preview output never supplies executable targets."},"slug":"libtmux_json-workspace"},{"id":"Libtmux_json.Workspace.decode","publicId":"Libtmux_json.Workspace.decode","qualifiedName":"Libtmux_json.Workspace.decode","name":"decode","kind":"function","modifiers":[],"package":"libtmux-json","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":37,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val decode :\n directory:string ->\n Yojson.Safe.t ->\n (Libtmux_workspace.Config.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":37,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Workspace","signatures":[{"raw":"val decode :\n directory:string ->\n Yojson.Safe.t -> (Libtmux_workspace.Config.t, Decode_error.t) result","params":[{"name":"directory","type":"string","keywordOnly":true},{"name":"arg1","type":"Yojson.Safe.t"}],"returns":"(Libtmux_workspace.Config.t, Decode_error.t) result"}],"slug":"libtmux_json-workspace-decode"},{"id":"Libtmux_json.Workspace.encode_plan","publicId":"Libtmux_json.Workspace.encode_plan","qualifiedName":"Libtmux_json.Workspace.encode_plan","name":"encode_plan","kind":"function","modifiers":[],"package":"libtmux-json","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":51,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Describe [libtmux.workspace-plan/1] without I/O. The advisory preview\n contains command argv, cwd and environment names, excluding environment\n values, option values and startup text. It is not an execution script. "],"declarations":[{"kind":"function","text":"val encode_plan :\n Libtmux_workspace.Plan.t -> (Yojson.Safe.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":51,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Workspace","doc":{"summary":"Describe `libtmux.workspace-plan/1` without I/O. The advisory preview contains command argv, cwd and environment names, excluding environment values, option values and startup text. It is not an execution script."},"signatures":[{"raw":"val encode_plan :\n Libtmux_workspace.Plan.t -> (Yojson.Safe.t, Decode_error.t) result","params":[{"name":"arg1","type":"Libtmux_workspace.Plan.t"}],"returns":"(Yojson.Safe.t, Decode_error.t) result"}],"slug":"libtmux_json-workspace-encode_plan"},{"id":"Libtmux_json.Workspace.encode_receipt","publicId":"Libtmux_json.Workspace.encode_receipt","qualifiedName":"Libtmux_json.Workspace.encode_receipt","name":"encode_receipt","kind":"function","modifiers":[],"package":"libtmux-json","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":57,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Describe [libtmux.workspace-receipt/1] with ordered steps, outcome index\n lists, creation IDs, unbound hints and per-pane cleanup. Diagnostic\n messages are limited to 4096 bytes with an explicit truncation flag;\n command payloads are omitted.\n\n Both output schemas have a 4 MiB bound. Invalid UTF-8 values use\n [{\"encoding\":\"hex\",\"bytes\":\"...\"}] instead of losing bytes. Imported IDs\n and hints never establish a connection binding. "],"declarations":[{"kind":"function","text":"val encode_receipt :\n Libtmux_workspace.Execution.receipt ->\n (Yojson.Safe.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":57,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Workspace","doc":{"summary":"Describe `libtmux.workspace-receipt/1` with ordered steps, outcome index lists, creation IDs, unbound hints and per-pane cleanup. Diagnostic messages are limited to 4096 bytes with an explicit truncation flag; command payloads are omitted.","body":"Both output schemas have a 4 MiB bound. Invalid UTF-8 values use `{\"encoding\":\"hex\",\"bytes\":\"...\"}` instead of losing bytes. Imported IDs and hints never establish a connection binding."},"signatures":[{"raw":"val encode_receipt :\n Libtmux_workspace.Execution.receipt ->\n (Yojson.Safe.t, Decode_error.t) result","params":[{"name":"arg1","type":"Libtmux_workspace.Execution.receipt"}],"returns":"(Yojson.Safe.t, Decode_error.t) result"}],"slug":"libtmux_json-workspace-encode_receipt"},{"id":"Libtmux_json.Workspace.of_string","publicId":"Libtmux_json.Workspace.of_string","qualifiedName":"Libtmux_json.Workspace.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux-json","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":42,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Decode [libtmux.workspace/1] with the query codec's 64 KiB, UTF-8 and\n 32-level JSON bounds. Reject duplicate and unknown properties, invalid\n argv/shell combinations and configuration errors. [directory] is the\n absolute document directory; these functions perform no filesystem I/O. "],"declarations":[{"kind":"function","text":"val of_string :\n directory:string ->\n string ->\n (Libtmux_workspace.Config.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":42,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_json.Workspace","doc":{"summary":"Decode `libtmux.workspace/1` with the query codec's 64 KiB, UTF-8 and 32-level JSON bounds. Reject duplicate and unknown properties, invalid argv/shell combinations and configuration errors. `directory` is the absolute document directory; these functions perform no filesystem I/O."},"signatures":[{"raw":"val of_string :\n directory:string ->\n string -> (Libtmux_workspace.Config.t, Decode_error.t) result","params":[{"name":"directory","type":"string","keywordOnly":true},{"name":"arg1","type":"string"}],"returns":"(Libtmux_workspace.Config.t, Decode_error.t) result"}],"slug":"libtmux_json-workspace-of_string"},{"id":"Libtmux_unix","publicId":"Libtmux_unix","qualifiedName":"Libtmux_unix","name":"Libtmux_unix","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":1,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Blocking Linux tmux clients with explicit scoped cancellation.\n\n Client methods perform I/O unless documented otherwise. Captured\n {!Libtmux.Snapshot} observations and retained {!Operation.inspect} remain\n local. Clients belong to the connecting domain. Closure releases their owned\n resources; tmux applies its configured daemon lifetime.\n\n See {!Client} for acquisition and commands, {!Operation} for cancellation\n outcomes, and {!Subscription} for bounded future output. The\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/control.md}control\n guide} explains binding, completion and recovery. "],"declarations":[{"kind":"module","text":"","source":{"file":"unix/libtmux_unix.mli","line":1,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"doc":{"summary":"Blocking Linux tmux clients with explicit scoped cancellation.","body":"Client methods perform I/O unless documented otherwise. Captured {!Libtmux.Snapshot} observations and retained {!Operation.inspect} remain local. Clients belong to the connecting domain. Closure releases their owned resources; tmux applies its configured daemon lifetime.\n\nSee {!Client} for acquisition and commands, {!Operation} for cancellation outcomes, and {!Subscription} for bounded future output. The [control guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/control.md) explains binding, completion and recovery."},"slug":"libtmux_unix"},{"id":"Libtmux_unix.Cancellation","publicId":"Libtmux_unix.Cancellation","qualifiedName":"Libtmux_unix.Cancellation","name":"Cancellation","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":63,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Cancellation : sig\n type t\n\n exception Cancelled\n\n val with_ : (t -> 'a) -> 'a\n (** Own a cancellation token for the callback's lifetime. Leaving the scope\n cancels outstanding waiters and releases its descriptors after they\n finish. An escaped token is cancelled and cannot be reused. *)\n\n val cancel : t -> unit\n (** Wake waiters. Safe from another domain or systhread, but not from a signal\n handler. Repeated calls and calls after scope exit have no effect. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":63,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix","slug":"libtmux_unix-cancellation"},{"id":"Libtmux_unix.Cancellation.Cancelled","publicId":"Libtmux_unix.Cancellation.Cancelled","qualifiedName":"Libtmux_unix.Cancellation.Cancelled","name":"Cancelled","kind":"exception","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":66,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"exception","text":"exception Cancelled","source":{"file":"unix/libtmux_unix.mli","line":66,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cancellation","signatures":[{"raw":"type exn += Cancelled","params":[]}],"slug":"libtmux_unix-cancellation-cancelled"},{"id":"Libtmux_unix.Cancellation.cancel","publicId":"Libtmux_unix.Cancellation.cancel","qualifiedName":"Libtmux_unix.Cancellation.cancel","name":"cancel","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Wake waiters. Safe from another domain or systhread, but not from a signal\n handler. Repeated calls and calls after scope exit have no effect. "],"declarations":[{"kind":"function","text":"val cancel : t -> unit","source":{"file":"unix/libtmux_unix.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cancellation","doc":{"summary":"Wake waiters. Safe from another domain or systhread, but not from a signal handler. Repeated calls and calls after scope exit have no effect."},"signatures":[{"raw":"val cancel : t -> unit","params":[{"name":"arg1","type":"t"}],"returns":"unit"}],"slug":"libtmux_unix-cancellation-cancel"},{"id":"Libtmux_unix.Cancellation.t","publicId":"Libtmux_unix.Cancellation.t","qualifiedName":"Libtmux_unix.Cancellation.t","name":"t","kind":"typealias","package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":64,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"unix/libtmux_unix.mli","line":64,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cancellation","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_unix-cancellation-t"},{"id":"Libtmux_unix.Cancellation.with_","publicId":"Libtmux_unix.Cancellation.with_","qualifiedName":"Libtmux_unix.Cancellation.with_","name":"with_","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":68,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Own a cancellation token for the callback's lifetime. Leaving the scope\n cancels outstanding waiters and releases its descriptors after they\n finish. An escaped token is cancelled and cannot be reused. "],"declarations":[{"kind":"function","text":"val with_ : (t -> 'a) -> 'a","source":{"file":"unix/libtmux_unix.mli","line":68,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cancellation","doc":{"summary":"Own a cancellation token for the callback's lifetime. Leaving the scope cancels outstanding waiters and releases its descriptors after they finish. An escaped token is cancelled and cannot be reused."},"signatures":[{"raw":"val with_ : (t -> 'a) -> 'a","params":[{"name":"arg1","type":"t -> 'a"}],"returns":"'a"}],"slug":"libtmux_unix-cancellation-with_"},{"id":"Libtmux_unix.Cleanup","publicId":"Libtmux_unix.Cleanup","qualifiedName":"Libtmux_unix.Cleanup","name":"Cleanup","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":17,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Retained failures from releasing processes and descriptors. Reports belong\n to their creating domain and remain readable after client closure. They\n preserve secondary failures without replacing a primary exception or\n cancellation. "],"declarations":[{"kind":"module","text":"module Cleanup : sig\n type t = Cleanup.t\n\n type phase = Cleanup.phase =\n | Close_pipe\n | Open_pidfd\n | Close_pidfd\n | Terminate\n | Grace\n | Kill\n | Reap\n | Unreaped_child\n | Cancel_workers\n | Release_hook\n | Notify_waiters\n\n type issue = Cleanup.issue = {\n phase : phase;\n error : Libtmux.Error.t option;\n exception_ : exn;\n backtrace : Printexc.raw_backtrace;\n }\n (** One failed cleanup action. [error] retains a typed library cause when\n available; [exception_] and [backtrace] retain the original exception.\n [Unreaped_child] means exit was not established after a failed signal. It\n does not release ownership or authorize signalling a reused PID. *)\n\n type snapshot = Cleanup.snapshot = { issues : issue Iarray.t; omitted : int }\n (** Issues in occurrence order, with a count of additional omitted issues. A\n report retains at most 64 entries. This bounds entry count, not heap\n retention: exception payloads and backtraces may retain other values.\n These diagnostics are not immutable graph observations. *)\n\n val create : unit -> t\n (** Create an empty report without I/O. Supply it before {!Client.connect},\n {!Workspace.submit_bootstrap} or {!Terminal.attach_current} to retain\n cleanup evidence even when setup fails or cancellation raises. *)\n\n val inspect : t -> (snapshot, Libtmux.Error.t) result\n (** Copy the current diagnostics without I/O. Returns\n {!Libtmux.Error.Wrong_domain} outside the creating domain. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":17,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix","doc":{"summary":"Retained failures from releasing processes and descriptors. Reports belong to their creating domain and remain readable after client closure. They preserve secondary failures without replacing a primary exception or cancellation."},"slug":"libtmux_unix-cleanup"},{"id":"Libtmux_unix.Cleanup.create","publicId":"Libtmux_unix.Cleanup.create","qualifiedName":"Libtmux_unix.Cleanup.create","name":"create","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":50,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Create an empty report without I/O. Supply it before {!Client.connect},\n {!Workspace.submit_bootstrap} or {!Terminal.attach_current} to retain\n cleanup evidence even when setup fails or cancellation raises. "],"declarations":[{"kind":"function","text":"val create : unit -> t","source":{"file":"unix/libtmux_unix.mli","line":50,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup","doc":{"summary":"Create an empty report without I/O. Supply it before {!Client.connect}, {!Workspace.submit_bootstrap} or {!Terminal.attach_current} to retain cleanup evidence even when setup fails or cancellation raises."},"signatures":[{"raw":"val create : unit -> t","params":[{"name":"arg1","type":"unit"}],"returns":"t"}],"slug":"libtmux_unix-cleanup-create"},{"id":"Libtmux_unix.Cleanup.inspect","publicId":"Libtmux_unix.Cleanup.inspect","qualifiedName":"Libtmux_unix.Cleanup.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":55,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Copy the current diagnostics without I/O. Returns\n {!Libtmux.Error.Wrong_domain} outside the creating domain. "],"declarations":[{"kind":"function","text":"val inspect : t -> (snapshot, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":55,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup","doc":{"summary":"Copy the current diagnostics without I/O. Returns {!Libtmux.Error.Wrong_domain} outside the creating domain."},"signatures":[{"raw":"val inspect : t -> (snapshot, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(snapshot, Libtmux.Error.t) result"}],"slug":"libtmux_unix-cleanup-inspect"},{"id":"Libtmux_unix.Cleanup.issue","publicId":"Libtmux_unix.Cleanup.issue","qualifiedName":"Libtmux_unix.Cleanup.issue","name":"issue","kind":"struct","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":33,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" One failed cleanup action. [error] retains a typed library cause when\n available; [exception_] and [backtrace] retain the original exception.\n [Unreaped_child] means exit was not established after a failed signal. It\n does not release ownership or authorize signalling a reused PID. "],"declarations":[{"kind":"struct","text":"type issue = Cleanup.issue = {\n phase : phase;\n error : Libtmux.Error.t option;\n exception_ : exn;\n backtrace : Printexc.raw_backtrace;\n }","source":{"file":"unix/libtmux_unix.mli","line":33,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup","doc":{"summary":"One failed cleanup action. `error` retains a typed library cause when available; `exception_` and `backtrace` retain the original exception. `Unreaped_child` means exit was not established after a failed signal. It does not release ownership or authorize signalling a reused PID."},"type":"Cleanup.issue","signatures":[{"raw":"type issue = Cleanup.issue =\n {\n phase: phase ;\n error: Libtmux.Error.t option ;\n exception_: exn ;\n backtrace: Printexc.raw_backtrace }","params":[]}],"slug":"libtmux_unix-cleanup-issue"},{"id":"Libtmux_unix.Cleanup.issue.backtrace","publicId":"Libtmux_unix.Cleanup.issue.backtrace","name":"backtrace","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":37,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"backtrace : Printexc.raw_backtrace;","source":{"file":"unix/libtmux_unix.mli","line":37,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.issue","type":"Printexc.raw_backtrace","qualifiedName":"Libtmux_unix.Cleanup.backtrace","slug":"libtmux_unix-cleanup-issue-backtrace"},{"id":"Libtmux_unix.Cleanup.issue.error","publicId":"Libtmux_unix.Cleanup.issue.error","name":"error","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":35,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"error : Libtmux.Error.t option;","source":{"file":"unix/libtmux_unix.mli","line":35,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.issue","type":"Libtmux.Error.t option","qualifiedName":"Libtmux_unix.Cleanup.error","slug":"libtmux_unix-cleanup-issue-error"},{"id":"Libtmux_unix.Cleanup.issue.exception_","publicId":"Libtmux_unix.Cleanup.issue.exception_","name":"exception_","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":36,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"exception_ : exn;","source":{"file":"unix/libtmux_unix.mli","line":36,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.issue","type":"exn","qualifiedName":"Libtmux_unix.Cleanup.exception_","slug":"libtmux_unix-cleanup-issue-exception_"},{"id":"Libtmux_unix.Cleanup.issue.phase","publicId":"Libtmux_unix.Cleanup.issue.phase","name":"phase","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":34,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"phase : phase;","source":{"file":"unix/libtmux_unix.mli","line":34,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.issue","type":"phase","qualifiedName":"Libtmux_unix.Cleanup.phase","slug":"libtmux_unix-cleanup-issue-phase"},{"id":"Libtmux_unix.Cleanup.phase","publicId":"Libtmux_unix.Cleanup.phase","qualifiedName":"Libtmux_unix.Cleanup.phase","name":"phase","kind":"enum","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":20,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type phase = Cleanup.phase =\n | Close_pipe\n | Open_pidfd\n | Close_pidfd\n | Terminate\n | Grace\n | Kill\n | Reap\n | Unreaped_child\n | Cancel_workers\n | Release_hook\n | Notify_waiters","source":{"file":"unix/libtmux_unix.mli","line":20,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup","type":"Cleanup.phase","signatures":[{"raw":"type phase = Cleanup.phase =\n | Close_pipe \n | Open_pidfd \n | Close_pidfd \n | Terminate \n | Grace \n | Kill \n | Reap \n | Unreaped_child \n | Cancel_workers \n | Release_hook \n | Notify_waiters ","params":[]}],"slug":"libtmux_unix-cleanup-phase"},{"id":"Libtmux_unix.Cleanup.phase.Cancel_workers","publicId":"Libtmux_unix.Cleanup.phase.Cancel_workers","name":"Cancel_workers","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":29,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Cancel_workers","source":{"file":"unix/libtmux_unix.mli","line":29,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Cancel_workers","slug":"libtmux_unix-cleanup-phase-cancel_workers"},{"id":"Libtmux_unix.Cleanup.phase.Close_pidfd","publicId":"Libtmux_unix.Cleanup.phase.Close_pidfd","name":"Close_pidfd","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":23,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Close_pidfd","source":{"file":"unix/libtmux_unix.mli","line":23,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Close_pidfd","slug":"libtmux_unix-cleanup-phase-close_pidfd"},{"id":"Libtmux_unix.Cleanup.phase.Close_pipe","publicId":"Libtmux_unix.Cleanup.phase.Close_pipe","name":"Close_pipe","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":21,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Close_pipe","source":{"file":"unix/libtmux_unix.mli","line":21,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Close_pipe","slug":"libtmux_unix-cleanup-phase-close_pipe"},{"id":"Libtmux_unix.Cleanup.phase.Grace","publicId":"Libtmux_unix.Cleanup.phase.Grace","name":"Grace","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":25,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Grace","source":{"file":"unix/libtmux_unix.mli","line":25,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Grace","slug":"libtmux_unix-cleanup-phase-grace"},{"id":"Libtmux_unix.Cleanup.phase.Kill","publicId":"Libtmux_unix.Cleanup.phase.Kill","name":"Kill","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":26,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Kill","source":{"file":"unix/libtmux_unix.mli","line":26,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Kill","slug":"libtmux_unix-cleanup-phase-kill"},{"id":"Libtmux_unix.Cleanup.phase.Notify_waiters","publicId":"Libtmux_unix.Cleanup.phase.Notify_waiters","name":"Notify_waiters","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":31,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Notify_waiters","source":{"file":"unix/libtmux_unix.mli","line":31,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Notify_waiters","slug":"libtmux_unix-cleanup-phase-notify_waiters"},{"id":"Libtmux_unix.Cleanup.phase.Open_pidfd","publicId":"Libtmux_unix.Cleanup.phase.Open_pidfd","name":"Open_pidfd","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":22,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Open_pidfd","source":{"file":"unix/libtmux_unix.mli","line":22,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Open_pidfd","slug":"libtmux_unix-cleanup-phase-open_pidfd"},{"id":"Libtmux_unix.Cleanup.phase.Reap","publicId":"Libtmux_unix.Cleanup.phase.Reap","name":"Reap","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":27,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Reap","source":{"file":"unix/libtmux_unix.mli","line":27,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Reap","slug":"libtmux_unix-cleanup-phase-reap"},{"id":"Libtmux_unix.Cleanup.phase.Release_hook","publicId":"Libtmux_unix.Cleanup.phase.Release_hook","name":"Release_hook","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":30,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Release_hook","source":{"file":"unix/libtmux_unix.mli","line":30,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Release_hook","slug":"libtmux_unix-cleanup-phase-release_hook"},{"id":"Libtmux_unix.Cleanup.phase.Terminate","publicId":"Libtmux_unix.Cleanup.phase.Terminate","name":"Terminate","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":24,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Terminate","source":{"file":"unix/libtmux_unix.mli","line":24,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Terminate","slug":"libtmux_unix-cleanup-phase-terminate"},{"id":"Libtmux_unix.Cleanup.phase.Unreaped_child","publicId":"Libtmux_unix.Cleanup.phase.Unreaped_child","name":"Unreaped_child","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":28,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unreaped_child","source":{"file":"unix/libtmux_unix.mli","line":28,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Unreaped_child","slug":"libtmux_unix-cleanup-phase-unreaped_child"},{"id":"Libtmux_unix.Cleanup.snapshot","publicId":"Libtmux_unix.Cleanup.snapshot","qualifiedName":"Libtmux_unix.Cleanup.snapshot","name":"snapshot","kind":"struct","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Issues in occurrence order, with a count of additional omitted issues. A\n report retains at most 64 entries. This bounds entry count, not heap\n retention: exception payloads and backtraces may retain other values.\n These diagnostics are not immutable graph observations. "],"declarations":[{"kind":"struct","text":"type snapshot = Cleanup.snapshot = { issues : issue Iarray.t; omitted : int }","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup","doc":{"summary":"Issues in occurrence order, with a count of additional omitted issues. A report retains at most 64 entries. This bounds entry count, not heap retention: exception payloads and backtraces may retain other values. These diagnostics are not immutable graph observations."},"type":"Cleanup.snapshot","signatures":[{"raw":"type snapshot = Cleanup.snapshot = {\n issues: issue Iarray.t ;\n omitted: int }","params":[]}],"slug":"libtmux_unix-cleanup-snapshot"},{"id":"Libtmux_unix.Cleanup.snapshot.issues","publicId":"Libtmux_unix.Cleanup.snapshot.issues","name":"issues","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"issues : issue Iarray.t;","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.snapshot","type":"issue Iarray.t","qualifiedName":"Libtmux_unix.Cleanup.issues","slug":"libtmux_unix-cleanup-snapshot-issues"},{"id":"Libtmux_unix.Cleanup.snapshot.omitted","publicId":"Libtmux_unix.Cleanup.snapshot.omitted","name":"omitted","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"omitted : int","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup.snapshot","type":"int","qualifiedName":"Libtmux_unix.Cleanup.omitted","slug":"libtmux_unix-cleanup-snapshot-omitted"},{"id":"Libtmux_unix.Cleanup.t","publicId":"Libtmux_unix.Cleanup.t","qualifiedName":"Libtmux_unix.Cleanup.t","name":"t","kind":"typealias","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":18,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t = Cleanup.t","source":{"file":"unix/libtmux_unix.mli","line":18,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Cleanup","type":"Cleanup.t","signatures":[{"raw":"type t = Cleanup.t","params":[]}],"slug":"libtmux_unix-cleanup-t"},{"id":"Libtmux_unix.Client","publicId":"Libtmux_unix.Client","qualifiedName":"Libtmux_unix.Client","name":"Client","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":186,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" An explicit generation-bound connection. Applications retain ownership of\n the endpoint choice and resource lifetime. "],"declarations":[{"kind":"module","text":"module Client : sig\n type t\n\n val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n Libtmux.Endpoint.t ->\n (t, Libtmux.Error.t) result\n (** Attach to an existing local daemon with at least one session. The caller\n and daemon must share the PID namespace and filesystem. A local socket\n pathname alone does not establish these preconditions. [timeout] is the\n maximum seconds per control exchange, defaulting to one second. Requires\n Linux pidfd support. The client belongs to the current domain. Initial and\n auxiliary attachments suppress tmux's [update-environment] behavior. *)\n\n val cleanup : t -> Cleanup.t\n (** Read the report supplied at connection time, or its fresh default.\n {!Cleanup.inspect} remains available after close. *)\n\n val source : t -> Libtmux.Source.t\n (** Read the retained endpoint, daemon PID and connection generation without\n I/O. *)\n\n val version : t -> string\n (** Read the bound daemon's observed version without I/O. *)\n\n val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t ->\n Libtmux.Pane.t ->\n (Subscription.t, Libtmux.Error.t) result\n (** Acquire verified coverage of the pane's observed session/window. Choose\n the least session ID unless explicitly supplied. Reuse one lane per\n session. Defaults: 1 MiB and 1024 queued events per subscriber; at most 16\n subscribers and eight client lanes including commands. Reserve payload\n against the shared 32 MiB budget before admission.\n\n Queue capacities remain reserved while empty. Captures and reads need\n additional scratch space; their admission can return\n {!Libtmux.Error.Capacity} below the subscriber-count limit. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity}shared\n capacity guide} for the combined reservations and process slots.\n\n Data starts after admission's marker. Layout/membership changes end\n continuity conservatively. Overflow emits Gap then End, without blocking\n another subscriber. Blocking delivery advances during Subscription.next.\n There is no snapshot/history barrier or automatic recovery. *)\n\n val wait_for_text :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n text:string ->\n (Rendered.t, Libtmux.Error.t) result\n (** Subscribe, capture the ordinary screen immediately, and recapture after\n output. Membership/overflow gaps trigger explicit fresh capture and new\n coverage in the same binding. Maximum pattern: 64 KiB. Success returns a\n capture that contains the text. Transient text between captures may be\n missed. Check the deadline between bounded acquisitions; in-flight I/O\n retains the client's exchange timeout. Release the temporary subscription\n without replacing an earlier error or cancellation; inspect {!cleanup} for\n secondary failures. Otherwise cleanup failure prevents success or renewed\n coverage. No capture/stream barrier exists. *)\n\n val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result\n (** Validate and reserve queue capacity without I/O. *)\n\n val await :\n ?cancel:Cancellation.t -> 'a Operation.t -> ('a, Libtmux.Error.t) result\n (** Pump admitted work until this operation is finished. Only one blocking\n caller may own the client at a time. Cancellation removes queued work or\n drains admitted work before raising [Cancellation.Cancelled]. The handle\n retains its outcome. Draining has at most one exchange timeout from\n detection; local scratch filesystem I/O and owned-child cleanup must also\n finish. Each owned child gets 200 ms of TERM grace before forced\n termination and reaping; scheduling and kernel completion can add time. No\n background scheduler or worker is started. *)\n\n val run :\n ?cancel:Cancellation.t ->\n t ->\n 'a Libtmux.Command.t ->\n ('a, Libtmux.Error.t) result\n (** Submit and await. Use the two calls separately to retain an operation\n handle. *)\n\n val capture :\n ?cancel:Cancellation.t -> t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result\n (** Acquire a complete graph over a recorded interval, with a fixed number of\n listing commands. Races fail validation. Access to returned values\n performs no I/O, including after closing the client. *)\n\n val capture_text :\n ?cancel:Cancellation.t ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int ->\n end_:int ->\n (Rendered.t, Libtmux.Error.t) result\n (** Capture ordinary rendered screen rows, inclusively, via an owned paste\n buffer and private file. Reject applicable capture/save hooks. The scratch\n directory defaults to [/tmp] and must be local storage shared with the\n daemon. Pending and alternate-screen byte modes are unsupported. This\n observes an interval and establishes no stream continuity barrier. *)\n\n (* BEGIN GENERATED OPERATIONS *)\n val rename_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n name:string ->\n (unit, Libtmux.Error.t) result\n (** Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. *)\n\n val rename_session :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n name:string ->\n (unit, Libtmux.Error.t) result\n (** Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. *)\n\n val switch_client_at :\n ?cancel:Cancellation.t ->\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result\n (** Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. *)\n\n val request_detach_client_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result\n (** Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. *)\n\n val refresh_client_at :\n ?cancel:Cancellation.t ->\n ?status_only:bool ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result\n (** Request a redraw; no terminal-rendering completion is implied. *)\n\n val resize_control_client_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Client_name.t ->\n width:int ->\n height:int ->\n (unit, Libtmux.Error.t) result\n (** Set a control client's reported size. tmux rejects terminal clients. *)\n\n val send_text :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n text:string ->\n (unit, Libtmux.Error.t) result\n (** Literal bytes, without an implicit Enter. NUL is rejected at admission. *)\n\n val send_keys :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Key.t list ->\n (unit, Libtmux.Error.t) result\n (** Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. *)\n\n val wait_for :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result\n (** Wait on a named tmux semaphore using a dedicated bound lane. *)\n\n val signal :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result\n (** Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. *)\n\n val capture_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result\n (** Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n *)\n\n val set_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. *)\n\n val unset_environment :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Environment.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Remove the local entry, allowing a global value to apply to future panes.\n *)\n\n val remove_environment :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Environment.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Store a removal marker, excluding the variable from future panes. *)\n\n val capture_options :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result\n (** Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Libtmux.Error.Unsupported}. *)\n\n val read_option :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result\n (** Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. *)\n\n val set_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Options.scalar ->\n (unit, Libtmux.Error.t) result\n (** Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. *)\n\n val unset_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. *)\n\n val clear_option_array :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Set a local empty array, masking inheritance. *)\n\n val capture_hooks :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result\n (** Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. *)\n\n val read_hook :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result\n (** Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. *)\n\n val set_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Hook.command list ->\n (unit, Libtmux.Error.t) result\n (** Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Libtmux.Options.Text] value; bulk hook capture includes built-ins.\n Commands may cause arbitrary tmux effects when triggered. Hooks that print\n output are outside the supported control transport contract. *)\n\n val remove_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. *)\n\n val run_hook :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. *)\n\n val create_session :\n ?cancel:Cancellation.t ->\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n name:string ->\n unit ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create a detached session on the bound daemon. Name collisions fail. *)\n\n val create_window :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Session.target ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create detached, rejecting an occupied explicit index. *)\n\n val split_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. *)\n\n val break_pane :\n ?cancel:Cancellation.t ->\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. *)\n\n val kill_session :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result\n (** Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. *)\n\n val kill_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result\n (** Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. *)\n\n val kill_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. *)\n\n val select_window_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Operate on the session's current index at execution, not an old link\n incarnation. *)\n\n val unlink_window_at :\n ?cancel:Cancellation.t ->\n ?allow_kill:bool ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Without [allow_kill], tmux rejects removal of the last link to a window.\n *)\n\n val link_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. *)\n\n val move_window_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Move the source session's current link at [from_index]. Destination\n collisions fail. *)\n\n val select_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Make the pane active in its containing window. This does not open or\n attach a terminal client. *)\n\n val set_pane_title :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n title:string ->\n (unit, Libtmux.Error.t) result\n (** Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. *)\n\n val resize_pane :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. *)\n\n val resize_window :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. *)\n\n val select_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n Libtmux.Layout.t ->\n (unit, Libtmux.Error.t) result\n (** Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. *)\n\n val cycle_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] ->\n (unit, Libtmux.Error.t) result\n (** Select the next or previous tmux preset layout for this window. *)\n\n val move_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (unit, Libtmux.Error.t) result\n (** Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. *)\n\n val swap_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. *)\n\n val rotate_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Forward | `Backward ] ->\n (unit, Libtmux.Error.t) result\n (** Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. *)\n\n val zoom_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Toggle the window's zoom state around this pane. *)\n\n val respawn_pane :\n ?cancel:Cancellation.t ->\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Spawn.t ->\n (unit, Libtmux.Error.t) result\n (** Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. *)\n\n val clear_history :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. *)\n\n (* END GENERATED OPERATIONS *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** Close owned control clients and descriptors on the owning domain. Later\n calls retain the original cleanup result, including failure. Each owned\n helper gets 200 ms of TERM grace, followed by KILL if needed and reaping.\n This is not a whole-client deadline or a bound on uninterruptible kernel\n work. No signal targets the daemon. tmux's [exit-unattached] and\n [exit-empty] policies can end the daemon after its clients or sessions\n disappear. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":186,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix","doc":{"summary":"An explicit generation-bound connection. Applications retain ownership of the endpoint choice and resource lifetime."},"slug":"libtmux_unix-client"},{"id":"Libtmux_unix.Client.await","publicId":"Libtmux_unix.Client.await","qualifiedName":"Libtmux_unix.Client.await","name":"await","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":259,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Pump admitted work until this operation is finished. Only one blocking\n caller may own the client at a time. Cancellation removes queued work or\n drains admitted work before raising [Cancellation.Cancelled]. The handle\n retains its outcome. Draining has at most one exchange timeout from\n detection; local scratch filesystem I/O and owned-child cleanup must also\n finish. Each owned child gets 200 ms of TERM grace before forced\n termination and reaping; scheduling and kernel completion can add time. No\n background scheduler or worker is started. "],"declarations":[{"kind":"function","text":"val await :\n ?cancel:Cancellation.t -> 'a Operation.t -> ('a, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":259,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Pump admitted work until this operation is finished. Only one blocking caller may own the client at a time. Cancellation removes queued work or drains admitted work before raising `Cancellation.Cancelled`. The handle retains its outcome. Draining has at most one exchange timeout from detection; local scratch filesystem I/O and owned-child cleanup must also finish. Each owned child gets 200 ms of TERM grace before forced termination and reaping; scheduling and kernel completion can add time. No background scheduler or worker is started."},"signatures":[{"raw":"val await :\n ?cancel:Cancellation.t -> 'a Operation.t -> ('a, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"'a Operation.t"}],"returns":"('a, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-await"},{"id":"Libtmux_unix.Client.break_pane","publicId":"Libtmux_unix.Client.break_pane","qualifiedName":"Libtmux_unix.Client.break_pane","name":"break_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":569,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. "],"declarations":[{"kind":"function","text":"val break_pane :\n ?cancel:Cancellation.t ->\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":569,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Move the pane into a new window at an explicit session index. An occupied destination fails. The returned IDs describe the resulting context; the pane itself already existed."},"signatures":[{"raw":"val break_pane :\n ?cancel:Cancellation.t ->\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-break_pane"},{"id":"Libtmux_unix.Client.capture","publicId":"Libtmux_unix.Client.capture","qualifiedName":"Libtmux_unix.Client.capture","name":"capture","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":278,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Acquire a complete graph over a recorded interval, with a fixed number of\n listing commands. Races fail validation. Access to returned values\n performs no I/O, including after closing the client. "],"declarations":[{"kind":"function","text":"val capture :\n ?cancel:Cancellation.t -> t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":278,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Acquire a complete graph over a recorded interval, with a fixed number of listing commands. Races fail validation. Access to returned values performs no I/O, including after closing the client.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_graph.ml","intro":"Navigate the typed object graph. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_graph.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"graph: 2 sessions, 2 windows, 3 links, 2 panes\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val capture :\n ?cancel:Cancellation.t -> t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"(Libtmux.Snapshot.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-capture"},{"id":"Libtmux_unix.Client.capture_environment","publicId":"Libtmux_unix.Client.capture_environment","qualifiedName":"Libtmux_unix.Client.capture_environment","name":"capture_environment","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":380,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n "],"declarations":[{"kind":"function","text":"val capture_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":380,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Acquire a bounded table through a read-only command process. Its response must identify the bound daemon while the original pidfd remains live. Unsupported external variable names fail decoding; they are not omitted."},"signatures":[{"raw":"val capture_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"}],"returns":"(Libtmux.Environment.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-capture_environment"},{"id":"Libtmux_unix.Client.capture_hooks","publicId":"Libtmux_unix.Client.capture_hooks","qualifiedName":"Libtmux_unix.Client.capture_hooks","name":"capture_hooks","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":477,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. "],"declarations":[{"kind":"function","text":"val capture_hooks :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":477,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Capture locally configured built-in hooks. Command values are tmux's printed representation, retained as data."},"signatures":[{"raw":"val capture_hooks :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"}],"returns":"(Libtmux.Options.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-capture_hooks"},{"id":"Libtmux_unix.Client.capture_options","publicId":"Libtmux_unix.Client.capture_options","qualifiedName":"Libtmux_unix.Client.capture_options","name":"capture_options","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":420,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Libtmux.Error.Unsupported}. "],"declarations":[{"kind":"function","text":"val capture_options :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":420,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Acquire one bounded option table, excluding hooks. The default includes only local entries. Inherited table enumeration includes built-ins; inherited user options require `read_option` with their explicit name. Built-in descriptors cover every supported release from tmux 3.3a through 3.8; other versions return {!Libtmux.Error.Unsupported}."},"signatures":[{"raw":"val capture_options :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"}],"returns":"(Libtmux.Options.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-capture_options"},{"id":"Libtmux_unix.Client.capture_text","publicId":"Libtmux_unix.Client.capture_text","qualifiedName":"Libtmux_unix.Client.capture_text","name":"capture_text","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":284,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Capture ordinary rendered screen rows, inclusively, via an owned paste\n buffer and private file. Reject applicable capture/save hooks. The scratch\n directory defaults to [/tmp] and must be local storage shared with the\n daemon. Pending and alternate-screen byte modes are unsupported. This\n observes an interval and establishes no stream continuity barrier. "],"declarations":[{"kind":"function","text":"val capture_text :\n ?cancel:Cancellation.t ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int ->\n end_:int ->\n (Rendered.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":284,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Capture ordinary rendered screen rows, inclusively, via an owned paste buffer and private file. Reject applicable capture/save hooks. The scratch directory defaults to `/tmp` and must be local storage shared with the daemon. Pending and alternate-screen byte modes are unsupported. This observes an interval and establishes no stream continuity barrier."},"signatures":[{"raw":"val capture_text :\n ?cancel:Cancellation.t ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int -> end_:int -> (Rendered.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"scratch_dir","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"},{"name":"start","type":"int","keywordOnly":true},{"name":"end_","type":"int","keywordOnly":true}],"returns":"(Rendered.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-capture_text"},{"id":"Libtmux_unix.Client.cleanup","publicId":"Libtmux_unix.Client.cleanup","qualifiedName":"Libtmux_unix.Client.cleanup","name":"cleanup","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":202,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read the report supplied at connection time, or its fresh default.\n {!Cleanup.inspect} remains available after close. "],"declarations":[{"kind":"function","text":"val cleanup : t -> Cleanup.t","source":{"file":"unix/libtmux_unix.mli","line":202,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Read the report supplied at connection time, or its fresh default. {!Cleanup.inspect} remains available after close."},"signatures":[{"raw":"val cleanup : t -> Cleanup.t","params":[{"name":"arg1","type":"t"}],"returns":"Cleanup.t"}],"slug":"libtmux_unix-client-cleanup"},{"id":"Libtmux_unix.Client.clear_history","publicId":"Libtmux_unix.Client.clear_history","qualifiedName":"Libtmux_unix.Client.clear_history","name":"clear_history","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":749,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. "],"declarations":[{"kind":"function","text":"val clear_history :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":749,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Clear stored scrollback for this pane. The visible screen and running process remain; later captures cannot recover discarded history."},"signatures":[{"raw":"val clear_history :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-clear_history"},{"id":"Libtmux_unix.Client.clear_option_array","publicId":"Libtmux_unix.Client.clear_option_array","qualifiedName":"Libtmux_unix.Client.clear_option_array","name":"clear_option_array","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":469,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a local empty array, masking inheritance. "],"declarations":[{"kind":"function","text":"val clear_option_array :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":469,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set a local empty array, masking inheritance."},"signatures":[{"raw":"val clear_option_array :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-clear_option_array"},{"id":"Libtmux_unix.Client.close","publicId":"Libtmux_unix.Client.close","qualifiedName":"Libtmux_unix.Client.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":759,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Close owned control clients and descriptors on the owning domain. Later\n calls retain the original cleanup result, including failure. Each owned\n helper gets 200 ms of TERM grace, followed by KILL if needed and reaping.\n This is not a whole-client deadline or a bound on uninterruptible kernel\n work. No signal targets the daemon. tmux's [exit-unattached] and\n [exit-empty] policies can end the daemon after its clients or sessions\n disappear. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":759,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Close owned control clients and descriptors on the owning domain. Later calls retain the original cleanup result, including failure. Each owned helper gets 200 ms of TERM grace, followed by KILL if needed and reaping. This is not a whole-client deadline or a bound on uninterruptible kernel work. No signal targets the daemon. tmux's `exit-unattached` and `exit-empty` policies can end the daemon after its clients or sessions disappear."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-close"},{"id":"Libtmux_unix.Client.connect","publicId":"Libtmux_unix.Client.connect","qualifiedName":"Libtmux_unix.Client.connect","name":"connect","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":189,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Attach to an existing local daemon with at least one session. The caller\n and daemon must share the PID namespace and filesystem. A local socket\n pathname alone does not establish these preconditions. [timeout] is the\n maximum seconds per control exchange, defaulting to one second. Requires\n Linux pidfd support. The client belongs to the current domain. Initial and\n auxiliary attachments suppress tmux's [update-environment] behavior. "],"declarations":[{"kind":"function","text":"val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n Libtmux.Endpoint.t ->\n (t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":189,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Attach to an existing local daemon with at least one session. The caller and daemon must share the PID namespace and filesystem. A local socket pathname alone does not establish these preconditions. `timeout` is the maximum seconds per control exchange, defaulting to one second. Requires Linux pidfd support. The client belongs to the current domain. Initial and auxiliary attachments suppress tmux's `update-environment` behavior."},"signatures":[{"raw":"val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float -> Libtmux.Endpoint.t -> (t, Libtmux.Error.t) result","params":[{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"Libtmux.Endpoint.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-connect"},{"id":"Libtmux_unix.Client.create_session","publicId":"Libtmux_unix.Client.create_session","qualifiedName":"Libtmux_unix.Client.create_session","name":"create_session","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":535,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Create a detached session on the bound daemon. Name collisions fail. "],"declarations":[{"kind":"function","text":"val create_session :\n ?cancel:Cancellation.t ->\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n name:string ->\n unit ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":535,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Create a detached session on the bound daemon. Name collisions fail."},"signatures":[{"raw":"val create_session :\n ?cancel:Cancellation.t ->\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t -> name:string -> unit -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"window_name","type":"string","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg2","type":"unit"}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-create_session"},{"id":"Libtmux_unix.Client.create_window","publicId":"Libtmux_unix.Client.create_window","qualifiedName":"Libtmux_unix.Client.create_window","name":"create_window","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":547,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Create detached, rejecting an occupied explicit index. "],"declarations":[{"kind":"function","text":"val create_window :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Session.target ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":547,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Create detached, rejecting an occupied explicit index.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet create_window client (initial : Created.t) spawn =\n let created =\n get (Client.create_window client initial.session ~name:\"logs\" ~spawn)\n in\n let window =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id created.window)\n |> Option.get\n in\n assert (Window.name window = \"logs\");\n Printf.printf \"created: %s\\n\" (Window.name window)\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary create_window\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_create_window.ml","intro":"Create a window. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_create_window.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"created: logs\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val create_window :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t -> Libtmux.Session.target -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-create_window"},{"id":"Libtmux_unix.Client.cycle_layout","publicId":"Libtmux_unix.Client.cycle_layout","qualifiedName":"Libtmux_unix.Client.cycle_layout","name":"cycle_layout","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":693,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Select the next or previous tmux preset layout for this window. "],"declarations":[{"kind":"function","text":"val cycle_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":693,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Select the next or previous tmux preset layout for this window."},"signatures":[{"raw":"val cycle_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"[ `Next | `Previous ]"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-cycle_layout"},{"id":"Libtmux_unix.Client.kill_pane","publicId":"Libtmux_unix.Client.kill_pane","qualifiedName":"Libtmux_unix.Client.kill_pane","name":"kill_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":597,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. "],"declarations":[{"kind":"function","text":"val kill_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":597,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Destroy the target pane and its running process. tmux removes a window that becomes empty and may remove its now-empty sessions."},"signatures":[{"raw":"val kill_pane :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-kill_pane"},{"id":"Libtmux_unix.Client.kill_session","publicId":"Libtmux_unix.Client.kill_session","qualifiedName":"Libtmux_unix.Client.kill_session","name":"kill_session","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":581,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. "],"declarations":[{"kind":"function","text":"val kill_session :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":581,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Remove the session and its window links. Windows with no other links and their panes are destroyed. Removing the last session may stop tmux."},"signatures":[{"raw":"val kill_session :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Session.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-kill_session"},{"id":"Libtmux_unix.Client.kill_window","publicId":"Libtmux_unix.Client.kill_window","qualifiedName":"Libtmux_unix.Client.kill_window","name":"kill_window","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":589,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. "],"declarations":[{"kind":"function","text":"val kill_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":589,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Destroy the window, all its session links and every contained pane. This acts on the global window, not a single contextual link."},"signatures":[{"raw":"val kill_window :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-kill_window"},{"id":"Libtmux_unix.Client.link_window","publicId":"Libtmux_unix.Client.link_window","qualifiedName":"Libtmux_unix.Client.link_window","name":"link_window","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":624,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. "],"declarations":[{"kind":"function","text":"val link_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":624,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Add a session-specific link to the global window at `index`, rejecting an occupied index. The source window and its panes stay shared."},"signatures":[{"raw":"val link_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-link_window"},{"id":"Libtmux_unix.Client.move_pane","publicId":"Libtmux_unix.Client.move_pane","qualifiedName":"Libtmux_unix.Client.move_pane","name":"move_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":701,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. "],"declarations":[{"kind":"function","text":"val move_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":701,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Move the source pane beside another pane, optionally setting the split size. Both targets must belong to the same bound generation. An emptied source window is removed by tmux."},"signatures":[{"raw":"val move_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"size","type":"Libtmux.Geometry.size","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"beside","type":"Libtmux.Pane.target","keywordOnly":true},{"name":"direction","type":"Libtmux.Geometry.direction","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-move_pane"},{"id":"Libtmux_unix.Client.move_window_at","publicId":"Libtmux_unix.Client.move_window_at","qualifiedName":"Libtmux_unix.Client.move_window_at","name":"move_window_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":634,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Move the source session's current link at [from_index]. Destination\n collisions fail. "],"declarations":[{"kind":"function","text":"val move_window_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":634,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Move the source session's current link at `from_index`. Destination collisions fail.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet move_window client (initial : Created.t) spawn =\n let moving =\n get (Client.create_window client initial.session ~name:\"build\" ~spawn)\n in\n let destination =\n get\n (Client.create_session client ~name:\"destination\" ~window_name:\"landing\"\n ~spawn ())\n in\n get\n (Client.move_window_at client initial.session\n ~from_index:moving.window_index ~session:destination.session ~index:7);\n let window =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id moving.window)\n |> Option.get\n in\n let link =\n Query.exactly_one (Iarray.to_seq (Window.links window)) |> Result.get_ok\n in\n assert (Window_link.index link = 7);\n assert (\n Session.Id.equal\n (Session.id (Window_link.session link))\n (Session.Target.id destination.session));\n Printf.printf \"moved: %s at %d\\n\" (Window.name window)\n (Window_link.index link)\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary move_window\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_move_window.ml","intro":"Move a window between sessions. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_move_window.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"moved: build at 7\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val move_window_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"from_index","type":"int","keywordOnly":true},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-move_window_at"},{"id":"Libtmux_unix.Client.read_hook","publicId":"Libtmux_unix.Client.read_hook","qualifiedName":"Libtmux_unix.Client.read_hook","name":"read_hook","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":485,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. "],"declarations":[{"kind":"function","text":"val read_hook :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":485,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Read an exact hook name. Inheritance is included by default; `None` means no entry under the selected policy. Missing targets remain errors."},"signatures":[{"raw":"val read_hook :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string -> (Libtmux.Options.value option, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(Libtmux.Options.value option, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-read_hook"},{"id":"Libtmux_unix.Client.read_option","publicId":"Libtmux_unix.Client.read_option","qualifiedName":"Libtmux_unix.Client.read_option","name":"read_option","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":432,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. "],"declarations":[{"kind":"function","text":"val read_option :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":432,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Read one exact name, including user-option inheritance. `None` means no entry under the selected policy. An invalid target remains an error. The default follows inheritance; this does not identify the defining parent scope."},"signatures":[{"raw":"val read_option :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string -> (Libtmux.Options.value option, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(Libtmux.Options.value option, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-read_option"},{"id":"Libtmux_unix.Client.refresh_client_at","publicId":"Libtmux_unix.Client.refresh_client_at","qualifiedName":"Libtmux_unix.Client.refresh_client_at","name":"refresh_client_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":337,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request a redraw; no terminal-rendering completion is implied. "],"declarations":[{"kind":"function","text":"val refresh_client_at :\n ?cancel:Cancellation.t ->\n ?status_only:bool ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":337,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Request a redraw; no terminal-rendering completion is implied."},"signatures":[{"raw":"val refresh_client_at :\n ?cancel:Cancellation.t ->\n ?status_only:bool ->\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"status_only","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-refresh_client_at"},{"id":"Libtmux_unix.Client.remove_environment","publicId":"Libtmux_unix.Client.remove_environment","qualifiedName":"Libtmux_unix.Client.remove_environment","name":"remove_environment","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":412,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Store a removal marker, excluding the variable from future panes. "],"declarations":[{"kind":"function","text":"val remove_environment :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Environment.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":412,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Store a removal marker, excluding the variable from future panes."},"signatures":[{"raw":"val remove_environment :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-remove_environment"},{"id":"Libtmux_unix.Client.remove_hook","publicId":"Libtmux_unix.Client.remove_hook","qualifiedName":"Libtmux_unix.Client.remove_hook","name":"remove_hook","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":512,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. "],"declarations":[{"kind":"function","text":"val remove_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":512,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Remove the local hook or one indexed array entry. An inherited hook may become effective again; this does not stop work it already started."},"signatures":[{"raw":"val remove_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-remove_hook"},{"id":"Libtmux_unix.Client.rename_session","publicId":"Libtmux_unix.Client.rename_session","qualifiedName":"Libtmux_unix.Client.rename_session","name":"rename_session","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":308,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. "],"declarations":[{"kind":"function","text":"val rename_session :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n name:string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":308,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set the session name, rejecting a conflicting existing name. Bound IDs remain usable; existing snapshots retain their captured names."},"signatures":[{"raw":"val rename_session :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target -> name:string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-rename_session"},{"id":"Libtmux_unix.Client.rename_window","publicId":"Libtmux_unix.Client.rename_window","qualifiedName":"Libtmux_unix.Client.rename_window","name":"rename_window","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":299,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. "],"declarations":[{"kind":"function","text":"val rename_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n name:string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":299,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set the global window name. Every session link observes the new name on its next capture; existing snapshots retain the old value.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet rename_window client (initial : Created.t) _spawn =\n let before =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id initial.window)\n |> Option.get\n in\n get (Client.rename_window client initial.window ~name:\"editor-main\");\n let after =\n Snapshot.find_window (get (Client.capture client)) (Window.id before)\n |> Option.get\n in\n assert (Window.name before = \"editor\");\n assert (Window.name after = \"editor-main\");\n Printf.printf \"renamed: %s\\n\" (Window.name after)\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary rename_window\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_rename_window.ml","intro":"Rename a window. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_rename_window.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"renamed: editor-main\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val rename_window :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Window.target -> name:string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-rename_window"},{"id":"Libtmux_unix.Client.request_detach_client_at","publicId":"Libtmux_unix.Client.request_detach_client_at","qualifiedName":"Libtmux_unix.Client.request_detach_client_at","name":"request_detach_client_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":328,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. "],"declarations":[{"kind":"function","text":"val request_detach_client_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":328,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Request detachment of the client currently bearing this name. Success confirms request processing, not peer exit. Detaching the library's own primary lane can lose the response and retire its generation."},"signatures":[{"raw":"val request_detach_client_at :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-request_detach_client_at"},{"id":"Libtmux_unix.Client.resize_control_client_at","publicId":"Libtmux_unix.Client.resize_control_client_at","qualifiedName":"Libtmux_unix.Client.resize_control_client_at","name":"resize_control_client_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":345,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a control client's reported size. tmux rejects terminal clients. "],"declarations":[{"kind":"function","text":"val resize_control_client_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Client_name.t ->\n width:int ->\n height:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":345,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set a control client's reported size. tmux rejects terminal clients."},"signatures":[{"raw":"val resize_control_client_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Client_name.t ->\n width:int -> height:int -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"},{"name":"width","type":"int","keywordOnly":true},{"name":"height","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-resize_control_client_at"},{"id":"Libtmux_unix.Client.resize_pane","publicId":"Libtmux_unix.Client.resize_pane","qualifiedName":"Libtmux_unix.Client.resize_pane","name":"resize_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":662,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. "],"declarations":[{"kind":"function","text":"val resize_pane :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":662,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. tmux can constrain the result to the available layout. Capture again to observe the actual dimensions."},"signatures":[{"raw":"val resize_pane :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int -> t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-resize_pane"},{"id":"Libtmux_unix.Client.resize_window","publicId":"Libtmux_unix.Client.resize_window","qualifiedName":"Libtmux_unix.Client.resize_window","name":"resize_window","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":673,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. "],"declarations":[{"kind":"function","text":"val resize_window :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":673,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. Client-size and window-size policies can affect subsequent sizing."},"signatures":[{"raw":"val resize_window :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int -> t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-resize_window"},{"id":"Libtmux_unix.Client.respawn_pane","publicId":"Libtmux_unix.Client.respawn_pane","qualifiedName":"Libtmux_unix.Client.respawn_pane","name":"respawn_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":738,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. "],"declarations":[{"kind":"function","text":"val respawn_pane :\n ?cancel:Cancellation.t ->\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Spawn.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":738,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Start the supplied command in the existing pane. A running process causes failure unless `kill_running:true` explicitly replaces it. The pane ID remains unchanged."},"signatures":[{"raw":"val respawn_pane :\n ?cancel:Cancellation.t ->\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target -> Libtmux.Spawn.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"kill_running","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Spawn.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-respawn_pane"},{"id":"Libtmux_unix.Client.rotate_panes","publicId":"Libtmux_unix.Client.rotate_panes","qualifiedName":"Libtmux_unix.Client.rotate_panes","name":"rotate_panes","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":722,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. "],"declarations":[{"kind":"function","text":"val rotate_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Forward | `Backward ] ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":722,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Rotate pane positions in the selected direction. Pane identities and running processes remain attached to their panes."},"signatures":[{"raw":"val rotate_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Backward | `Forward ] -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"[ `Backward | `Forward ]"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-rotate_panes"},{"id":"Libtmux_unix.Client.run","publicId":"Libtmux_unix.Client.run","qualifiedName":"Libtmux_unix.Client.run","name":"run","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":270,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Submit and await. Use the two calls separately to retain an operation\n handle. "],"declarations":[{"kind":"function","text":"val run :\n ?cancel:Cancellation.t ->\n t ->\n 'a Libtmux.Command.t ->\n ('a, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":270,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Submit and await. Use the two calls separately to retain an operation handle."},"signatures":[{"raw":"val run :\n ?cancel:Cancellation.t ->\n t -> 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"'a Libtmux.Command.t"}],"returns":"('a, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-run"},{"id":"Libtmux_unix.Client.run_hook","publicId":"Libtmux_unix.Client.run_hook","qualifiedName":"Libtmux_unix.Client.run_hook","name":"run_hook","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":522,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. "],"declarations":[{"kind":"function","text":"val run_hook :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":522,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Run the effective hook in an explicit session, window or pane context. A successful result follows completion of its synchronous command queue. Background work started by a hook has its own lifetime. A later hook failure returns an uncertain outcome; preceding effects remain. Named `@` hooks return `Unsupported` because tmux can hide their parse failures in the server log. Configuration and inspection remain available."},"signatures":[{"raw":"val run_hook :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-run_hook"},{"id":"Libtmux_unix.Client.select_layout","publicId":"Libtmux_unix.Client.select_layout","qualifiedName":"Libtmux_unix.Client.select_layout","name":"select_layout","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":684,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. "],"declarations":[{"kind":"function","text":"val select_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n Libtmux.Layout.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":684,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Apply a preset or validated custom layout to the window. Pane geometry follows tmux layout rules; capture again to observe the result.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet set_layout client (initial : Created.t) spawn =\n ignore\n (get\n (Client.split_pane client initial.pane ~direction:Geometry.Right ~spawn));\n ignore\n (get\n (Client.split_pane client initial.pane ~direction:Geometry.Right ~spawn));\n get (Client.select_layout client initial.window Layout.Even_horizontal);\n let window =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id initial.window)\n |> Option.get\n in\n let panes = Window.panes window in\n assert (Iarray.length panes = 3);\n assert (\n Iarray.for_all\n (fun pane -> Pane.top pane = 0 && Pane.height pane = Window.height window)\n panes);\n assert (\n Iarray.fold_left (fun width pane -> width + Pane.width pane) 2 panes\n = Window.width window);\n print_endline \"layout: 3 horizontal panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary set_layout\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_layout.ml","intro":"Apply a layout. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_layout.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"layout: 3 horizontal panes\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val select_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target -> Libtmux.Layout.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"Libtmux.Layout.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-select_layout"},{"id":"Libtmux_unix.Client.select_pane","publicId":"Libtmux_unix.Client.select_pane","qualifiedName":"Libtmux_unix.Client.select_pane","name":"select_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":645,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Make the pane active in its containing window. This does not open or\n attach a terminal client. "],"declarations":[{"kind":"function","text":"val select_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":645,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Make the pane active in its containing window. This does not open or attach a terminal client."},"signatures":[{"raw":"val select_pane :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-select_pane"},{"id":"Libtmux_unix.Client.select_window_at","publicId":"Libtmux_unix.Client.select_window_at","qualifiedName":"Libtmux_unix.Client.select_window_at","name":"select_window_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":605,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Operate on the session's current index at execution, not an old link\n incarnation. "],"declarations":[{"kind":"function","text":"val select_window_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":605,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Operate on the session's current index at execution, not an old link incarnation."},"signatures":[{"raw":"val select_window_at :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-select_window_at"},{"id":"Libtmux_unix.Client.send_keys","publicId":"Libtmux_unix.Client.send_keys","qualifiedName":"Libtmux_unix.Client.send_keys","name":"send_keys","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":362,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. "],"declarations":[{"kind":"function","text":"val send_keys :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Key.t list ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":362,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Send named tmux keys in order, without an implicit Enter. Use {!send_text} for literal bytes rather than key interpretation.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet send_keys client (initial : Created.t) _spawn =\n let text = \"literal: $HOME; #{pane_id}\" in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n get (Client.send_text client (Pane.target pane) ~text);\n get (Client.send_keys client (Pane.target pane) [ Key.Enter ]);\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n Printf.printf \"sent: %s\\n\" text\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary send_keys\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_send_keys.ml","intro":"Send literal input and keys. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_send_keys.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"sent: literal: $HOME; #{pane_id}\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val send_keys :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target -> Libtmux.Key.t list -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Key.t list"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-send_keys"},{"id":"Libtmux_unix.Client.send_text","publicId":"Libtmux_unix.Client.send_text","qualifiedName":"Libtmux_unix.Client.send_text","name":"send_text","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":354,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Literal bytes, without an implicit Enter. NUL is rejected at admission. "],"declarations":[{"kind":"function","text":"val send_text :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n text:string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":354,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Literal bytes, without an implicit Enter. NUL is rejected at admission.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet send_keys client (initial : Created.t) _spawn =\n let text = \"literal: $HOME; #{pane_id}\" in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n get (Client.send_text client (Pane.target pane) ~text);\n get (Client.send_keys client (Pane.target pane) [ Key.Enter ]);\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n Printf.printf \"sent: %s\\n\" text\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary send_keys\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_send_keys.ml","intro":"Send literal input and keys. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_send_keys.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"sent: literal: $HOME; #{pane_id}\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val send_text :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> text:string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-send_text"},{"id":"Libtmux_unix.Client.set_environment","publicId":"Libtmux_unix.Client.set_environment","qualifiedName":"Libtmux_unix.Client.set_environment","name":"set_environment","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":391,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. "],"declarations":[{"kind":"function","text":"val set_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":391,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set a local environment value for future pane processes. `hidden` defaults to false; hidden values remain internal to tmux. Existing processes keep their environment."},"signatures":[{"raw":"val set_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-set_environment"},{"id":"Libtmux_unix.Client.set_hook","publicId":"Libtmux_unix.Client.set_hook","qualifiedName":"Libtmux_unix.Client.set_hook","name":"set_hook","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":495,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Libtmux.Options.Text] value; bulk hook capture includes built-ins.\n Commands may cause arbitrary tmux effects when triggered. Hooks that print\n output are outside the supported control transport contract. "],"declarations":[{"kind":"function","text":"val set_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Hook.command list ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":495,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set a hook to a nonempty command list. Without an index, replace the whole hook array, or fill the lowest free index when appending. An explicit `@name` custom hook stores command text as a user option; it requires complete replacement and has no array indexes. `read_hook` returns its `Libtmux.Options.Text` value; bulk hook capture includes built-ins. Commands may cause arbitrary tmux effects when triggered. Hooks that print output are outside the supported control transport contract."},"signatures":[{"raw":"val set_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string -> Libtmux.Hook.command list -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"Libtmux.Hook.command list"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-set_hook"},{"id":"Libtmux_unix.Client.set_option","publicId":"Libtmux_unix.Client.set_option","qualifiedName":"Libtmux_unix.Client.set_option","name":"set_option","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":444,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. "],"declarations":[{"kind":"function","text":"val set_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Options.scalar ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":444,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Validate the scope and scalar kind before admission. Array values require an index, or `append:true`. Without an index, tmux splits appended text using the option's separator and fills the lowest unused indexes. Text is literal; tmux format expansion is disabled. Hooks use a separate operation."},"signatures":[{"raw":"val set_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string -> Libtmux.Options.scalar -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"Libtmux.Options.scalar"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-set_option"},{"id":"Libtmux_unix.Client.set_pane_title","publicId":"Libtmux_unix.Client.set_pane_title","qualifiedName":"Libtmux_unix.Client.set_pane_title","name":"set_pane_title","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":653,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. "],"declarations":[{"kind":"function","text":"val set_pane_title :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n title:string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":653,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set the pane title as literal text, without tmux format expansion. A running terminal application can subsequently replace the title."},"signatures":[{"raw":"val set_pane_title :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> title:string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"title","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-set_pane_title"},{"id":"Libtmux_unix.Client.signal","publicId":"Libtmux_unix.Client.signal","qualifiedName":"Libtmux_unix.Client.signal","name":"signal","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":375,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. "],"declarations":[{"kind":"function","text":"val signal :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":375,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Signal a named tmux semaphore, releasing a waiter or retaining the signal for a later {!wait_for}. This does not signal an OS process."},"signatures":[{"raw":"val signal :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-signal"},{"id":"Libtmux_unix.Client.source","publicId":"Libtmux_unix.Client.source","qualifiedName":"Libtmux_unix.Client.source","name":"source","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":206,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read the retained endpoint, daemon PID and connection generation without\n I/O. "],"declarations":[{"kind":"function","text":"val source : t -> Libtmux.Source.t","source":{"file":"unix/libtmux_unix.mli","line":206,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Read the retained endpoint, daemon PID and connection generation without I/O."},"signatures":[{"raw":"val source : t -> Libtmux.Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Libtmux.Source.t"}],"slug":"libtmux_unix-client-source"},{"id":"Libtmux_unix.Client.split_pane","publicId":"Libtmux_unix.Client.split_pane","qualifiedName":"Libtmux_unix.Client.split_pane","name":"split_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":557,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. "],"declarations":[{"kind":"function","text":"val split_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":557,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Create a detached pane beside the target and return the IDs reported by tmux. Omitted `size` lets tmux choose the split; tmux rejects splits when no space remains."},"signatures":[{"raw":"val split_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"size","type":"Libtmux.Geometry.size","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"direction","type":"Libtmux.Geometry.direction","keywordOnly":true}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-split_pane"},{"id":"Libtmux_unix.Client.submit","publicId":"Libtmux_unix.Client.submit","qualifiedName":"Libtmux_unix.Client.submit","name":"submit","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":255,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Validate and reserve queue capacity without I/O. "],"declarations":[{"kind":"function","text":"val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":255,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Validate and reserve queue capacity without I/O."},"signatures":[{"raw":"val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"'a Libtmux.Command.t"}],"returns":"('a Operation.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-submit"},{"id":"Libtmux_unix.Client.subscribe","publicId":"Libtmux_unix.Client.subscribe","qualifiedName":"Libtmux_unix.Client.subscribe","name":"subscribe","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":213,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Acquire verified coverage of the pane's observed session/window. Choose\n the least session ID unless explicitly supplied. Reuse one lane per\n session. Defaults: 1 MiB and 1024 queued events per subscriber; at most 16\n subscribers and eight client lanes including commands. Reserve payload\n against the shared 32 MiB budget before admission.\n\n Queue capacities remain reserved while empty. Captures and reads need\n additional scratch space; their admission can return\n {!Libtmux.Error.Capacity} below the subscriber-count limit. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity}shared\n capacity guide} for the combined reservations and process slots.\n\n Data starts after admission's marker. Layout/membership changes end\n continuity conservatively. Overflow emits Gap then End, without blocking\n another subscriber. Blocking delivery advances during Subscription.next.\n There is no snapshot/history barrier or automatic recovery. "],"declarations":[{"kind":"function","text":"val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t ->\n Libtmux.Pane.t ->\n (Subscription.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":213,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Acquire verified coverage of the pane's observed session/window. Choose the least session ID unless explicitly supplied. Reuse one lane per session. Defaults: 1 MiB and 1024 queued events per subscriber; at most 16 subscribers and eight client lanes including commands. Reserve payload against the shared 32 MiB budget before admission.","body":"Queue capacities remain reserved while empty. Captures and reads need additional scratch space; their admission can return {!Libtmux.Error.Capacity} below the subscriber-count limit. See the [shared capacity guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity) for the combined reservations and process slots.\n\nData starts after admission's marker. Layout/membership changes end continuity conservatively. Overflow emits Gap then End, without blocking another subscriber. Blocking delivery advances during Subscription.next. There is no snapshot/history barrier or automatic recovery."},"signatures":[{"raw":"val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t -> Libtmux.Pane.t -> (Subscription.t, Libtmux.Error.t) result","params":[{"name":"session","type":"Libtmux.Session.target","optional":true,"keywordOnly":true},{"name":"capacity_bytes","type":"int","optional":true,"keywordOnly":true},{"name":"capacity_events","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"}],"returns":"(Subscription.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-subscribe"},{"id":"Libtmux_unix.Client.swap_panes","publicId":"Libtmux_unix.Client.swap_panes","qualifiedName":"Libtmux_unix.Client.swap_panes","name":"swap_panes","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":713,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. "],"declarations":[{"kind":"function","text":"val swap_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":713,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Exchange pane positions without exchanging their identities or running processes. Both targets must belong to the same bound generation."},"signatures":[{"raw":"val swap_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-swap_panes"},{"id":"Libtmux_unix.Client.switch_client_at","publicId":"Libtmux_unix.Client.switch_client_at","qualifiedName":"Libtmux_unix.Client.switch_client_at","name":"switch_client_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":317,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. "],"declarations":[{"kind":"function","text":"val switch_client_at :\n ?cancel:Cancellation.t ->\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":317,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Switch the client currently bearing this name to the bound session. Environment updates are disabled by default. This can move either a terminal client or a control client; it does not open a new terminal."},"signatures":[{"raw":"val switch_client_at :\n ?cancel:Cancellation.t ->\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"update_environment","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-switch_client_at"},{"id":"Libtmux_unix.Client.t","publicId":"Libtmux_unix.Client.t","qualifiedName":"Libtmux_unix.Client.t","name":"t","kind":"typealias","package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":187,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"unix/libtmux_unix.mli","line":187,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_unix-client-t"},{"id":"Libtmux_unix.Client.unlink_window_at","publicId":"Libtmux_unix.Client.unlink_window_at","qualifiedName":"Libtmux_unix.Client.unlink_window_at","name":"unlink_window_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":614,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Without [allow_kill], tmux rejects removal of the last link to a window.\n "],"declarations":[{"kind":"function","text":"val unlink_window_at :\n ?cancel:Cancellation.t ->\n ?allow_kill:bool ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":614,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Without `allow_kill`, tmux rejects removal of the last link to a window."},"signatures":[{"raw":"val unlink_window_at :\n ?cancel:Cancellation.t ->\n ?allow_kill:bool ->\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"allow_kill","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-unlink_window_at"},{"id":"Libtmux_unix.Client.unset_environment","publicId":"Libtmux_unix.Client.unset_environment","qualifiedName":"Libtmux_unix.Client.unset_environment","name":"unset_environment","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":403,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove the local entry, allowing a global value to apply to future panes.\n "],"declarations":[{"kind":"function","text":"val unset_environment :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Environment.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":403,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Remove the local entry, allowing a global value to apply to future panes."},"signatures":[{"raw":"val unset_environment :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-unset_environment"},{"id":"Libtmux_unix.Client.unset_option","publicId":"Libtmux_unix.Client.unset_option","qualifiedName":"Libtmux_unix.Client.unset_option","name":"unset_option","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":459,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. "],"declarations":[{"kind":"function","text":"val unset_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":459,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Remove a local override or one array element. Global built-ins reset to their tmux defaults; this does not recursively unset child overrides."},"signatures":[{"raw":"val unset_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-unset_option"},{"id":"Libtmux_unix.Client.version","publicId":"Libtmux_unix.Client.version","qualifiedName":"Libtmux_unix.Client.version","name":"version","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":210,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Read the bound daemon's observed version without I/O. "],"declarations":[{"kind":"function","text":"val version : t -> string","source":{"file":"unix/libtmux_unix.mli","line":210,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Read the bound daemon's observed version without I/O."},"signatures":[{"raw":"val version : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux_unix-client-version"},{"id":"Libtmux_unix.Client.wait_for","publicId":"Libtmux_unix.Client.wait_for","qualifiedName":"Libtmux_unix.Client.wait_for","name":"wait_for","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":371,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Wait on a named tmux semaphore using a dedicated bound lane. "],"declarations":[{"kind":"function","text":"val wait_for :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":371,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Wait on a named tmux semaphore using a dedicated bound lane."},"signatures":[{"raw":"val wait_for :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-wait_for"},{"id":"Libtmux_unix.Client.wait_for_text","publicId":"Libtmux_unix.Client.wait_for_text","qualifiedName":"Libtmux_unix.Client.wait_for_text","name":"wait_for_text","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":237,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Subscribe, capture the ordinary screen immediately, and recapture after\n output. Membership/overflow gaps trigger explicit fresh capture and new\n coverage in the same binding. Maximum pattern: 64 KiB. Success returns a\n capture that contains the text. Transient text between captures may be\n missed. Check the deadline between bounded acquisitions; in-flight I/O\n retains the client's exchange timeout. Release the temporary subscription\n without replacing an earlier error or cancellation; inspect {!cleanup} for\n secondary failures. Otherwise cleanup failure prevents success or renewed\n coverage. No capture/stream barrier exists. "],"declarations":[{"kind":"function","text":"val wait_for_text :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n text:string ->\n (Rendered.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":237,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Subscribe, capture the ordinary screen immediately, and recapture after output. Membership/overflow gaps trigger explicit fresh capture and new coverage in the same binding. Maximum pattern: 64 KiB. Success returns a capture that contains the text. Transient text between captures may be missed. Check the deadline between bounded acquisitions; in-flight I/O retains the client's exchange timeout. Release the temporary subscription without replacing an earlier error or cancellation; inspect {!cleanup} for secondary failures. Otherwise cleanup failure prevents success or renewed coverage. No capture/stream barrier exists."},"signatures":[{"raw":"val wait_for_text :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n ?scratch_dir:string ->\n t -> Libtmux.Pane.t -> text:string -> (Rendered.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"scratch_dir","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(Rendered.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-wait_for_text"},{"id":"Libtmux_unix.Client.zoom_pane","publicId":"Libtmux_unix.Client.zoom_pane","qualifiedName":"Libtmux_unix.Client.zoom_pane","name":"zoom_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":731,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Toggle the window's zoom state around this pane. "],"declarations":[{"kind":"function","text":"val zoom_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":731,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Toggle the window's zoom state around this pane."},"signatures":[{"raw":"val zoom_pane :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-zoom_pane"},{"id":"Libtmux_unix.Operation","publicId":"Libtmux_unix.Operation","qualifiedName":"Libtmux_unix.Operation","name":"Operation","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":116,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Retained outcomes remain inspectable after client closure, on the owning\n domain. Keep the handle from {!Client.submit} before {!Client.await}, then\n read {!Operation.inspect}. The\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/hook-recovery.md}hook\n recovery walkthrough} shows creation evidence after a later hook failure.\n"],"declarations":[{"kind":"module","text":"module Operation : sig\n type 'a t\n\n type cleanup_receipt = {\n cause : Libtmux.Error.t;\n owned_buffers : string list;\n created : Libtmux.Created.t list;\n }\n (** [created] retains IDs reported before a later hook or completion failure.\n It does not prove those resources still exist or authorize retry. *)\n\n type 'a state =\n | Queued\n | Not_started\n | Written\n | Acknowledged\n | Finished of ('a, Libtmux.Error.t) result\n | Outcome_unknown of cleanup_receipt\n\n val id : 'a t -> string\n\n val inspect : 'a t -> ('a state, Libtmux.Error.t) result\n (** No I/O. Results remain inspectable after client closure, on the owning\n domain. *)\n\n val cancel : 'a t -> (unit, Libtmux.Error.t) result\n (** Remove queued work before it is written. Admitted commands retain their\n owner and are drained by {!Client.await}; cancellation does not undo\n effects. Returns [Busy] while another blocking caller owns the client; use\n a {!Cancellation.t} token to interrupt that caller. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":116,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix","doc":{"summary":"Retained outcomes remain inspectable after client closure, on the owning domain. Keep the handle from {!Client.submit} before {!Client.await}, then read {!Operation.inspect}. The [hook recovery walkthrough](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/hook-recovery.md) shows creation evidence after a later hook failure."},"slug":"libtmux_unix-operation"},{"id":"Libtmux_unix.Operation.cancel","publicId":"Libtmux_unix.Operation.cancel","qualifiedName":"Libtmux_unix.Operation.cancel","name":"cancel","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":141,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove queued work before it is written. Admitted commands retain their\n owner and are drained by {!Client.await}; cancellation does not undo\n effects. Returns [Busy] while another blocking caller owns the client; use\n a {!Cancellation.t} token to interrupt that caller. "],"declarations":[{"kind":"function","text":"val cancel : 'a t -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":141,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation","doc":{"summary":"Remove queued work before it is written. Admitted commands retain their owner and are drained by {!Client.await}; cancellation does not undo effects. Returns `Busy` while another blocking caller owns the client; use a {!Cancellation.t} token to interrupt that caller."},"signatures":[{"raw":"val cancel : 'a t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-operation-cancel"},{"id":"Libtmux_unix.Operation.cleanup_receipt","publicId":"Libtmux_unix.Operation.cleanup_receipt","qualifiedName":"Libtmux_unix.Operation.cleanup_receipt","name":"cleanup_receipt","kind":"struct","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" [created] retains IDs reported before a later hook or completion failure.\n It does not prove those resources still exist or authorize retry. "],"declarations":[{"kind":"struct","text":"type cleanup_receipt = {\n cause : Libtmux.Error.t;\n owned_buffers : string list;\n created : Libtmux.Created.t list;\n }","source":{"file":"unix/libtmux_unix.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation","doc":{"summary":"`created` retains IDs reported before a later hook or completion failure. It does not prove those resources still exist or authorize retry."},"signatures":[{"raw":"type cleanup_receipt =\n {\n cause: Libtmux.Error.t ;\n owned_buffers: string list ;\n created: Libtmux.Created.t list }","params":[]}],"slug":"libtmux_unix-operation-cleanup_receipt"},{"id":"Libtmux_unix.Operation.cleanup_receipt.cause","publicId":"Libtmux_unix.Operation.cleanup_receipt.cause","name":"cause","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":120,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cause : Libtmux.Error.t;","source":{"file":"unix/libtmux_unix.mli","line":120,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation.cleanup_receipt","type":"Libtmux.Error.t","qualifiedName":"Libtmux_unix.Operation.cause","slug":"libtmux_unix-operation-cleanup_receipt-cause"},{"id":"Libtmux_unix.Operation.cleanup_receipt.created","publicId":"Libtmux_unix.Operation.cleanup_receipt.created","name":"created","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":122,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"created : Libtmux.Created.t list;","source":{"file":"unix/libtmux_unix.mli","line":122,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation.cleanup_receipt","type":"Libtmux.Created.t list","qualifiedName":"Libtmux_unix.Operation.created","slug":"libtmux_unix-operation-cleanup_receipt-created"},{"id":"Libtmux_unix.Operation.cleanup_receipt.owned_buffers","publicId":"Libtmux_unix.Operation.cleanup_receipt.owned_buffers","name":"owned_buffers","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":121,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"owned_buffers : string list;","source":{"file":"unix/libtmux_unix.mli","line":121,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation.cleanup_receipt","type":"string list","qualifiedName":"Libtmux_unix.Operation.owned_buffers","slug":"libtmux_unix-operation-cleanup_receipt-owned_buffers"},{"id":"Libtmux_unix.Operation.id","publicId":"Libtmux_unix.Operation.id","qualifiedName":"Libtmux_unix.Operation.id","name":"id","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : 'a t -> string","source":{"file":"unix/libtmux_unix.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation","signatures":[{"raw":"val id : 'a t -> string","params":[{"name":"arg1","type":"'a t"}],"returns":"string"}],"slug":"libtmux_unix-operation-id"},{"id":"Libtmux_unix.Operation.inspect","publicId":"Libtmux_unix.Operation.inspect","qualifiedName":"Libtmux_unix.Operation.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":137,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" No I/O. Results remain inspectable after client closure, on the owning\n domain. "],"declarations":[{"kind":"function","text":"val inspect : 'a t -> ('a state, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":137,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation","doc":{"summary":"No I/O. Results remain inspectable after client closure, on the owning domain."},"signatures":[{"raw":"val inspect : 'a t -> ('a state, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a t"}],"returns":"('a state, Libtmux.Error.t) result"}],"slug":"libtmux_unix-operation-inspect"},{"id":"Libtmux_unix.Operation.state","publicId":"Libtmux_unix.Operation.state","qualifiedName":"Libtmux_unix.Operation.state","name":"state","kind":"enum","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":127,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type 'a state =\n | Queued\n | Not_started\n | Written\n | Acknowledged\n | Finished of ('a, Libtmux.Error.t) result\n | Outcome_unknown of cleanup_receipt","source":{"file":"unix/libtmux_unix.mli","line":127,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation","signatures":[{"raw":"type 'a state =\n | Queued \n | Not_started \n | Written \n | Acknowledged \n | Finished of ('a, Libtmux.Error.t) result \n | Outcome_unknown of cleanup_receipt ","params":[]}],"slug":"libtmux_unix-operation-state"},{"id":"Libtmux_unix.Operation.state.Acknowledged","publicId":"Libtmux_unix.Operation.state.Acknowledged","name":"Acknowledged","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Acknowledged","source":{"file":"unix/libtmux_unix.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation.state","variant":"unit","qualifiedName":"Libtmux_unix.Operation.Acknowledged","slug":"libtmux_unix-operation-state-acknowledged"},{"id":"Libtmux_unix.Operation.state.Finished","publicId":"Libtmux_unix.Operation.state.Finished","name":"Finished","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":132,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Finished of ('a, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":132,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation.state","variant":"tuple","qualifiedName":"Libtmux_unix.Operation.Finished","slug":"libtmux_unix-operation-state-finished"},{"id":"Libtmux_unix.Operation.state.Not_started","publicId":"Libtmux_unix.Operation.state.Not_started","name":"Not_started","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Not_started","source":{"file":"unix/libtmux_unix.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation.state","variant":"unit","qualifiedName":"Libtmux_unix.Operation.Not_started","slug":"libtmux_unix-operation-state-not_started"},{"id":"Libtmux_unix.Operation.state.Outcome_unknown","publicId":"Libtmux_unix.Operation.state.Outcome_unknown","name":"Outcome_unknown","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":133,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Outcome_unknown of cleanup_receipt","source":{"file":"unix/libtmux_unix.mli","line":133,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation.state","variant":"tuple","qualifiedName":"Libtmux_unix.Operation.Outcome_unknown","slug":"libtmux_unix-operation-state-outcome_unknown"},{"id":"Libtmux_unix.Operation.state.Queued","publicId":"Libtmux_unix.Operation.state.Queued","name":"Queued","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":128,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Queued","source":{"file":"unix/libtmux_unix.mli","line":128,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation.state","variant":"unit","qualifiedName":"Libtmux_unix.Operation.Queued","slug":"libtmux_unix-operation-state-queued"},{"id":"Libtmux_unix.Operation.state.Written","publicId":"Libtmux_unix.Operation.state.Written","name":"Written","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":130,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Written","source":{"file":"unix/libtmux_unix.mli","line":130,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation.state","variant":"unit","qualifiedName":"Libtmux_unix.Operation.Written","slug":"libtmux_unix-operation-state-written"},{"id":"Libtmux_unix.Operation.t","publicId":"Libtmux_unix.Operation.t","qualifiedName":"Libtmux_unix.Operation.t","name":"t","kind":"typealias","package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":117,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type 'a t","source":{"file":"unix/libtmux_unix.mli","line":117,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Operation","signatures":[{"raw":"type 'a t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_unix-operation-t"},{"id":"Libtmux_unix.Rendered","publicId":"Libtmux_unix.Rendered","qualifiedName":"Libtmux_unix.Rendered","name":"Rendered","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":60,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Blocking native Linux transport. No Eio scheduler is started. "],"declarations":[{"kind":"module","text":"module Rendered = Libtmux.Captured_text","source":{"file":"unix/libtmux_unix.mli","line":60,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix","doc":{"summary":"Blocking native Linux transport. No Eio scheduler is started."},"exportedFrom":"Libtmux.Captured_text","slug":"libtmux_unix-rendered"},{"id":"Libtmux_unix.Subscription","publicId":"Libtmux_unix.Subscription","qualifiedName":"Libtmux_unix.Subscription","name":"Subscription","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":150,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Bounded future-byte observation with Data/Gap/End and local cursors. Polling\n is local; waiting and admission belong to the backend. "],"declarations":[{"kind":"module","text":"module Subscription : sig\n type t\n\n val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result\n (** Remove a queued event without I/O. Owning domain only, including after\n client closure. [None] means no queued event, not proof of continuity. *)\n\n val next :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t ->\n (Libtmux.Output.event option, Libtmux.Error.t) result\n (** Pump all subscription lanes until one event is available. Default deadline\n is one second. [None] follows a consumed End. A deadline keeps the\n subscription active; cancellation closes it and raises Cancelled. *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** End an active subscription with Cancelled and discard pending data.\n Preserve an already ended subscription's terminal reason. Release and reap\n an unused lane; later calls retain cleanup failures. Does not stop the\n daemon. {!poll} can still read the terminal event. *)\n\n val wait_for_bytes :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t ->\n text:string ->\n (Libtmux.Output.cursor, Libtmux.Output.wait_error) result\n (** Consume future bytes until the nonempty pattern matches, including across\n Data boundaries. Maximum pattern: 64 KiB. Return the cursor at the match's\n end within its consumed event. Gaps stop matching; no rendered or earlier\n output is searched. Timeout leaves the subscription active. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":150,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix","doc":{"summary":"Bounded future-byte observation with Data/Gap/End and local cursors. Polling is local; waiting and admission belong to the backend."},"slug":"libtmux_unix-subscription"},{"id":"Libtmux_unix.Subscription.close","publicId":"Libtmux_unix.Subscription.close","qualifiedName":"Libtmux_unix.Subscription.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":166,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" End an active subscription with Cancelled and discard pending data.\n Preserve an already ended subscription's terminal reason. Release and reap\n an unused lane; later calls retain cleanup failures. Does not stop the\n daemon. {!poll} can still read the terminal event. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":166,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Subscription","doc":{"summary":"End an active subscription with Cancelled and discard pending data. Preserve an already ended subscription's terminal reason. Release and reap an unused lane; later calls retain cleanup failures. Does not stop the daemon. {!poll} can still read the terminal event."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-subscription-close"},{"id":"Libtmux_unix.Subscription.next","publicId":"Libtmux_unix.Subscription.next","qualifiedName":"Libtmux_unix.Subscription.next","name":"next","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":157,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Pump all subscription lanes until one event is available. Default deadline\n is one second. [None] follows a consumed End. A deadline keeps the\n subscription active; cancellation closes it and raises Cancelled. "],"declarations":[{"kind":"function","text":"val next :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t ->\n (Libtmux.Output.event option, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":157,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Subscription","doc":{"summary":"Pump all subscription lanes until one event is available. Default deadline is one second. `None` follows a consumed End. A deadline keeps the subscription active; cancellation closes it and raises Cancelled."},"signatures":[{"raw":"val next :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t -> (Libtmux.Output.event option, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"(Libtmux.Output.event option, Libtmux.Error.t) result"}],"slug":"libtmux_unix-subscription-next"},{"id":"Libtmux_unix.Subscription.poll","publicId":"Libtmux_unix.Subscription.poll","qualifiedName":"Libtmux_unix.Subscription.poll","name":"poll","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":153,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Remove a queued event without I/O. Owning domain only, including after\n client closure. [None] means no queued event, not proof of continuity. "],"declarations":[{"kind":"function","text":"val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":153,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Subscription","doc":{"summary":"Remove a queued event without I/O. Owning domain only, including after client closure. `None` means no queued event, not proof of continuity."},"signatures":[{"raw":"val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(Libtmux.Output.event option, Libtmux.Error.t) result"}],"slug":"libtmux_unix-subscription-poll"},{"id":"Libtmux_unix.Subscription.t","publicId":"Libtmux_unix.Subscription.t","qualifiedName":"Libtmux_unix.Subscription.t","name":"t","kind":"typealias","package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":151,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"unix/libtmux_unix.mli","line":151,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Subscription","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_unix-subscription-t"},{"id":"Libtmux_unix.Subscription.wait_for_bytes","publicId":"Libtmux_unix.Subscription.wait_for_bytes","qualifiedName":"Libtmux_unix.Subscription.wait_for_bytes","name":"wait_for_bytes","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":172,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Consume future bytes until the nonempty pattern matches, including across\n Data boundaries. Maximum pattern: 64 KiB. Return the cursor at the match's\n end within its consumed event. Gaps stop matching; no rendered or earlier\n output is searched. Timeout leaves the subscription active. "],"declarations":[{"kind":"function","text":"val wait_for_bytes :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t ->\n text:string ->\n (Libtmux.Output.cursor, Libtmux.Output.wait_error) result","source":{"file":"unix/libtmux_unix.mli","line":172,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Subscription","doc":{"summary":"Consume future bytes until the nonempty pattern matches, including across Data boundaries. Maximum pattern: 64 KiB. Return the cursor at the match's end within its consumed event. Gaps stop matching; no rendered or earlier output is searched. Timeout leaves the subscription active."},"signatures":[{"raw":"val wait_for_bytes :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t ->\n text:string -> (Libtmux.Output.cursor, Libtmux.Output.wait_error) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(Libtmux.Output.cursor, Libtmux.Output.wait_error) result"}],"slug":"libtmux_unix-subscription-wait_for_bytes"},{"id":"Libtmux_unix.Terminal","publicId":"Libtmux_unix.Terminal","qualifiedName":"Libtmux_unix.Terminal","name":"Terminal","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":81,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Interactive attachment using borrowed application streams. This utility\n addresses the current daemon explicitly and does not reuse captured targets.\n"],"declarations":[{"kind":"module","text":"module Terminal : sig\n val attach_current :\n ?cancel:Cancellation.t ->\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:Unix.file_descr ->\n ?stdout:Unix.file_descr ->\n ?stderr:Unix.file_descr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t ->\n (unit, Libtmux.Error.t) result\n (** Run an interactive terminal client until it exits. Select the exact\n session ID on the daemon currently listening at [endpoint]; this is\n explicitly unbound and accepts no captured target. No retry or daemon\n startup occurs. A successful result proves client exit, not continued\n attachment. Diagnostics go to [stderr].\n\n Descriptors default to the application's standard streams and remain\n caller-owned. [stdin] must be a terminal. Environment updates and\n read-only mode are disabled by default; inherited [TMUX] and [TMUX_PANE]\n are removed. Cancellation terminates and reaps this terminal client,\n leaves the daemon running, then raises {!Cancellation.Cancelled}. TERM\n gets 200 ms of cooperative grace before KILL and reaping. Scheduling and\n uninterruptible kernel work can add time. Supply [cleanup] before the call\n to retain secondary failures after cancellation. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":81,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix","doc":{"summary":"Interactive attachment using borrowed application streams. This utility addresses the current daemon explicitly and does not reuse captured targets."},"slug":"libtmux_unix-terminal"},{"id":"Libtmux_unix.Terminal.attach_current","publicId":"Libtmux_unix.Terminal.attach_current","qualifiedName":"Libtmux_unix.Terminal.attach_current","name":"attach_current","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":82,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Run an interactive terminal client until it exits. Select the exact\n session ID on the daemon currently listening at [endpoint]; this is\n explicitly unbound and accepts no captured target. No retry or daemon\n startup occurs. A successful result proves client exit, not continued\n attachment. Diagnostics go to [stderr].\n\n Descriptors default to the application's standard streams and remain\n caller-owned. [stdin] must be a terminal. Environment updates and\n read-only mode are disabled by default; inherited [TMUX] and [TMUX_PANE]\n are removed. Cancellation terminates and reaps this terminal client,\n leaves the daemon running, then raises {!Cancellation.Cancelled}. TERM\n gets 200 ms of cooperative grace before KILL and reaping. Scheduling and\n uninterruptible kernel work can add time. Supply [cleanup] before the call\n to retain secondary failures after cancellation. "],"declarations":[{"kind":"function","text":"val attach_current :\n ?cancel:Cancellation.t ->\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:Unix.file_descr ->\n ?stdout:Unix.file_descr ->\n ?stderr:Unix.file_descr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":82,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Terminal","doc":{"summary":"Run an interactive terminal client until it exits. Select the exact session ID on the daemon currently listening at `endpoint`; this is explicitly unbound and accepts no captured target. No retry or daemon startup occurs. A successful result proves client exit, not continued attachment. Diagnostics go to `stderr`.","body":"Descriptors default to the application's standard streams and remain caller-owned. `stdin` must be a terminal. Environment updates and read-only mode are disabled by default; inherited `TMUX` and `TMUX_PANE` are removed. Cancellation terminates and reaps this terminal client, leaves the daemon running, then raises {!Cancellation.Cancelled}. TERM gets 200 ms of cooperative grace before KILL and reaping. Scheduling and uninterruptible kernel work can add time. Supply `cleanup` before the call to retain secondary failures after cancellation."},"signatures":[{"raw":"val attach_current :\n ?cancel:Cancellation.t ->\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:Unix.file_descr ->\n ?stdout:Unix.file_descr ->\n ?stderr:Unix.file_descr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"read_only","type":"bool","optional":true,"keywordOnly":true},{"name":"update_environment","type":"bool","optional":true,"keywordOnly":true},{"name":"stdin","type":"Unix.file_descr","optional":true,"keywordOnly":true},{"name":"stdout","type":"Unix.file_descr","optional":true,"keywordOnly":true},{"name":"stderr","type":"Unix.file_descr","optional":true,"keywordOnly":true},{"name":"arg1","type":"Libtmux.Endpoint.t"},{"name":"session","type":"Libtmux.Session.Id.t","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-terminal-attach_current"},{"id":"Libtmux_unix.Workspace","publicId":"Libtmux_unix.Workspace","qualifiedName":"Libtmux_unix.Workspace","name":"Workspace","kind":"module","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":772,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Apply validated plans with blocking I/O and scoped cancellation tokens.\n Execution handles retain journals and borrow existing clients; bootstrap\n handles own their newly bound clients without owning the daemon. "],"declarations":[{"kind":"module","text":"module Workspace : sig\n type t\n\n val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result\n (** Allocate a generation-bound execution handle without I/O. The caller owns\n the supplied client; closing this handle leaves that client open. *)\n\n val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n Libtmux_workspace.Plan.t ->\n (t, Libtmux.Error.t) result\n (** Allocate a handle for a missing-endpoint plan. Awaiting it starts control\n new-session and binds the same connection. The handle owns its new client;\n it never acquires ownership of the daemon. *)\n\n val await :\n ?cancel:Cancellation.t ->\n ?compensate_on_failure:bool ->\n t ->\n (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result\n (** Apply steps at most once per execution handle. Expected failures return\n retained receipts. On initial application, [compensate_on_failure]\n defaults to [true], attempting removal of proven newly created panes after\n failure or cancellation. Passing [false] skips that compensation.\n Cancellation propagates after recording progress and at most 500 ms of\n protected compensation; use {!inspect} afterward. *)\n\n val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result\n (** Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O,\n on the owning domain, including after execution or client closure. Pending\n steps can settle as the client progresses; earlier receipts keep their own\n step and cleanup arrays. *)\n\n val client : t -> Client.t option\n (** Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent\n actions or recovery. {!close} releases a client owned by this workspace\n execution handle. *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** Release an owned client through {!Client.close}. Active await returns\n Busy. Completed journals remain readable after close. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":772,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix","doc":{"summary":"Apply validated plans with blocking I/O and scoped cancellation tokens. Execution handles retain journals and borrow existing clients; bootstrap handles own their newly bound clients without owning the daemon."},"slug":"libtmux_unix-workspace"},{"id":"Libtmux_unix.Workspace.await","publicId":"Libtmux_unix.Workspace.await","qualifiedName":"Libtmux_unix.Workspace.await","name":"await","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":790,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Apply steps at most once per execution handle. Expected failures return\n retained receipts. On initial application, [compensate_on_failure]\n defaults to [true], attempting removal of proven newly created panes after\n failure or cancellation. Passing [false] skips that compensation.\n Cancellation propagates after recording progress and at most 500 ms of\n protected compensation; use {!inspect} afterward. "],"declarations":[{"kind":"function","text":"val await :\n ?cancel:Cancellation.t ->\n ?compensate_on_failure:bool ->\n t ->\n (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":790,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Apply steps at most once per execution handle. Expected failures return retained receipts. On initial application, `compensate_on_failure` defaults to `true`, attempting removal of proven newly created panes after failure or cancellation. Passing `false` skips that compensation. Cancellation propagates after recording progress and at most 500 ms of protected compensation; use {!inspect} afterward.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet checked pp = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" pp error)\n\nlet get result = checked Error.pp result\n\nlet protect ~finally use =\n match use () with\n | value ->\n finally ();\n value\n | exception error ->\n let backtrace = Printexc.get_raw_backtrace () in\n (try finally ()\n with cleanup ->\n Format.eprintf \"cleanup failed: %s@.\" (Printexc.to_string cleanup));\n Printexc.raise_with_backtrace error backtrace\n\n(* docs:begin bootstrap *)\nlet bootstrap ~binary ~version ~directory endpoint =\n let spawn = Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\" ] }) in\n let config =\n Config.make ~directory ~session:\"bootstrap-demo\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n |> checked Config.pp_error\n in\n let plan =\n Plan.make ~endpoint ~version ~observed:None config |> checked Plan.pp_error\n in\n get (Workspace.submit_bootstrap ~binary plan)\n(* docs:end bootstrap *)\n\nlet require_success (receipt : Execution.receipt) =\n if receipt.status <> Execution.Succeeded then (\n Format.eprintf \"workspace %s did not complete@.\" receipt.operation_id;\n (match receipt.status with\n | Execution.Rejected error -> Format.eprintf \"%a@.\" Plan.pp_error error\n | Execution.Unavailable error -> Format.eprintf \"%a@.\" Error.pp error\n | _ -> ());\n Iarray.iter\n (fun (step : Execution.step) ->\n match step.status with\n | Execution.Failed error | Execution.Uncertain error ->\n Format.eprintf \"step %d: %a@.\" step.index Error.pp error\n | _ -> ())\n receipt.steps;\n Option.iter\n (fun error -> Format.eprintf \"compensation: %a@.\" Error.pp error)\n receipt.cleanup_error;\n Iarray.iter\n (fun (cleanup : Execution.cleanup) ->\n match cleanup.outcome with\n | Ok () -> ()\n | Error error -> Format.eprintf \"cleanup: %a@.\" Error.pp error)\n receipt.cleanup;\n failwith \"bootstrap incomplete; no automatic retry\")\n\nlet local_version binary =\n let input = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n protect\n ~finally:(fun () ->\n if Unix.close_process_in input <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line input))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n String.sub version 5 (String.length version - 5)\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let execution =\n bootstrap ~binary:wrapper ~version:(local_version binary) ~directory\n (Endpoint.socket_path socket)\n in\n (* docs:begin await-bootstrap *)\n let snapshot =\n protect\n ~finally:(fun () -> get (Workspace.close execution))\n (fun () ->\n let receipt = get (Workspace.await execution) in\n require_success receipt;\n let client = Option.get (Workspace.client execution) in\n get (Client.capture client))\n (* docs:end await-bootstrap *)\n in\n assert (Iarray.length (Snapshot.sessions snapshot) = 1);\n assert (Iarray.length (Snapshot.windows snapshot) = 1);\n assert (Iarray.length (Snapshot.panes snapshot) = 1);\n assert (\n Session.name (Iarray.get (Snapshot.sessions snapshot) 0)\n = \"bootstrap-demo\");\n assert (Window.name (Iarray.get (Snapshot.windows snapshot) 0) = \"editor\");\n Printf.printf \"socket=%s\\n\" socket;\n print_endline \"bootstrapped: 1 session, 1 window, 1 pane\")\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_bootstrap.ml","intro":"Start a private server and capture its first session. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_bootstrap.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"bootstrapped: 1 session, 1 window, 1 pane\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val await :\n ?cancel:Cancellation.t ->\n ?compensate_on_failure:bool ->\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"compensate_on_failure","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"(Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result"}],"slug":"libtmux_unix-workspace-await"},{"id":"Libtmux_unix.Workspace.client","publicId":"Libtmux_unix.Workspace.client","qualifiedName":"Libtmux_unix.Workspace.client","name":"client","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":809,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent\n actions or recovery. {!close} releases a client owned by this workspace\n execution handle. "],"declarations":[{"kind":"function","text":"val client : t -> Client.t option","source":{"file":"unix/libtmux_unix.mli","line":809,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent actions or recovery. {!close} releases a client owned by this workspace execution handle.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet checked pp = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" pp error)\n\nlet get result = checked Error.pp result\n\nlet protect ~finally use =\n match use () with\n | value ->\n finally ();\n value\n | exception error ->\n let backtrace = Printexc.get_raw_backtrace () in\n (try finally ()\n with cleanup ->\n Format.eprintf \"cleanup failed: %s@.\" (Printexc.to_string cleanup));\n Printexc.raise_with_backtrace error backtrace\n\n(* docs:begin bootstrap *)\nlet bootstrap ~binary ~version ~directory endpoint =\n let spawn = Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\" ] }) in\n let config =\n Config.make ~directory ~session:\"bootstrap-demo\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n |> checked Config.pp_error\n in\n let plan =\n Plan.make ~endpoint ~version ~observed:None config |> checked Plan.pp_error\n in\n get (Workspace.submit_bootstrap ~binary plan)\n(* docs:end bootstrap *)\n\nlet require_success (receipt : Execution.receipt) =\n if receipt.status <> Execution.Succeeded then (\n Format.eprintf \"workspace %s did not complete@.\" receipt.operation_id;\n (match receipt.status with\n | Execution.Rejected error -> Format.eprintf \"%a@.\" Plan.pp_error error\n | Execution.Unavailable error -> Format.eprintf \"%a@.\" Error.pp error\n | _ -> ());\n Iarray.iter\n (fun (step : Execution.step) ->\n match step.status with\n | Execution.Failed error | Execution.Uncertain error ->\n Format.eprintf \"step %d: %a@.\" step.index Error.pp error\n | _ -> ())\n receipt.steps;\n Option.iter\n (fun error -> Format.eprintf \"compensation: %a@.\" Error.pp error)\n receipt.cleanup_error;\n Iarray.iter\n (fun (cleanup : Execution.cleanup) ->\n match cleanup.outcome with\n | Ok () -> ()\n | Error error -> Format.eprintf \"cleanup: %a@.\" Error.pp error)\n receipt.cleanup;\n failwith \"bootstrap incomplete; no automatic retry\")\n\nlet local_version binary =\n let input = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n protect\n ~finally:(fun () ->\n if Unix.close_process_in input <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line input))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n String.sub version 5 (String.length version - 5)\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let execution =\n bootstrap ~binary:wrapper ~version:(local_version binary) ~directory\n (Endpoint.socket_path socket)\n in\n (* docs:begin await-bootstrap *)\n let snapshot =\n protect\n ~finally:(fun () -> get (Workspace.close execution))\n (fun () ->\n let receipt = get (Workspace.await execution) in\n require_success receipt;\n let client = Option.get (Workspace.client execution) in\n get (Client.capture client))\n (* docs:end await-bootstrap *)\n in\n assert (Iarray.length (Snapshot.sessions snapshot) = 1);\n assert (Iarray.length (Snapshot.windows snapshot) = 1);\n assert (Iarray.length (Snapshot.panes snapshot) = 1);\n assert (\n Session.name (Iarray.get (Snapshot.sessions snapshot) 0)\n = \"bootstrap-demo\");\n assert (Window.name (Iarray.get (Snapshot.windows snapshot) 0) = \"editor\");\n Printf.printf \"socket=%s\\n\" socket;\n print_endline \"bootstrapped: 1 session, 1 window, 1 pane\")\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_bootstrap.ml","intro":"Start a private server and capture its first session. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_bootstrap.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"bootstrapped: 1 session, 1 window, 1 pane\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val client : t -> Client.t option","params":[{"name":"arg1","type":"t"}],"returns":"Client.t option"}],"slug":"libtmux_unix-workspace-client"},{"id":"Libtmux_unix.Workspace.close","publicId":"Libtmux_unix.Workspace.close","qualifiedName":"Libtmux_unix.Workspace.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":814,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Release an owned client through {!Client.close}. Active await returns\n Busy. Completed journals remain readable after close. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":814,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Release an owned client through {!Client.close}. Active await returns Busy. Completed journals remain readable after close."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-workspace-close"},{"id":"Libtmux_unix.Workspace.inspect","publicId":"Libtmux_unix.Workspace.inspect","qualifiedName":"Libtmux_unix.Workspace.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":802,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O,\n on the owning domain, including after execution or client closure. Pending\n steps can settle as the client progresses; earlier receipts keep their own\n step and cleanup arrays. "],"declarations":[{"kind":"function","text":"val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":802,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O, on the owning domain, including after execution or client closure. Pending steps can settle as the client progresses; earlier receipts keep their own step and cleanup arrays."},"signatures":[{"raw":"val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result"}],"slug":"libtmux_unix-workspace-inspect"},{"id":"Libtmux_unix.Workspace.submit","publicId":"Libtmux_unix.Workspace.submit","qualifiedName":"Libtmux_unix.Workspace.submit","name":"submit","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":775,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Allocate a generation-bound execution handle without I/O. The caller owns\n the supplied client; closing this handle leaves that client open. "],"declarations":[{"kind":"function","text":"val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":775,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Allocate a generation-bound execution handle without I/O. The caller owns the supplied client; closing this handle leaves that client open."},"signatures":[{"raw":"val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"Client.t"},{"name":"arg2","type":"Libtmux_workspace.Plan.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-workspace-submit"},{"id":"Libtmux_unix.Workspace.submit_bootstrap","publicId":"Libtmux_unix.Workspace.submit_bootstrap","qualifiedName":"Libtmux_unix.Workspace.submit_bootstrap","name":"submit_bootstrap","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":780,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Allocate a handle for a missing-endpoint plan. Awaiting it starts control\n new-session and binds the same connection. The handle owns its new client;\n it never acquires ownership of the daemon. "],"declarations":[{"kind":"function","text":"val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n Libtmux_workspace.Plan.t ->\n (t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":780,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Allocate a handle for a missing-endpoint plan. Awaiting it starts control new-session and binds the same connection. The handle owns its new client; it never acquires ownership of the daemon.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet checked pp = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" pp error)\n\nlet get result = checked Error.pp result\n\nlet protect ~finally use =\n match use () with\n | value ->\n finally ();\n value\n | exception error ->\n let backtrace = Printexc.get_raw_backtrace () in\n (try finally ()\n with cleanup ->\n Format.eprintf \"cleanup failed: %s@.\" (Printexc.to_string cleanup));\n Printexc.raise_with_backtrace error backtrace\n\n(* docs:begin bootstrap *)\nlet bootstrap ~binary ~version ~directory endpoint =\n let spawn = Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\" ] }) in\n let config =\n Config.make ~directory ~session:\"bootstrap-demo\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n |> checked Config.pp_error\n in\n let plan =\n Plan.make ~endpoint ~version ~observed:None config |> checked Plan.pp_error\n in\n get (Workspace.submit_bootstrap ~binary plan)\n(* docs:end bootstrap *)\n\nlet require_success (receipt : Execution.receipt) =\n if receipt.status <> Execution.Succeeded then (\n Format.eprintf \"workspace %s did not complete@.\" receipt.operation_id;\n (match receipt.status with\n | Execution.Rejected error -> Format.eprintf \"%a@.\" Plan.pp_error error\n | Execution.Unavailable error -> Format.eprintf \"%a@.\" Error.pp error\n | _ -> ());\n Iarray.iter\n (fun (step : Execution.step) ->\n match step.status with\n | Execution.Failed error | Execution.Uncertain error ->\n Format.eprintf \"step %d: %a@.\" step.index Error.pp error\n | _ -> ())\n receipt.steps;\n Option.iter\n (fun error -> Format.eprintf \"compensation: %a@.\" Error.pp error)\n receipt.cleanup_error;\n Iarray.iter\n (fun (cleanup : Execution.cleanup) ->\n match cleanup.outcome with\n | Ok () -> ()\n | Error error -> Format.eprintf \"cleanup: %a@.\" Error.pp error)\n receipt.cleanup;\n failwith \"bootstrap incomplete; no automatic retry\")\n\nlet local_version binary =\n let input = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n protect\n ~finally:(fun () ->\n if Unix.close_process_in input <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line input))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n String.sub version 5 (String.length version - 5)\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let execution =\n bootstrap ~binary:wrapper ~version:(local_version binary) ~directory\n (Endpoint.socket_path socket)\n in\n (* docs:begin await-bootstrap *)\n let snapshot =\n protect\n ~finally:(fun () -> get (Workspace.close execution))\n (fun () ->\n let receipt = get (Workspace.await execution) in\n require_success receipt;\n let client = Option.get (Workspace.client execution) in\n get (Client.capture client))\n (* docs:end await-bootstrap *)\n in\n assert (Iarray.length (Snapshot.sessions snapshot) = 1);\n assert (Iarray.length (Snapshot.windows snapshot) = 1);\n assert (Iarray.length (Snapshot.panes snapshot) = 1);\n assert (\n Session.name (Iarray.get (Snapshot.sessions snapshot) 0)\n = \"bootstrap-demo\");\n assert (Window.name (Iarray.get (Snapshot.windows snapshot) 0) = \"editor\");\n Printf.printf \"socket=%s\\n\" socket;\n print_endline \"bootstrapped: 1 session, 1 window, 1 pane\")\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/205dfda49742592b479247049d186956e4a4cfe9/examples/showcase_bootstrap.ml","intro":"Start a private server and capture its first session. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_bootstrap.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"bootstrapped: 1 session, 1 window, 1 pane\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","params":[{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"Libtmux_workspace.Plan.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-workspace-submit_bootstrap"},{"id":"Libtmux_unix.Workspace.t","publicId":"Libtmux_unix.Workspace.t","qualifiedName":"Libtmux_unix.Workspace.t","name":"t","kind":"typealias","package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":773,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"unix/libtmux_unix.mli","line":773,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_unix.Workspace","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_unix-workspace-t"},{"id":"Libtmux_workspace","publicId":"Libtmux_workspace","qualifiedName":"Libtmux_workspace","name":"Libtmux_workspace","kind":"module","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":1,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" {!Config} validates workspace descriptions and {!Plan} previews their\n actions without I/O. {!Execution} delegates effects to an explicit executor\n and retains a recovery journal. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/workspaces.md}workspace\n guide} for JSON loading, preview, apply and receipt inspection. "],"declarations":[{"kind":"module","text":"","source":{"file":"workspace/libtmux_workspace.mli","line":1,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"doc":{"summary":"{!Config} validates workspace descriptions and {!Plan} previews their actions without I/O. {!Execution} delegates effects to an explicit executor and retains a recovery journal. See the [workspace guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/workspaces.md) for JSON loading, preview, apply and receipt inspection."},"slug":"libtmux_workspace"},{"id":"Libtmux_workspace.Config","publicId":"Libtmux_workspace.Config","qualifiedName":"Libtmux_workspace.Config","name":"Config","kind":"module","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":10,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Validate native workspace values without contacting tmux or reading the\n filesystem. Relative directories resolve against the document directory;\n only declared variables participate in expansion. "],"declarations":[{"kind":"module","text":"module Config : sig\n type error = { path : string; message : string }\n\n val pp_error : Format.formatter -> error -> unit\n\n type setting = {\n name : string;\n index : int option;\n value : Libtmux.Options.scalar;\n }\n\n type pane = {\n spawn : Libtmux.Spawn.t;\n options : setting list;\n startup : string list;\n direction : Libtmux.Geometry.direction;\n size : Libtmux.Geometry.size option;\n }\n\n type window = {\n name : string;\n cwd : string option;\n environment : (string * string) list;\n options : setting list;\n panes : pane list;\n layout : Libtmux.Layout.t option;\n }\n\n type t\n\n val pane :\n ?spawn:Libtmux.Spawn.t ->\n ?options:setting list ->\n ?startup:string list ->\n ?direction:Libtmux.Geometry.direction ->\n ?size:Libtmux.Geometry.size ->\n unit ->\n pane\n\n val window :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?layout:Libtmux.Layout.t ->\n name:string ->\n pane list ->\n window\n (** Builders are unchecked descriptions; {!make} validates the whole document.\n *)\n\n val make :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?variables:(string * string) list ->\n ?width:int ->\n ?height:int ->\n directory:string ->\n session:string ->\n window list ->\n (t, error) result\n (** Resolve relative working directories against the absolute document\n directory. Explicit variables expand [${NAME}] in directories only; they\n never read the process environment. Cycles and unknown names fail. Command\n arguments, shell code, startup text and environment values remain literal.\n\n At most 64 windows, 256 total panes and 1 MiB of text are accepted. Names\n and settings must be unique in their scope. No filesystem is consulted. *)\n\n val session : t -> string\n val windows : t -> window Iarray.t\n val environment : t -> (string * string) list\n val options : t -> setting list\n val dimensions : t -> int * int\nend","source":{"file":"workspace/libtmux_workspace.mli","line":10,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace","doc":{"summary":"Validate native workspace values without contacting tmux or reading the filesystem. Relative directories resolve against the document directory; only declared variables participate in expansion."},"slug":"libtmux_workspace-config"},{"id":"Libtmux_workspace.Config.dimensions","publicId":"Libtmux_workspace.Config.dimensions","qualifiedName":"Libtmux_workspace.Config.dimensions","name":"dimensions","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":83,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val dimensions : t -> int * int","source":{"file":"workspace/libtmux_workspace.mli","line":83,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val dimensions : t -> int * int","params":[{"name":"arg1","type":"t"}],"returns":"int * int"}],"slug":"libtmux_workspace-config-dimensions"},{"id":"Libtmux_workspace.Config.environment","publicId":"Libtmux_workspace.Config.environment","qualifiedName":"Libtmux_workspace.Config.environment","name":"environment","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":81,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val environment : t -> (string * string) list","source":{"file":"workspace/libtmux_workspace.mli","line":81,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val environment : t -> (string * string) list","params":[{"name":"arg1","type":"t"}],"returns":"(string * string) list"}],"slug":"libtmux_workspace-config-environment"},{"id":"Libtmux_workspace.Config.error","publicId":"Libtmux_workspace.Config.error","qualifiedName":"Libtmux_workspace.Config.error","name":"error","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type error = { path : string; message : string }","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"type error = {\n path: string ;\n message: string }","params":[]}],"slug":"libtmux_workspace-config-error"},{"id":"Libtmux_workspace.Config.error.message","publicId":"Libtmux_workspace.Config.error.message","name":"message","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"message : string","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.error","type":"string","qualifiedName":"Libtmux_workspace.Config.message","slug":"libtmux_workspace-config-error-message"},{"id":"Libtmux_workspace.Config.error.path","publicId":"Libtmux_workspace.Config.error.path","name":"path","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"path : string;","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.error","type":"string","qualifiedName":"Libtmux_workspace.Config.path","slug":"libtmux_workspace-config-error-path"},{"id":"Libtmux_workspace.Config.make","publicId":"Libtmux_workspace.Config.make","qualifiedName":"Libtmux_workspace.Config.make","name":"make","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":60,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Resolve relative working directories against the absolute document\n directory. Explicit variables expand [${NAME}] in directories only; they\n never read the process environment. Cycles and unknown names fail. Command\n arguments, shell code, startup text and environment values remain literal.\n\n At most 64 windows, 256 total panes and 1 MiB of text are accepted. Names\n and settings must be unique in their scope. No filesystem is consulted. "],"declarations":[{"kind":"function","text":"val make :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?variables:(string * string) list ->\n ?width:int ->\n ?height:int ->\n directory:string ->\n session:string ->\n window list ->\n (t, error) result","source":{"file":"workspace/libtmux_workspace.mli","line":60,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","doc":{"summary":"Resolve relative working directories against the absolute document directory. Explicit variables expand `${NAME}` in directories only; they never read the process environment. Cycles and unknown names fail. Command arguments, shell code, startup text and environment values remain literal.","body":"At most 64 windows, 256 total panes and 1 MiB of text are accepted. Names and settings must be unique in their scope. No filesystem is consulted."},"signatures":[{"raw":"val make :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?variables:(string * string) list ->\n ?width:int ->\n ?height:int ->\n directory:string -> session:string -> window list -> (t, error) result","params":[{"name":"cwd","type":"string","optional":true,"keywordOnly":true},{"name":"environment","type":"(string * string) list","optional":true,"keywordOnly":true},{"name":"options","type":"setting list","optional":true,"keywordOnly":true},{"name":"variables","type":"(string * string) list","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"directory","type":"string","keywordOnly":true},{"name":"session","type":"string","keywordOnly":true},{"name":"arg1","type":"window list"}],"returns":"(t, error) result"}],"slug":"libtmux_workspace-config-make"},{"id":"Libtmux_workspace.Config.options","publicId":"Libtmux_workspace.Config.options","qualifiedName":"Libtmux_workspace.Config.options","name":"options","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":82,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val options : t -> setting list","source":{"file":"workspace/libtmux_workspace.mli","line":82,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val options : t -> setting list","params":[{"name":"arg1","type":"t"}],"returns":"setting list"}],"slug":"libtmux_workspace-config-options"},{"id":"Libtmux_workspace.Config.pane","publicId":"Libtmux_workspace.Config.pane","qualifiedName":"Libtmux_workspace.Config.pane","name":"pane","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":40,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pane :\n ?spawn:Libtmux.Spawn.t ->\n ?options:setting list ->\n ?startup:string list ->\n ?direction:Libtmux.Geometry.direction ->\n ?size:Libtmux.Geometry.size ->\n unit ->\n pane","source":{"file":"workspace/libtmux_workspace.mli","line":40,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val pane :\n ?spawn:Libtmux.Spawn.t ->\n ?options:setting list ->\n ?startup:string list ->\n ?direction:Libtmux.Geometry.direction ->\n ?size:Libtmux.Geometry.size -> unit -> pane","params":[{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"options","type":"setting list","optional":true,"keywordOnly":true},{"name":"startup","type":"string list","optional":true,"keywordOnly":true},{"name":"direction","type":"Libtmux.Geometry.direction","optional":true,"keywordOnly":true},{"name":"size","type":"Libtmux.Geometry.size","optional":true,"keywordOnly":true},{"name":"arg1","type":"unit"}],"returns":"pane"}],"slug":"libtmux_workspace-config-pane"},{"id":"Libtmux_workspace.Config.pane:type","publicId":"Libtmux_workspace.Config.pane:type","qualifiedName":"Libtmux_workspace.Config.pane","name":"pane","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":21,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type pane = {\n spawn : Libtmux.Spawn.t;\n options : setting list;\n startup : string list;\n direction : Libtmux.Geometry.direction;\n size : Libtmux.Geometry.size option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":21,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"type pane =\n {\n spawn: Libtmux.Spawn.t ;\n options: setting list ;\n startup: string list ;\n direction: Libtmux.Geometry.direction ;\n size: Libtmux.Geometry.size option }","params":[]}],"slug":"libtmux_workspace-config-pane-type"},{"id":"Libtmux_workspace.Config.pane:type.direction","publicId":"Libtmux_workspace.Config.pane:type.direction","name":"direction","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":25,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"direction : Libtmux.Geometry.direction;","source":{"file":"workspace/libtmux_workspace.mli","line":25,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.pane:type","type":"Libtmux.Geometry.direction","qualifiedName":"Libtmux_workspace.Config.direction","slug":"libtmux_workspace-config-pane-type-direction"},{"id":"Libtmux_workspace.Config.pane:type.options","publicId":"Libtmux_workspace.Config.pane:type.options","name":"options","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":23,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"options : setting list;","source":{"file":"workspace/libtmux_workspace.mli","line":23,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.pane:type","type":"setting list","qualifiedName":"Libtmux_workspace.Config.options","slug":"libtmux_workspace-config-pane-type-options"},{"id":"Libtmux_workspace.Config.pane:type.size","publicId":"Libtmux_workspace.Config.pane:type.size","name":"size","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":26,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"size : Libtmux.Geometry.size option;","source":{"file":"workspace/libtmux_workspace.mli","line":26,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.pane:type","type":"Libtmux.Geometry.size option","qualifiedName":"Libtmux_workspace.Config.size","slug":"libtmux_workspace-config-pane-type-size"},{"id":"Libtmux_workspace.Config.pane:type.spawn","publicId":"Libtmux_workspace.Config.pane:type.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":22,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Libtmux.Spawn.t;","source":{"file":"workspace/libtmux_workspace.mli","line":22,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.pane:type","type":"Libtmux.Spawn.t","qualifiedName":"Libtmux_workspace.Config.spawn","slug":"libtmux_workspace-config-pane-type-spawn"},{"id":"Libtmux_workspace.Config.pane:type.startup","publicId":"Libtmux_workspace.Config.pane:type.startup","name":"startup","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":24,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"startup : string list;","source":{"file":"workspace/libtmux_workspace.mli","line":24,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.pane:type","type":"string list","qualifiedName":"Libtmux_workspace.Config.startup","slug":"libtmux_workspace-config-pane-type-startup"},{"id":"Libtmux_workspace.Config.pp_error","publicId":"Libtmux_workspace.Config.pp_error","qualifiedName":"Libtmux_workspace.Config.pp_error","name":"pp_error","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":13,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp_error : Format.formatter -> error -> unit","source":{"file":"workspace/libtmux_workspace.mli","line":13,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val pp_error : Format.formatter -> error -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"error"}],"returns":"unit"}],"slug":"libtmux_workspace-config-pp_error"},{"id":"Libtmux_workspace.Config.session","publicId":"Libtmux_workspace.Config.session","qualifiedName":"Libtmux_workspace.Config.session","name":"session","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":79,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val session : t -> string","source":{"file":"workspace/libtmux_workspace.mli","line":79,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val session : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux_workspace-config-session"},{"id":"Libtmux_workspace.Config.setting","publicId":"Libtmux_workspace.Config.setting","qualifiedName":"Libtmux_workspace.Config.setting","name":"setting","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":15,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type setting = {\n name : string;\n index : int option;\n value : Libtmux.Options.scalar;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":15,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"type setting =\n {\n name: string ;\n index: int option ;\n value: Libtmux.Options.scalar }","params":[]}],"slug":"libtmux_workspace-config-setting"},{"id":"Libtmux_workspace.Config.setting.index","publicId":"Libtmux_workspace.Config.setting.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":17,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int option;","source":{"file":"workspace/libtmux_workspace.mli","line":17,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.setting","type":"int option","qualifiedName":"Libtmux_workspace.Config.index","slug":"libtmux_workspace-config-setting-index"},{"id":"Libtmux_workspace.Config.setting.name","publicId":"Libtmux_workspace.Config.setting.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":16,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"workspace/libtmux_workspace.mli","line":16,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.setting","type":"string","qualifiedName":"Libtmux_workspace.Config.name","slug":"libtmux_workspace-config-setting-name"},{"id":"Libtmux_workspace.Config.setting.value","publicId":"Libtmux_workspace.Config.setting.value","name":"value","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":18,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"value : Libtmux.Options.scalar;","source":{"file":"workspace/libtmux_workspace.mli","line":18,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.setting","type":"Libtmux.Options.scalar","qualifiedName":"Libtmux_workspace.Config.value","slug":"libtmux_workspace-config-setting-value"},{"id":"Libtmux_workspace.Config.t","publicId":"Libtmux_workspace.Config.t","qualifiedName":"Libtmux_workspace.Config.t","name":"t","kind":"typealias","package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":38,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"workspace/libtmux_workspace.mli","line":38,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_workspace-config-t"},{"id":"Libtmux_workspace.Config.window","publicId":"Libtmux_workspace.Config.window","qualifiedName":"Libtmux_workspace.Config.window","name":"window","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":49,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Builders are unchecked descriptions; {!make} validates the whole document.\n "],"declarations":[{"kind":"function","text":"val window :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?layout:Libtmux.Layout.t ->\n name:string ->\n pane list ->\n window","source":{"file":"workspace/libtmux_workspace.mli","line":49,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","doc":{"summary":"Builders are unchecked descriptions; {!make} validates the whole document."},"signatures":[{"raw":"val window :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?layout:Libtmux.Layout.t -> name:string -> pane list -> window","params":[{"name":"cwd","type":"string","optional":true,"keywordOnly":true},{"name":"environment","type":"(string * string) list","optional":true,"keywordOnly":true},{"name":"options","type":"setting list","optional":true,"keywordOnly":true},{"name":"layout","type":"Libtmux.Layout.t","optional":true,"keywordOnly":true},{"name":"name","type":"string","keywordOnly":true},{"name":"arg1","type":"pane list"}],"returns":"window"}],"slug":"libtmux_workspace-config-window"},{"id":"Libtmux_workspace.Config.window:type","publicId":"Libtmux_workspace.Config.window:type","qualifiedName":"Libtmux_workspace.Config.window","name":"window","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":29,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type window = {\n name : string;\n cwd : string option;\n environment : (string * string) list;\n options : setting list;\n panes : pane list;\n layout : Libtmux.Layout.t option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":29,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"type window =\n {\n name: string ;\n cwd: string option ;\n environment: (string * string) list ;\n options: setting list ;\n panes: pane list ;\n layout: Libtmux.Layout.t option }","params":[]}],"slug":"libtmux_workspace-config-window-type"},{"id":"Libtmux_workspace.Config.window:type.cwd","publicId":"Libtmux_workspace.Config.window:type.cwd","name":"cwd","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":31,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cwd : string option;","source":{"file":"workspace/libtmux_workspace.mli","line":31,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"string option","qualifiedName":"Libtmux_workspace.Config.cwd","slug":"libtmux_workspace-config-window-type-cwd"},{"id":"Libtmux_workspace.Config.window:type.environment","publicId":"Libtmux_workspace.Config.window:type.environment","name":"environment","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":32,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"environment : (string * string) list;","source":{"file":"workspace/libtmux_workspace.mli","line":32,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"(string * string) list","qualifiedName":"Libtmux_workspace.Config.environment","slug":"libtmux_workspace-config-window-type-environment"},{"id":"Libtmux_workspace.Config.window:type.layout","publicId":"Libtmux_workspace.Config.window:type.layout","name":"layout","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":35,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"layout : Libtmux.Layout.t option;","source":{"file":"workspace/libtmux_workspace.mli","line":35,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"Libtmux.Layout.t option","qualifiedName":"Libtmux_workspace.Config.layout","slug":"libtmux_workspace-config-window-type-layout"},{"id":"Libtmux_workspace.Config.window:type.name","publicId":"Libtmux_workspace.Config.window:type.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":30,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"workspace/libtmux_workspace.mli","line":30,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"string","qualifiedName":"Libtmux_workspace.Config.name","slug":"libtmux_workspace-config-window-type-name"},{"id":"Libtmux_workspace.Config.window:type.options","publicId":"Libtmux_workspace.Config.window:type.options","name":"options","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":33,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"options : setting list;","source":{"file":"workspace/libtmux_workspace.mli","line":33,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"setting list","qualifiedName":"Libtmux_workspace.Config.options","slug":"libtmux_workspace-config-window-type-options"},{"id":"Libtmux_workspace.Config.window:type.panes","publicId":"Libtmux_workspace.Config.window:type.panes","name":"panes","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":34,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"panes : pane list;","source":{"file":"workspace/libtmux_workspace.mli","line":34,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"pane list","qualifiedName":"Libtmux_workspace.Config.panes","slug":"libtmux_workspace-config-window-type-panes"},{"id":"Libtmux_workspace.Config.windows","publicId":"Libtmux_workspace.Config.windows","qualifiedName":"Libtmux_workspace.Config.windows","name":"windows","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":80,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val windows : t -> window Iarray.t","source":{"file":"workspace/libtmux_workspace.mli","line":80,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val windows : t -> window Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"window Iarray.t"}],"slug":"libtmux_workspace-config-windows"},{"id":"Libtmux_workspace.Execution","publicId":"Libtmux_workspace.Execution","qualifiedName":"Libtmux_workspace.Execution","name":"Execution","kind":"module","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":165,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Apply a plan once per handle and retain effects, uncertainty and cleanup.\n The journal lives in process memory while its execution handle is retained;\n {!Execution.val-inspect} returns immutable copies. It survives waiter\n cancellation and client closure, but supplies no crash-durable recovery or\n cross-invocation deduplication. Ordinary applications use their backend's\n Workspace module; executors below integrate another transport. "],"declarations":[{"kind":"module","text":"module Execution : sig\n type hint = {\n session : Libtmux.Session.Id.t;\n window : Libtmux.Window.Id.t;\n pane : Libtmux.Pane.Id.t;\n window_index : int;\n pane_index : int;\n server_pid : int;\n }\n (** A creation row received before daemon binding finished. Hints are not\n operational targets and are never eligible for automatic compensation. *)\n\n type certainty = Not_started | Applied | Unknown\n\n type observation = {\n certainty : certainty;\n created : Libtmux.Created.t list;\n unbound : hint option;\n }\n\n type executor = {\n source : unit -> Libtmux.Source.t option;\n capture : unit -> (Libtmux.Snapshot.t, Libtmux.Error.t) result;\n run : 'a. 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result;\n bootstrap : Config.t -> (Libtmux.Created.t, Libtmux.Error.t) result;\n inspect : unit -> unit -> observation;\n protect : (unit -> unit) -> (unit, Libtmux.Error.t) result;\n }\n (** Backend integration: [inspect] returns a callback tied to the latest\n operation, reading only its retained state even after later submissions.\n [protect] bounds compensation and shields it from caller cancellation,\n reporting expected failures as [Error]. Ordinary callers use their\n backend's Workspace API. *)\n\n type step_status =\n | Pending\n | Running\n | Completed\n | Failed of Libtmux.Error.t\n | Skipped\n | Uncertain of Libtmux.Error.t\n\n type step = {\n index : int;\n action : Plan.action;\n status : step_status;\n created : Libtmux.Created.t list;\n unbound : hint option;\n }\n\n type cleanup = {\n pane : Libtmux.Pane.target;\n outcome : (unit, Libtmux.Error.t) result;\n }\n\n type status =\n | Queued\n | Applying\n | Succeeded\n | Partial\n | Interrupted\n | Rejected of Plan.error\n | Unavailable of Libtmux.Error.t\n\n type receipt = {\n operation_id : string;\n source : Libtmux.Source.t option;\n status : status;\n steps : step Iarray.t;\n cleanup : cleanup Iarray.t;\n cleanup_error : Libtmux.Error.t option;\n }\n\n type t\n\n val create :\n operation_id:string ->\n executor:executor ->\n Plan.t ->\n (t, Libtmux.Error.t) result\n (** Allocate a retained handle without I/O. IDs have 1..64 ASCII letters,\n digits, underscores or hyphens. [operation_id] correlates receipts; it\n does not deduplicate handles. A new handle starts a new execution even if\n its ID matches an earlier one. *)\n\n val inspect : t -> receipt\n (** Return an immutable copy of the retained journal without I/O. *)\n\n val await : ?compensate_on_failure:bool -> t -> receipt\n (** Execute once per handle, rechecking generation and captured preconditions\n first. Expected failures return a partial journal. Exceptions, including\n native cancellation, propagate after recording progress and bounded\n compensation. Subsequent calls only return the retained receipt; mutations\n never retry.\n\n Compensation kills only panes reported by completed creation commands, in\n reverse creation order. tmux removes windows and sessions that become\n empty. Containers with foreign panes or window links remain; adding a\n borrowed pane never makes it eligible for cleanup. Cleanup failures have\n separate outcomes. Compensation cannot undo external effects of programs\n started inside the panes. *)\nend","source":{"file":"workspace/libtmux_workspace.mli","line":165,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace","doc":{"summary":"Apply a plan once per handle and retain effects, uncertainty and cleanup. The journal lives in process memory while its execution handle is retained; {!Execution.val-inspect} returns immutable copies. It survives waiter cancellation and client closure, but supplies no crash-durable recovery or cross-invocation deduplication. Ordinary applications use their backend's Workspace module; executors below integrate another transport."},"slug":"libtmux_workspace-execution"},{"id":"Libtmux_workspace.Execution.await","publicId":"Libtmux_workspace.Execution.await","qualifiedName":"Libtmux_workspace.Execution.await","name":"await","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":253,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Execute once per handle, rechecking generation and captured preconditions\n first. Expected failures return a partial journal. Exceptions, including\n native cancellation, propagate after recording progress and bounded\n compensation. Subsequent calls only return the retained receipt; mutations\n never retry.\n\n Compensation kills only panes reported by completed creation commands, in\n reverse creation order. tmux removes windows and sessions that become\n empty. Containers with foreign panes or window links remain; adding a\n borrowed pane never makes it eligible for cleanup. Cleanup failures have\n separate outcomes. Compensation cannot undo external effects of programs\n started inside the panes. "],"declarations":[{"kind":"function","text":"val await : ?compensate_on_failure:bool -> t -> receipt","source":{"file":"workspace/libtmux_workspace.mli","line":253,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","doc":{"summary":"Execute once per handle, rechecking generation and captured preconditions first. Expected failures return a partial journal. Exceptions, including native cancellation, propagate after recording progress and bounded compensation. Subsequent calls only return the retained receipt; mutations never retry.","body":"Compensation kills only panes reported by completed creation commands, in reverse creation order. tmux removes windows and sessions that become empty. Containers with foreign panes or window links remain; adding a borrowed pane never makes it eligible for cleanup. Cleanup failures have separate outcomes. Compensation cannot undo external effects of programs started inside the panes."},"signatures":[{"raw":"val await : ?compensate_on_failure:bool -> t -> receipt","params":[{"name":"compensate_on_failure","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"receipt"}],"slug":"libtmux_workspace-execution-await"},{"id":"Libtmux_workspace.Execution.certainty","publicId":"Libtmux_workspace.Execution.certainty","qualifiedName":"Libtmux_workspace.Execution.certainty","name":"certainty","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type certainty = Not_started | Applied | Unknown","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type certainty =\n | Not_started \n | Applied \n | Unknown ","params":[]}],"slug":"libtmux_workspace-execution-certainty"},{"id":"Libtmux_workspace.Execution.certainty.Applied","publicId":"Libtmux_workspace.Execution.certainty.Applied","name":"Applied","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Applied","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.certainty","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Applied","slug":"libtmux_workspace-execution-certainty-applied"},{"id":"Libtmux_workspace.Execution.certainty.Not_started","publicId":"Libtmux_workspace.Execution.certainty.Not_started","name":"Not_started","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Not_started","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.certainty","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Not_started","slug":"libtmux_workspace-execution-certainty-not_started"},{"id":"Libtmux_workspace.Execution.certainty.Unknown","publicId":"Libtmux_workspace.Execution.certainty.Unknown","name":"Unknown","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unknown","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.certainty","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Unknown","slug":"libtmux_workspace-execution-certainty-unknown"},{"id":"Libtmux_workspace.Execution.cleanup","publicId":"Libtmux_workspace.Execution.cleanup","qualifiedName":"Libtmux_workspace.Execution.cleanup","name":"cleanup","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":215,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type cleanup = {\n pane : Libtmux.Pane.target;\n outcome : (unit, Libtmux.Error.t) result;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":215,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type cleanup =\n {\n pane: Libtmux.Pane.target ;\n outcome: (unit, Libtmux.Error.t) result }","params":[]}],"slug":"libtmux_workspace-execution-cleanup"},{"id":"Libtmux_workspace.Execution.cleanup.outcome","publicId":"Libtmux_workspace.Execution.cleanup.outcome","name":"outcome","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":217,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"outcome : (unit, Libtmux.Error.t) result;","source":{"file":"workspace/libtmux_workspace.mli","line":217,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.cleanup","type":"(unit, Libtmux.Error.t) result","qualifiedName":"Libtmux_workspace.Execution.outcome","slug":"libtmux_workspace-execution-cleanup-outcome"},{"id":"Libtmux_workspace.Execution.cleanup.pane","publicId":"Libtmux_workspace.Execution.cleanup.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":216,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Libtmux.Pane.target;","source":{"file":"workspace/libtmux_workspace.mli","line":216,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.cleanup","type":"Libtmux.Pane.target","qualifiedName":"Libtmux_workspace.Execution.pane","slug":"libtmux_workspace-execution-cleanup-pane"},{"id":"Libtmux_workspace.Execution.create","publicId":"Libtmux_workspace.Execution.create","qualifiedName":"Libtmux_workspace.Execution.create","name":"create","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":240,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Allocate a retained handle without I/O. IDs have 1..64 ASCII letters,\n digits, underscores or hyphens. [operation_id] correlates receipts; it\n does not deduplicate handles. A new handle starts a new execution even if\n its ID matches an earlier one. "],"declarations":[{"kind":"function","text":"val create :\n operation_id:string ->\n executor:executor ->\n Plan.t ->\n (t, Libtmux.Error.t) result","source":{"file":"workspace/libtmux_workspace.mli","line":240,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","doc":{"summary":"Allocate a retained handle without I/O. IDs have 1..64 ASCII letters, digits, underscores or hyphens. `operation_id` correlates receipts; it does not deduplicate handles. A new handle starts a new execution even if its ID matches an earlier one."},"signatures":[{"raw":"val create :\n operation_id:string ->\n executor:executor -> Plan.t -> (t, Libtmux.Error.t) result","params":[{"name":"operation_id","type":"string","keywordOnly":true},{"name":"executor","type":"executor","keywordOnly":true},{"name":"arg1","type":"Plan.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_workspace-execution-create"},{"id":"Libtmux_workspace.Execution.executor","publicId":"Libtmux_workspace.Execution.executor","qualifiedName":"Libtmux_workspace.Execution.executor","name":"executor","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":185,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Backend integration: [inspect] returns a callback tied to the latest\n operation, reading only its retained state even after later submissions.\n [protect] bounds compensation and shields it from caller cancellation,\n reporting expected failures as [Error]. Ordinary callers use their\n backend's Workspace API. "],"declarations":[{"kind":"struct","text":"type executor = {\n source : unit -> Libtmux.Source.t option;\n capture : unit -> (Libtmux.Snapshot.t, Libtmux.Error.t) result;\n run : 'a. 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result;\n bootstrap : Config.t -> (Libtmux.Created.t, Libtmux.Error.t) result;\n inspect : unit -> unit -> observation;\n protect : (unit -> unit) -> (unit, Libtmux.Error.t) result;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":185,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","doc":{"summary":"Backend integration: `inspect` returns a callback tied to the latest operation, reading only its retained state even after later submissions. `protect` bounds compensation and shields it from caller cancellation, reporting expected failures as `Error`. Ordinary callers use their backend's Workspace API."},"signatures":[{"raw":"type executor =\n {\n source: unit -> Libtmux.Source.t option ;\n capture: unit -> (Libtmux.Snapshot.t, Libtmux.Error.t) result ;\n run: 'a . 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result ;\n bootstrap: Config.t -> (Libtmux.Created.t, Libtmux.Error.t) result ;\n inspect: unit -> unit -> observation ;\n protect: (unit -> unit) -> (unit, Libtmux.Error.t) result }","params":[]}],"slug":"libtmux_workspace-execution-executor"},{"id":"Libtmux_workspace.Execution.executor.bootstrap","publicId":"Libtmux_workspace.Execution.executor.bootstrap","name":"bootstrap","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":189,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"bootstrap : Config.t -> (Libtmux.Created.t, Libtmux.Error.t) result;","source":{"file":"workspace/libtmux_workspace.mli","line":189,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"Config.t -> (Libtmux.Created.t, Libtmux.Error.t) result","qualifiedName":"Libtmux_workspace.Execution.bootstrap","slug":"libtmux_workspace-execution-executor-bootstrap"},{"id":"Libtmux_workspace.Execution.executor.capture","publicId":"Libtmux_workspace.Execution.executor.capture","name":"capture","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":187,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"capture : unit -> (Libtmux.Snapshot.t, Libtmux.Error.t) result;","source":{"file":"workspace/libtmux_workspace.mli","line":187,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"unit -> (Libtmux.Snapshot.t, Libtmux.Error.t) result","qualifiedName":"Libtmux_workspace.Execution.capture","slug":"libtmux_workspace-execution-executor-capture"},{"id":"Libtmux_workspace.Execution.executor.inspect","publicId":"Libtmux_workspace.Execution.executor.inspect","name":"inspect","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":190,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"inspect : unit -> unit -> observation;","source":{"file":"workspace/libtmux_workspace.mli","line":190,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"unit -> unit -> observation","qualifiedName":"Libtmux_workspace.Execution.inspect","slug":"libtmux_workspace-execution-executor-inspect"},{"id":"Libtmux_workspace.Execution.executor.protect","publicId":"Libtmux_workspace.Execution.executor.protect","name":"protect","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":191,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"protect : (unit -> unit) -> (unit, Libtmux.Error.t) result;","source":{"file":"workspace/libtmux_workspace.mli","line":191,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"(unit -> unit) -> (unit, Libtmux.Error.t) result","qualifiedName":"Libtmux_workspace.Execution.protect","slug":"libtmux_workspace-execution-executor-protect"},{"id":"Libtmux_workspace.Execution.executor.run","publicId":"Libtmux_workspace.Execution.executor.run","name":"run","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":188,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"run : 'a. 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result;","source":{"file":"workspace/libtmux_workspace.mli","line":188,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"'a. 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result","qualifiedName":"Libtmux_workspace.Execution.run","slug":"libtmux_workspace-execution-executor-run"},{"id":"Libtmux_workspace.Execution.executor.source","publicId":"Libtmux_workspace.Execution.executor.source","name":"source","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":186,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"source : unit -> Libtmux.Source.t option;","source":{"file":"workspace/libtmux_workspace.mli","line":186,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"unit -> Libtmux.Source.t option","qualifiedName":"Libtmux_workspace.Execution.source","slug":"libtmux_workspace-execution-executor-source"},{"id":"Libtmux_workspace.Execution.hint","publicId":"Libtmux_workspace.Execution.hint","qualifiedName":"Libtmux_workspace.Execution.hint","name":"hint","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":166,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" A creation row received before daemon binding finished. Hints are not\n operational targets and are never eligible for automatic compensation. "],"declarations":[{"kind":"struct","text":"type hint = {\n session : Libtmux.Session.Id.t;\n window : Libtmux.Window.Id.t;\n pane : Libtmux.Pane.Id.t;\n window_index : int;\n pane_index : int;\n server_pid : int;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":166,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","doc":{"summary":"A creation row received before daemon binding finished. Hints are not operational targets and are never eligible for automatic compensation."},"signatures":[{"raw":"type hint =\n {\n session: Libtmux.Session.Id.t ;\n window: Libtmux.Window.Id.t ;\n pane: Libtmux.Pane.Id.t ;\n window_index: int ;\n pane_index: int ;\n server_pid: int }","params":[]}],"slug":"libtmux_workspace-execution-hint"},{"id":"Libtmux_workspace.Execution.hint.pane","publicId":"Libtmux_workspace.Execution.hint.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":169,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Libtmux.Pane.Id.t;","source":{"file":"workspace/libtmux_workspace.mli","line":169,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"Libtmux.Pane.Id.t","qualifiedName":"Libtmux_workspace.Execution.pane","slug":"libtmux_workspace-execution-hint-pane"},{"id":"Libtmux_workspace.Execution.hint.pane_index","publicId":"Libtmux_workspace.Execution.hint.pane_index","name":"pane_index","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":171,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane_index : int;","source":{"file":"workspace/libtmux_workspace.mli","line":171,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"int","qualifiedName":"Libtmux_workspace.Execution.pane_index","slug":"libtmux_workspace-execution-hint-pane_index"},{"id":"Libtmux_workspace.Execution.hint.server_pid","publicId":"Libtmux_workspace.Execution.hint.server_pid","name":"server_pid","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":172,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"server_pid : int;","source":{"file":"workspace/libtmux_workspace.mli","line":172,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"int","qualifiedName":"Libtmux_workspace.Execution.server_pid","slug":"libtmux_workspace-execution-hint-server_pid"},{"id":"Libtmux_workspace.Execution.hint.session","publicId":"Libtmux_workspace.Execution.hint.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":167,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Libtmux.Session.Id.t;","source":{"file":"workspace/libtmux_workspace.mli","line":167,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"Libtmux.Session.Id.t","qualifiedName":"Libtmux_workspace.Execution.session","slug":"libtmux_workspace-execution-hint-session"},{"id":"Libtmux_workspace.Execution.hint.window","publicId":"Libtmux_workspace.Execution.hint.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":168,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : Libtmux.Window.Id.t;","source":{"file":"workspace/libtmux_workspace.mli","line":168,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"Libtmux.Window.Id.t","qualifiedName":"Libtmux_workspace.Execution.window","slug":"libtmux_workspace-execution-hint-window"},{"id":"Libtmux_workspace.Execution.hint.window_index","publicId":"Libtmux_workspace.Execution.hint.window_index","name":"window_index","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":170,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_index : int;","source":{"file":"workspace/libtmux_workspace.mli","line":170,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"int","qualifiedName":"Libtmux_workspace.Execution.window_index","slug":"libtmux_workspace-execution-hint-window_index"},{"id":"Libtmux_workspace.Execution.inspect","publicId":"Libtmux_workspace.Execution.inspect","qualifiedName":"Libtmux_workspace.Execution.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":250,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Return an immutable copy of the retained journal without I/O. "],"declarations":[{"kind":"function","text":"val inspect : t -> receipt","source":{"file":"workspace/libtmux_workspace.mli","line":250,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","doc":{"summary":"Return an immutable copy of the retained journal without I/O."},"signatures":[{"raw":"val inspect : t -> receipt","params":[{"name":"arg1","type":"t"}],"returns":"receipt"}],"slug":"libtmux_workspace-execution-inspect"},{"id":"Libtmux_workspace.Execution.observation","publicId":"Libtmux_workspace.Execution.observation","qualifiedName":"Libtmux_workspace.Execution.observation","name":"observation","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":179,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type observation = {\n certainty : certainty;\n created : Libtmux.Created.t list;\n unbound : hint option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":179,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type observation =\n {\n certainty: certainty ;\n created: Libtmux.Created.t list ;\n unbound: hint option }","params":[]}],"slug":"libtmux_workspace-execution-observation"},{"id":"Libtmux_workspace.Execution.observation.certainty","publicId":"Libtmux_workspace.Execution.observation.certainty","name":"certainty","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":180,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"certainty : certainty;","source":{"file":"workspace/libtmux_workspace.mli","line":180,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.observation","type":"certainty","qualifiedName":"Libtmux_workspace.Execution.certainty","slug":"libtmux_workspace-execution-observation-certainty"},{"id":"Libtmux_workspace.Execution.observation.created","publicId":"Libtmux_workspace.Execution.observation.created","name":"created","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":181,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"created : Libtmux.Created.t list;","source":{"file":"workspace/libtmux_workspace.mli","line":181,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.observation","type":"Libtmux.Created.t list","qualifiedName":"Libtmux_workspace.Execution.created","slug":"libtmux_workspace-execution-observation-created"},{"id":"Libtmux_workspace.Execution.observation.unbound","publicId":"Libtmux_workspace.Execution.observation.unbound","name":"unbound","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":182,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"unbound : hint option;","source":{"file":"workspace/libtmux_workspace.mli","line":182,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.observation","type":"hint option","qualifiedName":"Libtmux_workspace.Execution.unbound","slug":"libtmux_workspace-execution-observation-unbound"},{"id":"Libtmux_workspace.Execution.receipt","publicId":"Libtmux_workspace.Execution.receipt","qualifiedName":"Libtmux_workspace.Execution.receipt","name":"receipt","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":229,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type receipt = {\n operation_id : string;\n source : Libtmux.Source.t option;\n status : status;\n steps : step Iarray.t;\n cleanup : cleanup Iarray.t;\n cleanup_error : Libtmux.Error.t option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":229,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type receipt =\n {\n operation_id: string ;\n source: Libtmux.Source.t option ;\n status: status ;\n steps: step Iarray.t ;\n cleanup: cleanup Iarray.t ;\n cleanup_error: Libtmux.Error.t option }","params":[]}],"slug":"libtmux_workspace-execution-receipt"},{"id":"Libtmux_workspace.Execution.receipt.cleanup","publicId":"Libtmux_workspace.Execution.receipt.cleanup","name":"cleanup","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":234,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cleanup : cleanup Iarray.t;","source":{"file":"workspace/libtmux_workspace.mli","line":234,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"cleanup Iarray.t","qualifiedName":"Libtmux_workspace.Execution.cleanup","slug":"libtmux_workspace-execution-receipt-cleanup"},{"id":"Libtmux_workspace.Execution.receipt.cleanup_error","publicId":"Libtmux_workspace.Execution.receipt.cleanup_error","name":"cleanup_error","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":235,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cleanup_error : Libtmux.Error.t option;","source":{"file":"workspace/libtmux_workspace.mli","line":235,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"Libtmux.Error.t option","qualifiedName":"Libtmux_workspace.Execution.cleanup_error","slug":"libtmux_workspace-execution-receipt-cleanup_error"},{"id":"Libtmux_workspace.Execution.receipt.operation_id","publicId":"Libtmux_workspace.Execution.receipt.operation_id","name":"operation_id","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":230,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"operation_id : string;","source":{"file":"workspace/libtmux_workspace.mli","line":230,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"string","qualifiedName":"Libtmux_workspace.Execution.operation_id","slug":"libtmux_workspace-execution-receipt-operation_id"},{"id":"Libtmux_workspace.Execution.receipt.source","publicId":"Libtmux_workspace.Execution.receipt.source","name":"source","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":231,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"source : Libtmux.Source.t option;","source":{"file":"workspace/libtmux_workspace.mli","line":231,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"Libtmux.Source.t option","qualifiedName":"Libtmux_workspace.Execution.source","slug":"libtmux_workspace-execution-receipt-source"},{"id":"Libtmux_workspace.Execution.receipt.status","publicId":"Libtmux_workspace.Execution.receipt.status","name":"status","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":232,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"status : status;","source":{"file":"workspace/libtmux_workspace.mli","line":232,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"status","qualifiedName":"Libtmux_workspace.Execution.status","slug":"libtmux_workspace-execution-receipt-status"},{"id":"Libtmux_workspace.Execution.receipt.steps","publicId":"Libtmux_workspace.Execution.receipt.steps","name":"steps","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":233,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"steps : step Iarray.t;","source":{"file":"workspace/libtmux_workspace.mli","line":233,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"step Iarray.t","qualifiedName":"Libtmux_workspace.Execution.steps","slug":"libtmux_workspace-execution-receipt-steps"},{"id":"Libtmux_workspace.Execution.status","publicId":"Libtmux_workspace.Execution.status","qualifiedName":"Libtmux_workspace.Execution.status","name":"status","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":220,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type status =\n | Queued\n | Applying\n | Succeeded\n | Partial\n | Interrupted\n | Rejected of Plan.error\n | Unavailable of Libtmux.Error.t","source":{"file":"workspace/libtmux_workspace.mli","line":220,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type status =\n | Queued \n | Applying \n | Succeeded \n | Partial \n | Interrupted \n | Rejected of Plan.error \n | Unavailable of Libtmux.Error.t ","params":[]}],"slug":"libtmux_workspace-execution-status"},{"id":"Libtmux_workspace.Execution.status.Applying","publicId":"Libtmux_workspace.Execution.status.Applying","name":"Applying","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":222,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Applying","source":{"file":"workspace/libtmux_workspace.mli","line":222,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Applying","slug":"libtmux_workspace-execution-status-applying"},{"id":"Libtmux_workspace.Execution.status.Interrupted","publicId":"Libtmux_workspace.Execution.status.Interrupted","name":"Interrupted","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":225,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Interrupted","source":{"file":"workspace/libtmux_workspace.mli","line":225,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Interrupted","slug":"libtmux_workspace-execution-status-interrupted"},{"id":"Libtmux_workspace.Execution.status.Partial","publicId":"Libtmux_workspace.Execution.status.Partial","name":"Partial","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":224,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Partial","source":{"file":"workspace/libtmux_workspace.mli","line":224,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Partial","slug":"libtmux_workspace-execution-status-partial"},{"id":"Libtmux_workspace.Execution.status.Queued","publicId":"Libtmux_workspace.Execution.status.Queued","name":"Queued","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":221,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Queued","source":{"file":"workspace/libtmux_workspace.mli","line":221,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Queued","slug":"libtmux_workspace-execution-status-queued"},{"id":"Libtmux_workspace.Execution.status.Rejected","publicId":"Libtmux_workspace.Execution.status.Rejected","name":"Rejected","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":226,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Rejected of Plan.error","source":{"file":"workspace/libtmux_workspace.mli","line":226,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"tuple","qualifiedName":"Libtmux_workspace.Execution.Rejected","slug":"libtmux_workspace-execution-status-rejected"},{"id":"Libtmux_workspace.Execution.status.Succeeded","publicId":"Libtmux_workspace.Execution.status.Succeeded","name":"Succeeded","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":223,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Succeeded","source":{"file":"workspace/libtmux_workspace.mli","line":223,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Succeeded","slug":"libtmux_workspace-execution-status-succeeded"},{"id":"Libtmux_workspace.Execution.status.Unavailable","publicId":"Libtmux_workspace.Execution.status.Unavailable","name":"Unavailable","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":227,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unavailable of Libtmux.Error.t","source":{"file":"workspace/libtmux_workspace.mli","line":227,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"tuple","qualifiedName":"Libtmux_workspace.Execution.Unavailable","slug":"libtmux_workspace-execution-status-unavailable"},{"id":"Libtmux_workspace.Execution.step","publicId":"Libtmux_workspace.Execution.step","qualifiedName":"Libtmux_workspace.Execution.step","name":"step","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":207,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type step = {\n index : int;\n action : Plan.action;\n status : step_status;\n created : Libtmux.Created.t list;\n unbound : hint option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":207,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type step =\n {\n index: int ;\n action: Plan.action ;\n status: step_status ;\n created: Libtmux.Created.t list ;\n unbound: hint option }","params":[]}],"slug":"libtmux_workspace-execution-step"},{"id":"Libtmux_workspace.Execution.step.action","publicId":"Libtmux_workspace.Execution.step.action","name":"action","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":209,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"action : Plan.action;","source":{"file":"workspace/libtmux_workspace.mli","line":209,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.step","type":"Plan.action","qualifiedName":"Libtmux_workspace.Execution.action","slug":"libtmux_workspace-execution-step-action"},{"id":"Libtmux_workspace.Execution.step.created","publicId":"Libtmux_workspace.Execution.step.created","name":"created","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":211,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"created : Libtmux.Created.t list;","source":{"file":"workspace/libtmux_workspace.mli","line":211,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.step","type":"Libtmux.Created.t list","qualifiedName":"Libtmux_workspace.Execution.created","slug":"libtmux_workspace-execution-step-created"},{"id":"Libtmux_workspace.Execution.step.index","publicId":"Libtmux_workspace.Execution.step.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":208,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"workspace/libtmux_workspace.mli","line":208,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.step","type":"int","qualifiedName":"Libtmux_workspace.Execution.index","slug":"libtmux_workspace-execution-step-index"},{"id":"Libtmux_workspace.Execution.step.status","publicId":"Libtmux_workspace.Execution.step.status","name":"status","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":210,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"status : step_status;","source":{"file":"workspace/libtmux_workspace.mli","line":210,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.step","type":"step_status","qualifiedName":"Libtmux_workspace.Execution.status","slug":"libtmux_workspace-execution-step-status"},{"id":"Libtmux_workspace.Execution.step.unbound","publicId":"Libtmux_workspace.Execution.step.unbound","name":"unbound","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":212,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"unbound : hint option;","source":{"file":"workspace/libtmux_workspace.mli","line":212,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.step","type":"hint option","qualifiedName":"Libtmux_workspace.Execution.unbound","slug":"libtmux_workspace-execution-step-unbound"},{"id":"Libtmux_workspace.Execution.step_status","publicId":"Libtmux_workspace.Execution.step_status","qualifiedName":"Libtmux_workspace.Execution.step_status","name":"step_status","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":199,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type step_status =\n | Pending\n | Running\n | Completed\n | Failed of Libtmux.Error.t\n | Skipped\n | Uncertain of Libtmux.Error.t","source":{"file":"workspace/libtmux_workspace.mli","line":199,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type step_status =\n | Pending \n | Running \n | Completed \n | Failed of Libtmux.Error.t \n | Skipped \n | Uncertain of Libtmux.Error.t ","params":[]}],"slug":"libtmux_workspace-execution-step_status"},{"id":"Libtmux_workspace.Execution.step_status.Completed","publicId":"Libtmux_workspace.Execution.step_status.Completed","name":"Completed","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":202,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Completed","source":{"file":"workspace/libtmux_workspace.mli","line":202,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Completed","slug":"libtmux_workspace-execution-step_status-completed"},{"id":"Libtmux_workspace.Execution.step_status.Failed","publicId":"Libtmux_workspace.Execution.step_status.Failed","name":"Failed","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":203,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Failed of Libtmux.Error.t","source":{"file":"workspace/libtmux_workspace.mli","line":203,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"tuple","qualifiedName":"Libtmux_workspace.Execution.Failed","slug":"libtmux_workspace-execution-step_status-failed"},{"id":"Libtmux_workspace.Execution.step_status.Pending","publicId":"Libtmux_workspace.Execution.step_status.Pending","name":"Pending","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":200,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Pending","source":{"file":"workspace/libtmux_workspace.mli","line":200,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Pending","slug":"libtmux_workspace-execution-step_status-pending"},{"id":"Libtmux_workspace.Execution.step_status.Running","publicId":"Libtmux_workspace.Execution.step_status.Running","name":"Running","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":201,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Running","source":{"file":"workspace/libtmux_workspace.mli","line":201,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Running","slug":"libtmux_workspace-execution-step_status-running"},{"id":"Libtmux_workspace.Execution.step_status.Skipped","publicId":"Libtmux_workspace.Execution.step_status.Skipped","name":"Skipped","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":204,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Skipped","source":{"file":"workspace/libtmux_workspace.mli","line":204,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Skipped","slug":"libtmux_workspace-execution-step_status-skipped"},{"id":"Libtmux_workspace.Execution.step_status.Uncertain","publicId":"Libtmux_workspace.Execution.step_status.Uncertain","name":"Uncertain","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":205,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Uncertain of Libtmux.Error.t","source":{"file":"workspace/libtmux_workspace.mli","line":205,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"tuple","qualifiedName":"Libtmux_workspace.Execution.Uncertain","slug":"libtmux_workspace-execution-step_status-uncertain"},{"id":"Libtmux_workspace.Execution.t","publicId":"Libtmux_workspace.Execution.t","qualifiedName":"Libtmux_workspace.Execution.t","name":"t","kind":"typealias","package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":238,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"workspace/libtmux_workspace.mli","line":238,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_workspace-execution-t"},{"id":"Libtmux_workspace.Plan","publicId":"Libtmux_workspace.Plan","qualifiedName":"Libtmux_workspace.Plan","name":"Plan","kind":"module","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":89,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[" Preview ordered workspace actions against one observed daemon generation. A\n plan retains collision policy and bound targets; it is not a portable\n command script. "],"declarations":[{"kind":"module","text":"module Plan : sig\n type server_policy = Create_if_missing | Require_existing_server\n type window_collision = Reject\n\n type collision_policy =\n | Fail_if_session_exists\n | Append_new_windows of { window_collision : window_collision }\n\n type error =\n | Missing_endpoint\n | Session_conflict of string\n | Window_conflict of string\n | Append_session_options\n | Too_many_steps\n | Unsupported_setting of Config.error\n | Stale\n\n val pp_error : Format.formatter -> error -> unit\n\n type scope = Session | Window of int | Pane of { window : int; pane : int }\n\n type action =\n | Create_session of {\n bootstrap : bool;\n name : string;\n window_name : string;\n spawn : Libtmux.Spawn.t;\n width : int;\n height : int;\n }\n | Create_window of { window : int; name : string; spawn : Libtmux.Spawn.t }\n | Split_pane of {\n window : int;\n pane : int;\n spawn : Libtmux.Spawn.t;\n direction : Libtmux.Geometry.direction;\n size : Libtmux.Geometry.size option;\n }\n | Set_environment of string * string\n | Set_option of scope * Config.setting\n | Send_text of { window : int; pane : int; text : string }\n | Send_enter of { window : int; pane : int }\n | Select_layout of int * Libtmux.Layout.t\n\n type t\n\n val make :\n ?server_policy:server_policy ->\n ?collision_policy:collision_policy ->\n endpoint:Libtmux.Endpoint.t ->\n version:string ->\n observed:Libtmux.Snapshot.t option ->\n Config.t ->\n (t, error) result\n (** [None] means an explicitly observed missing endpoint. It is not an empty\n successful snapshot. A plan does not start a server. Append rejects any\n existing requested window name and never changes session options.\n [version] selects the generated option catalog. *)\n\n val endpoint : t -> Libtmux.Endpoint.t\n val source : t -> Libtmux.Source.t option\n val existing_session : t -> Libtmux.Session.target option\n val actions : t -> action Iarray.t\n val config : t -> Config.t\n\n val check_source : t -> Libtmux.Source.t option -> (unit, error) result\n (** Operational plans are ephemeral and bound to one connection generation. A\n printed or serialized preview cannot supply operational targets. *)\nend","source":{"file":"workspace/libtmux_workspace.mli","line":89,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace","doc":{"summary":"Preview ordered workspace actions against one observed daemon generation. A plan retains collision policy and bound targets; it is not a portable command script."},"slug":"libtmux_workspace-plan"},{"id":"Libtmux_workspace.Plan.action","publicId":"Libtmux_workspace.Plan.action","qualifiedName":"Libtmux_workspace.Plan.action","name":"action","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":110,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type action =\n | Create_session of {\n bootstrap : bool;\n name : string;\n window_name : string;\n spawn : Libtmux.Spawn.t;\n width : int;\n height : int;\n }\n | Create_window of { window : int; name : string; spawn : Libtmux.Spawn.t }\n | Split_pane of {\n window : int;\n pane : int;\n spawn : Libtmux.Spawn.t;\n direction : Libtmux.Geometry.direction;\n size : Libtmux.Geometry.size option;\n }\n | Set_environment of string * string\n | Set_option of scope * Config.setting\n | Send_text of { window : int; pane : int; text : string }\n | Send_enter of { window : int; pane : int }\n | Select_layout of int * Libtmux.Layout.t","source":{"file":"workspace/libtmux_workspace.mli","line":110,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type action =\n | Create_session of\n {\n bootstrap: bool ;\n name: string ;\n window_name: string ;\n spawn: Libtmux.Spawn.t ;\n width: int ;\n height: int } \n | Create_window of {\n window: int ;\n name: string ;\n spawn: Libtmux.Spawn.t } \n | Split_pane of\n {\n window: int ;\n pane: int ;\n spawn: Libtmux.Spawn.t ;\n direction: Libtmux.Geometry.direction ;\n size: Libtmux.Geometry.size option } \n | Set_environment of string * string \n | Set_option of scope * Config.setting \n | Send_text of {\n window: int ;\n pane: int ;\n text: string } \n | Send_enter of {\n window: int ;\n pane: int } \n | Select_layout of int * Libtmux.Layout.t ","params":[]}],"slug":"libtmux_workspace-plan-action"},{"id":"Libtmux_workspace.Plan.action.Create_session","publicId":"Libtmux_workspace.Plan.action.Create_session","name":"Create_session","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":111,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Create_session of {\n bootstrap : bool;\n name : string;\n window_name : string;\n spawn : Libtmux.Spawn.t;\n width : int;\n height : int;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":111,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Create_session","slug":"libtmux_workspace-plan-action-create_session"},{"id":"Libtmux_workspace.Plan.action.Create_session.bootstrap","publicId":"Libtmux_workspace.Plan.action.Create_session.bootstrap","name":"bootstrap","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":112,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"bootstrap : bool;","source":{"file":"workspace/libtmux_workspace.mli","line":112,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"bool","qualifiedName":"Libtmux_workspace.Plan.bootstrap","slug":"libtmux_workspace-plan-action-create_session-bootstrap"},{"id":"Libtmux_workspace.Plan.action.Create_session.height","publicId":"Libtmux_workspace.Plan.action.Create_session.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":117,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int;","source":{"file":"workspace/libtmux_workspace.mli","line":117,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"int","qualifiedName":"Libtmux_workspace.Plan.height","slug":"libtmux_workspace-plan-action-create_session-height"},{"id":"Libtmux_workspace.Plan.action.Create_session.name","publicId":"Libtmux_workspace.Plan.action.Create_session.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":113,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"workspace/libtmux_workspace.mli","line":113,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"string","qualifiedName":"Libtmux_workspace.Plan.name","slug":"libtmux_workspace-plan-action-create_session-name"},{"id":"Libtmux_workspace.Plan.action.Create_session.spawn","publicId":"Libtmux_workspace.Plan.action.Create_session.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":115,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Libtmux.Spawn.t;","source":{"file":"workspace/libtmux_workspace.mli","line":115,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"Libtmux.Spawn.t","qualifiedName":"Libtmux_workspace.Plan.spawn","slug":"libtmux_workspace-plan-action-create_session-spawn"},{"id":"Libtmux_workspace.Plan.action.Create_session.width","publicId":"Libtmux_workspace.Plan.action.Create_session.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":116,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"workspace/libtmux_workspace.mli","line":116,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"int","qualifiedName":"Libtmux_workspace.Plan.width","slug":"libtmux_workspace-plan-action-create_session-width"},{"id":"Libtmux_workspace.Plan.action.Create_session.window_name","publicId":"Libtmux_workspace.Plan.action.Create_session.window_name","name":"window_name","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":114,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_name : string;","source":{"file":"workspace/libtmux_workspace.mli","line":114,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"string","qualifiedName":"Libtmux_workspace.Plan.window_name","slug":"libtmux_workspace-plan-action-create_session-window_name"},{"id":"Libtmux_workspace.Plan.action.Create_window","publicId":"Libtmux_workspace.Plan.action.Create_window","name":"Create_window","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Create_window of { window : int; name : string; spawn : Libtmux.Spawn.t }","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Create_window","slug":"libtmux_workspace-plan-action-create_window"},{"id":"Libtmux_workspace.Plan.action.Create_window.name","publicId":"Libtmux_workspace.Plan.action.Create_window.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Create_window","type":"string","qualifiedName":"Libtmux_workspace.Plan.name","slug":"libtmux_workspace-plan-action-create_window-name"},{"id":"Libtmux_workspace.Plan.action.Create_window.spawn","publicId":"Libtmux_workspace.Plan.action.Create_window.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Libtmux.Spawn.t","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Create_window","type":"Libtmux.Spawn.t","qualifiedName":"Libtmux_workspace.Plan.spawn","slug":"libtmux_workspace-plan-action-create_window-spawn"},{"id":"Libtmux_workspace.Plan.action.Create_window.window","publicId":"Libtmux_workspace.Plan.action.Create_window.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : int;","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Create_window","type":"int","qualifiedName":"Libtmux_workspace.Plan.window","slug":"libtmux_workspace-plan-action-create_window-window"},{"id":"Libtmux_workspace.Plan.action.Select_layout","publicId":"Libtmux_workspace.Plan.action.Select_layout","name":"Select_layout","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Select_layout of int * Libtmux.Layout.t","source":{"file":"workspace/libtmux_workspace.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Select_layout","slug":"libtmux_workspace-plan-action-select_layout"},{"id":"Libtmux_workspace.Plan.action.Send_enter","publicId":"Libtmux_workspace.Plan.action.Send_enter","name":"Send_enter","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Send_enter of { window : int; pane : int }","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Send_enter","slug":"libtmux_workspace-plan-action-send_enter"},{"id":"Libtmux_workspace.Plan.action.Send_enter.pane","publicId":"Libtmux_workspace.Plan.action.Send_enter.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : int","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Send_enter","type":"int","qualifiedName":"Libtmux_workspace.Plan.pane","slug":"libtmux_workspace-plan-action-send_enter-pane"},{"id":"Libtmux_workspace.Plan.action.Send_enter.window","publicId":"Libtmux_workspace.Plan.action.Send_enter.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : int;","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Send_enter","type":"int","qualifiedName":"Libtmux_workspace.Plan.window","slug":"libtmux_workspace-plan-action-send_enter-window"},{"id":"Libtmux_workspace.Plan.action.Send_text","publicId":"Libtmux_workspace.Plan.action.Send_text","name":"Send_text","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Send_text of { window : int; pane : int; text : string }","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Send_text","slug":"libtmux_workspace-plan-action-send_text"},{"id":"Libtmux_workspace.Plan.action.Send_text.pane","publicId":"Libtmux_workspace.Plan.action.Send_text.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : int;","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Send_text","type":"int","qualifiedName":"Libtmux_workspace.Plan.pane","slug":"libtmux_workspace-plan-action-send_text-pane"},{"id":"Libtmux_workspace.Plan.action.Send_text.text","publicId":"Libtmux_workspace.Plan.action.Send_text.text","name":"text","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"text : string","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Send_text","type":"string","qualifiedName":"Libtmux_workspace.Plan.text","slug":"libtmux_workspace-plan-action-send_text-text"},{"id":"Libtmux_workspace.Plan.action.Send_text.window","publicId":"Libtmux_workspace.Plan.action.Send_text.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : int;","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Send_text","type":"int","qualifiedName":"Libtmux_workspace.Plan.window","slug":"libtmux_workspace-plan-action-send_text-window"},{"id":"Libtmux_workspace.Plan.action.Set_environment","publicId":"Libtmux_workspace.Plan.action.Set_environment","name":"Set_environment","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":127,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_environment of string * string","source":{"file":"workspace/libtmux_workspace.mli","line":127,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Set_environment","slug":"libtmux_workspace-plan-action-set_environment"},{"id":"Libtmux_workspace.Plan.action.Set_option","publicId":"Libtmux_workspace.Plan.action.Set_option","name":"Set_option","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":128,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_option of scope * Config.setting","source":{"file":"workspace/libtmux_workspace.mli","line":128,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Set_option","slug":"libtmux_workspace-plan-action-set_option"},{"id":"Libtmux_workspace.Plan.action.Split_pane","publicId":"Libtmux_workspace.Plan.action.Split_pane","name":"Split_pane","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":120,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Split_pane of {\n window : int;\n pane : int;\n spawn : Libtmux.Spawn.t;\n direction : Libtmux.Geometry.direction;\n size : Libtmux.Geometry.size option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":120,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Split_pane","slug":"libtmux_workspace-plan-action-split_pane"},{"id":"Libtmux_workspace.Plan.action.Split_pane.direction","publicId":"Libtmux_workspace.Plan.action.Split_pane.direction","name":"direction","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":124,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"direction : Libtmux.Geometry.direction;","source":{"file":"workspace/libtmux_workspace.mli","line":124,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Split_pane","type":"Libtmux.Geometry.direction","qualifiedName":"Libtmux_workspace.Plan.direction","slug":"libtmux_workspace-plan-action-split_pane-direction"},{"id":"Libtmux_workspace.Plan.action.Split_pane.pane","publicId":"Libtmux_workspace.Plan.action.Split_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":122,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : int;","source":{"file":"workspace/libtmux_workspace.mli","line":122,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Split_pane","type":"int","qualifiedName":"Libtmux_workspace.Plan.pane","slug":"libtmux_workspace-plan-action-split_pane-pane"},{"id":"Libtmux_workspace.Plan.action.Split_pane.size","publicId":"Libtmux_workspace.Plan.action.Split_pane.size","name":"size","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":125,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"size : Libtmux.Geometry.size option;","source":{"file":"workspace/libtmux_workspace.mli","line":125,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Split_pane","type":"Libtmux.Geometry.size option","qualifiedName":"Libtmux_workspace.Plan.size","slug":"libtmux_workspace-plan-action-split_pane-size"},{"id":"Libtmux_workspace.Plan.action.Split_pane.spawn","publicId":"Libtmux_workspace.Plan.action.Split_pane.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":123,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Libtmux.Spawn.t;","source":{"file":"workspace/libtmux_workspace.mli","line":123,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Split_pane","type":"Libtmux.Spawn.t","qualifiedName":"Libtmux_workspace.Plan.spawn","slug":"libtmux_workspace-plan-action-split_pane-spawn"},{"id":"Libtmux_workspace.Plan.action.Split_pane.window","publicId":"Libtmux_workspace.Plan.action.Split_pane.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":121,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : int;","source":{"file":"workspace/libtmux_workspace.mli","line":121,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.action.Split_pane","type":"int","qualifiedName":"Libtmux_workspace.Plan.window","slug":"libtmux_workspace-plan-action-split_pane-window"},{"id":"Libtmux_workspace.Plan.actions","publicId":"Libtmux_workspace.Plan.actions","qualifiedName":"Libtmux_workspace.Plan.actions","name":"actions","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":151,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val actions : t -> action Iarray.t","source":{"file":"workspace/libtmux_workspace.mli","line":151,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val actions : t -> action Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"action Iarray.t"}],"slug":"libtmux_workspace-plan-actions"},{"id":"Libtmux_workspace.Plan.check_source","publicId":"Libtmux_workspace.Plan.check_source","qualifiedName":"Libtmux_workspace.Plan.check_source","name":"check_source","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":154,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" Operational plans are ephemeral and bound to one connection generation. A\n printed or serialized preview cannot supply operational targets. "],"declarations":[{"kind":"function","text":"val check_source : t -> Libtmux.Source.t option -> (unit, error) result","source":{"file":"workspace/libtmux_workspace.mli","line":154,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","doc":{"summary":"Operational plans are ephemeral and bound to one connection generation. A printed or serialized preview cannot supply operational targets."},"signatures":[{"raw":"val check_source : t -> Libtmux.Source.t option -> (unit, error) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Source.t option"}],"returns":"(unit, error) result"}],"slug":"libtmux_workspace-plan-check_source"},{"id":"Libtmux_workspace.Plan.collision_policy","publicId":"Libtmux_workspace.Plan.collision_policy","qualifiedName":"Libtmux_workspace.Plan.collision_policy","name":"collision_policy","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":93,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type collision_policy =\n | Fail_if_session_exists\n | Append_new_windows of { window_collision : window_collision }","source":{"file":"workspace/libtmux_workspace.mli","line":93,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type collision_policy =\n | Fail_if_session_exists \n | Append_new_windows of {\n window_collision: window_collision } ","params":[]}],"slug":"libtmux_workspace-plan-collision_policy"},{"id":"Libtmux_workspace.Plan.collision_policy.Append_new_windows","publicId":"Libtmux_workspace.Plan.collision_policy.Append_new_windows","name":"Append_new_windows","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":95,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Append_new_windows of { window_collision : window_collision }","source":{"file":"workspace/libtmux_workspace.mli","line":95,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.collision_policy","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Append_new_windows","slug":"libtmux_workspace-plan-collision_policy-append_new_windows"},{"id":"Libtmux_workspace.Plan.collision_policy.Append_new_windows.window_collision","publicId":"Libtmux_workspace.Plan.collision_policy.Append_new_windows.window_collision","name":"window_collision","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":95,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_collision : window_collision","source":{"file":"workspace/libtmux_workspace.mli","line":95,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.collision_policy.Append_new_windows","type":"window_collision","qualifiedName":"Libtmux_workspace.Plan.window_collision","slug":"libtmux_workspace-plan-collision_policy-append_new_windows-window_collision"},{"id":"Libtmux_workspace.Plan.collision_policy.Fail_if_session_exists","publicId":"Libtmux_workspace.Plan.collision_policy.Fail_if_session_exists","name":"Fail_if_session_exists","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":94,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Fail_if_session_exists","source":{"file":"workspace/libtmux_workspace.mli","line":94,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.collision_policy","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Fail_if_session_exists","slug":"libtmux_workspace-plan-collision_policy-fail_if_session_exists"},{"id":"Libtmux_workspace.Plan.config","publicId":"Libtmux_workspace.Plan.config","qualifiedName":"Libtmux_workspace.Plan.config","name":"config","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":152,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val config : t -> Config.t","source":{"file":"workspace/libtmux_workspace.mli","line":152,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val config : t -> Config.t","params":[{"name":"arg1","type":"t"}],"returns":"Config.t"}],"slug":"libtmux_workspace-plan-config"},{"id":"Libtmux_workspace.Plan.endpoint","publicId":"Libtmux_workspace.Plan.endpoint","qualifiedName":"Libtmux_workspace.Plan.endpoint","name":"endpoint","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":148,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val endpoint : t -> Libtmux.Endpoint.t","source":{"file":"workspace/libtmux_workspace.mli","line":148,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val endpoint : t -> Libtmux.Endpoint.t","params":[{"name":"arg1","type":"t"}],"returns":"Libtmux.Endpoint.t"}],"slug":"libtmux_workspace-plan-endpoint"},{"id":"Libtmux_workspace.Plan.error","publicId":"Libtmux_workspace.Plan.error","qualifiedName":"Libtmux_workspace.Plan.error","name":"error","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":97,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type error =\n | Missing_endpoint\n | Session_conflict of string\n | Window_conflict of string\n | Append_session_options\n | Too_many_steps\n | Unsupported_setting of Config.error\n | Stale","source":{"file":"workspace/libtmux_workspace.mli","line":97,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type error =\n | Missing_endpoint \n | Session_conflict of string \n | Window_conflict of string \n | Append_session_options \n | Too_many_steps \n | Unsupported_setting of Config.error \n | Stale ","params":[]}],"slug":"libtmux_workspace-plan-error"},{"id":"Libtmux_workspace.Plan.error.Append_session_options","publicId":"Libtmux_workspace.Plan.error.Append_session_options","name":"Append_session_options","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":101,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Append_session_options","source":{"file":"workspace/libtmux_workspace.mli","line":101,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Append_session_options","slug":"libtmux_workspace-plan-error-append_session_options"},{"id":"Libtmux_workspace.Plan.error.Missing_endpoint","publicId":"Libtmux_workspace.Plan.error.Missing_endpoint","name":"Missing_endpoint","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":98,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Missing_endpoint","source":{"file":"workspace/libtmux_workspace.mli","line":98,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Missing_endpoint","slug":"libtmux_workspace-plan-error-missing_endpoint"},{"id":"Libtmux_workspace.Plan.error.Session_conflict","publicId":"Libtmux_workspace.Plan.error.Session_conflict","name":"Session_conflict","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":99,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Session_conflict of string","source":{"file":"workspace/libtmux_workspace.mli","line":99,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Session_conflict","slug":"libtmux_workspace-plan-error-session_conflict"},{"id":"Libtmux_workspace.Plan.error.Stale","publicId":"Libtmux_workspace.Plan.error.Stale","name":"Stale","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":104,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Stale","source":{"file":"workspace/libtmux_workspace.mli","line":104,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Stale","slug":"libtmux_workspace-plan-error-stale"},{"id":"Libtmux_workspace.Plan.error.Too_many_steps","publicId":"Libtmux_workspace.Plan.error.Too_many_steps","name":"Too_many_steps","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":102,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Too_many_steps","source":{"file":"workspace/libtmux_workspace.mli","line":102,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Too_many_steps","slug":"libtmux_workspace-plan-error-too_many_steps"},{"id":"Libtmux_workspace.Plan.error.Unsupported_setting","publicId":"Libtmux_workspace.Plan.error.Unsupported_setting","name":"Unsupported_setting","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":103,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported_setting of Config.error","source":{"file":"workspace/libtmux_workspace.mli","line":103,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Unsupported_setting","slug":"libtmux_workspace-plan-error-unsupported_setting"},{"id":"Libtmux_workspace.Plan.error.Window_conflict","publicId":"Libtmux_workspace.Plan.error.Window_conflict","name":"Window_conflict","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":100,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window_conflict of string","source":{"file":"workspace/libtmux_workspace.mli","line":100,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Window_conflict","slug":"libtmux_workspace-plan-error-window_conflict"},{"id":"Libtmux_workspace.Plan.existing_session","publicId":"Libtmux_workspace.Plan.existing_session","qualifiedName":"Libtmux_workspace.Plan.existing_session","name":"existing_session","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":150,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val existing_session : t -> Libtmux.Session.target option","source":{"file":"workspace/libtmux_workspace.mli","line":150,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val existing_session : t -> Libtmux.Session.target option","params":[{"name":"arg1","type":"t"}],"returns":"Libtmux.Session.target option"}],"slug":"libtmux_workspace-plan-existing_session"},{"id":"Libtmux_workspace.Plan.make","publicId":"Libtmux_workspace.Plan.make","qualifiedName":"Libtmux_workspace.Plan.make","name":"make","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[" [None] means an explicitly observed missing endpoint. It is not an empty\n successful snapshot. A plan does not start a server. Append rejects any\n existing requested window name and never changes session options.\n [version] selects the generated option catalog. "],"declarations":[{"kind":"function","text":"val make :\n ?server_policy:server_policy ->\n ?collision_policy:collision_policy ->\n endpoint:Libtmux.Endpoint.t ->\n version:string ->\n observed:Libtmux.Snapshot.t option ->\n Config.t ->\n (t, error) result","source":{"file":"workspace/libtmux_workspace.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","doc":{"summary":"`None` means an explicitly observed missing endpoint. It is not an empty successful snapshot. A plan does not start a server. Append rejects any existing requested window name and never changes session options. `version` selects the generated option catalog."},"signatures":[{"raw":"val make :\n ?server_policy:server_policy ->\n ?collision_policy:collision_policy ->\n endpoint:Libtmux.Endpoint.t ->\n version:string ->\n observed:Libtmux.Snapshot.t option -> Config.t -> (t, error) result","params":[{"name":"server_policy","type":"server_policy","optional":true,"keywordOnly":true},{"name":"collision_policy","type":"collision_policy","optional":true,"keywordOnly":true},{"name":"endpoint","type":"Libtmux.Endpoint.t","keywordOnly":true},{"name":"version","type":"string","keywordOnly":true},{"name":"observed","type":"Libtmux.Snapshot.t option","keywordOnly":true},{"name":"arg1","type":"Config.t"}],"returns":"(t, error) result"}],"slug":"libtmux_workspace-plan-make"},{"id":"Libtmux_workspace.Plan.pp_error","publicId":"Libtmux_workspace.Plan.pp_error","qualifiedName":"Libtmux_workspace.Plan.pp_error","name":"pp_error","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":106,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp_error : Format.formatter -> error -> unit","source":{"file":"workspace/libtmux_workspace.mli","line":106,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val pp_error : Format.formatter -> error -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"error"}],"returns":"unit"}],"slug":"libtmux_workspace-plan-pp_error"},{"id":"Libtmux_workspace.Plan.scope","publicId":"Libtmux_workspace.Plan.scope","qualifiedName":"Libtmux_workspace.Plan.scope","name":"scope","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type scope = Session | Window of int | Pane of { window : int; pane : int }","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type scope =\n | Session \n | Window of int \n | Pane of {\n window: int ;\n pane: int } ","params":[]}],"slug":"libtmux_workspace-plan-scope"},{"id":"Libtmux_workspace.Plan.scope.Pane","publicId":"Libtmux_workspace.Plan.scope.Pane","name":"Pane","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Pane of { window : int; pane : int }","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.scope","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Pane","slug":"libtmux_workspace-plan-scope-pane"},{"id":"Libtmux_workspace.Plan.scope.Pane.pane","publicId":"Libtmux_workspace.Plan.scope.Pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : int","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.scope.Pane","type":"int","qualifiedName":"Libtmux_workspace.Plan.pane","slug":"libtmux_workspace-plan-scope-pane-pane"},{"id":"Libtmux_workspace.Plan.scope.Pane.window","publicId":"Libtmux_workspace.Plan.scope.Pane.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : int;","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.scope.Pane","type":"int","qualifiedName":"Libtmux_workspace.Plan.window","slug":"libtmux_workspace-plan-scope-pane-window"},{"id":"Libtmux_workspace.Plan.scope.Session","publicId":"Libtmux_workspace.Plan.scope.Session","name":"Session","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Session","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.scope","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Session","slug":"libtmux_workspace-plan-scope-session"},{"id":"Libtmux_workspace.Plan.scope.Window","publicId":"Libtmux_workspace.Plan.scope.Window","name":"Window","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window of int","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.scope","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Window","slug":"libtmux_workspace-plan-scope-window"},{"id":"Libtmux_workspace.Plan.server_policy","publicId":"Libtmux_workspace.Plan.server_policy","qualifiedName":"Libtmux_workspace.Plan.server_policy","name":"server_policy","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type server_policy = Create_if_missing | Require_existing_server","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type server_policy =\n | Create_if_missing \n | Require_existing_server ","params":[]}],"slug":"libtmux_workspace-plan-server_policy"},{"id":"Libtmux_workspace.Plan.server_policy.Create_if_missing","publicId":"Libtmux_workspace.Plan.server_policy.Create_if_missing","name":"Create_if_missing","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Create_if_missing","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.server_policy","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Create_if_missing","slug":"libtmux_workspace-plan-server_policy-create_if_missing"},{"id":"Libtmux_workspace.Plan.server_policy.Require_existing_server","publicId":"Libtmux_workspace.Plan.server_policy.Require_existing_server","name":"Require_existing_server","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Require_existing_server","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.server_policy","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Require_existing_server","slug":"libtmux_workspace-plan-server_policy-require_existing_server"},{"id":"Libtmux_workspace.Plan.source","publicId":"Libtmux_workspace.Plan.source","qualifiedName":"Libtmux_workspace.Plan.source","name":"source","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":149,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Libtmux.Source.t option","source":{"file":"workspace/libtmux_workspace.mli","line":149,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val source : t -> Libtmux.Source.t option","params":[{"name":"arg1","type":"t"}],"returns":"Libtmux.Source.t option"}],"slug":"libtmux_workspace-plan-source"},{"id":"Libtmux_workspace.Plan.t","publicId":"Libtmux_workspace.Plan.t","qualifiedName":"Libtmux_workspace.Plan.t","name":"t","kind":"typealias","package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":133,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"workspace/libtmux_workspace.mli","line":133,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_workspace-plan-t"},{"id":"Libtmux_workspace.Plan.window_collision","publicId":"Libtmux_workspace.Plan.window_collision","qualifiedName":"Libtmux_workspace.Plan.window_collision","name":"window_collision","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":91,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type window_collision = Reject","source":{"file":"workspace/libtmux_workspace.mli","line":91,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type window_collision =\n | Reject ","params":[]}],"slug":"libtmux_workspace-plan-window_collision"},{"id":"Libtmux_workspace.Plan.window_collision.Reject","publicId":"Libtmux_workspace.Plan.window_collision.Reject","name":"Reject","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":91,"repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","extractedRevision":"205dfda49742592b479247049d186956e4a4cfe9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Reject","source":{"file":"workspace/libtmux_workspace.mli","line":91,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9"}}],"parent":"Libtmux_workspace.Plan.window_collision","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Reject","slug":"libtmux_workspace-plan-window_collision-reject"}]} +{"port":"ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","repo":"libtmux/libtmux-ocaml","sources":[{"product":"core","package":"libtmux","repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},{"product":"workspace","package":"libtmux-workspace","repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},{"product":"core","package":"libtmux-json","repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},{"product":"workspace","package":"libtmux-json","repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},{"product":"core","package":"libtmux-unix","repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},{"product":"workspace","package":"libtmux-unix","repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},{"product":"core","package":"libtmux-eio","repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},{"product":"workspace","package":"libtmux-eio","repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}],"extractor":"OCaml 5.5.2 compiler-libs .cmti + odoc-parser 3.2.2","nativeProvenance":{"files":[{"path":"lib/libtmux.mli","sha256":"cde6d0a89aeb60e3bffe3df003ffba1115d3a0c1318c6361a874202580797bfb"},{"path":"_build/install/default/lib/libtmux/libtmux.cmti","sha256":"296786db1d801c4a2ed7071b942a9c785f120474a9479aafda0837e8fcb00c18"},{"path":"workspace/libtmux_workspace.mli","sha256":"7f828d52abc58665510de7cf87bc03479d85feaaca5f00e678fda58f47713a4d"},{"path":"_build/install/default/lib/libtmux-workspace/libtmux_workspace.cmti","sha256":"5a55a369dde40b8a1261089043218e0bbb245f5ea09088365b7fc3dd91b82b7f"},{"path":"json/libtmux_json.mli","sha256":"0df1e135b74307a8ef363bcd484e499c463172f6a0451a8ebbd511ec8adb57bc"},{"path":"_build/install/default/lib/libtmux-json/libtmux_json.cmti","sha256":"1a065de46eb27da42755e3bef53c4de6ca30fcdd587556a0daef9bf6a6afbd6d"},{"path":"unix/libtmux_unix.mli","sha256":"9214d16ec2994a6a00609b16d956d1d18fc6ac41338cdc5a6b13d13db5369579"},{"path":"_build/install/default/lib/libtmux-unix/libtmux_unix.cmti","sha256":"a3160e78a090169e5ac4986a4e6c18edd1813513ed955115c45b71363d5149c8"},{"path":"eio/libtmux_eio.mli","sha256":"44f6a1a158b30676be1e32194881ed682bc6d8ff8517d3010a68ff66028bb3bb"},{"path":"_build/install/default/lib/libtmux-eio/libtmux_eio.cmti","sha256":"56e8a1b062ad37c54c145589b527f5fb11f08cc6ccda354edaf414f9371c902e"}],"exporter":{"revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","baseRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","files":[{"path":"tools/api_export.ml","sha256":"34b59e728494aeed3595c5a88e1a1482d7dfa65ddcda725e43cd6c21ee131945"},{"path":"tools/api_doc.ml","sha256":"94d9b4dff3f86d570a31161019e06cea250926200b8cc4562f7d14f9f3cd0d59"},{"path":"tools/export_api.py","sha256":"5188348adc7e3ea577889e144de30da6204ec14ec6fc1577f86a732bc7625973"},{"path":"tools/api_modules.json","sha256":"233ef409440fa5015f522a11933e74f059a301aecbce5ab5126f14e8a35614cf"},{"path":"tools/dune","sha256":"777e122d729870f9f8dc6fc13485ce0eea29f0e741b9bb22cb0245d433ff9442"}],"compiler":"5.5.2","schema":"libtmux.ocaml-api/1","publicManifest":"tools/api_modules.json"}},"symbols":[{"id":"Libtmux","publicId":"Libtmux","qualifiedName":"Libtmux","name":"Libtmux","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Native captured values, typed queries and explicit command descriptions.\n\n A {!Snapshot.t} owns immutable observations. Entity accessors and query\n evaluation perform no I/O, preserve captured order and remain usable after\n client closure. Use [Libtmux_unix.Client] or [Libtmux_eio.Client] to acquire\n or mutate state.\n\n Retaining any entity retains its complete snapshot graph. Copy scalar\n summaries when captured relationships are no longer needed. Targets omit the\n graph but remain restricted to their original {!Source.t}.\n\n {1 Typical flow}\n\n Capture explicitly, traverse {!Session.window_links} and {!Window.panes},\n filter with [Seq.filter] or {!Query.matching}, establish cardinality with\n {!Query.exactly_one}, then submit a command with a bound target.\n\n The core depends only on the standard library. Its abstract observations are\n safe to share; live clients and subscriptions belong to their backend.\n\n See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/graph.md}graph\n guide} for window links and the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/queries.md}query\n guide} for native predicates and typed expressions. "],"declarations":[{"kind":"module","text":"","source":{"file":"lib/libtmux.mli","line":1,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"doc":{"summary":"Native captured values, typed queries and explicit command descriptions.","body":"A {!Snapshot.t} owns immutable observations. Entity accessors and query evaluation perform no I/O, preserve captured order and remain usable after client closure. Use `Libtmux_unix.Client` or `Libtmux_eio.Client` to acquire or mutate state.\n\nRetaining any entity retains its complete snapshot graph. Copy scalar summaries when captured relationships are no longer needed. Targets omit the graph but remain restricted to their original {!Source.t}.\n\n## Typical flow\n\nCapture explicitly, traverse {!Session.window_links} and {!Window.panes}, filter with `Seq.filter` or {!Query.matching}, establish cardinality with {!Query.exactly_one}, then submit a command with a bound target.\n\nThe core depends only on the standard library. Its abstract observations are safe to share; live clients and subscriptions belong to their backend.\n\nSee the [graph guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/graph.md) for window links and the [query guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/queries.md) for native predicates and typed expressions."},"slug":"libtmux"},{"id":"Libtmux.Captured_text","publicId":"Libtmux.Captured_text","qualifiedName":"Libtmux.Captured_text","name":"Captured_text","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":712,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Captured_text : sig\n type t = {\n bytes : string;\n source : Source.t;\n pane : Pane.Id.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }\n (** Ordinary rendered rows captured over an interval. This value has no\n implied relationship to a subscription cursor. *)\nend","source":{"file":"lib/libtmux.mli","line":712,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","slug":"libtmux-captured_text"},{"id":"Libtmux.Captured_text.t","publicId":"Libtmux.Captured_text.t","qualifiedName":"Libtmux.Captured_text.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":713,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Ordinary rendered rows captured over an interval. This value has no\n implied relationship to a subscription cursor. "],"declarations":[{"kind":"struct","text":"type t = {\n bytes : string;\n source : Source.t;\n pane : Pane.Id.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }","source":{"file":"lib/libtmux.mli","line":713,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Captured_text","doc":{"summary":"Ordinary rendered rows captured over an interval. This value has no implied relationship to a subscription cursor."},"signatures":[{"raw":"type t =\n {\n bytes: string ;\n source: Source.t ;\n pane: Pane.Id.t ;\n started_at_ns: int64 ;\n finished_at_ns: int64 }","params":[]}],"slug":"libtmux-captured_text-t"},{"id":"Libtmux.Captured_text.t.bytes","publicId":"Libtmux.Captured_text.t.bytes","name":"bytes","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":714,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"bytes : string;","source":{"file":"lib/libtmux.mli","line":714,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Captured_text.t","type":"string","qualifiedName":"Libtmux.Captured_text.bytes","slug":"libtmux-captured_text-t-bytes"},{"id":"Libtmux.Captured_text.t.finished_at_ns","publicId":"Libtmux.Captured_text.t.finished_at_ns","name":"finished_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":718,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"finished_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":718,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Captured_text.t","type":"int64","qualifiedName":"Libtmux.Captured_text.finished_at_ns","slug":"libtmux-captured_text-t-finished_at_ns"},{"id":"Libtmux.Captured_text.t.pane","publicId":"Libtmux.Captured_text.t.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":716,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.Id.t;","source":{"file":"lib/libtmux.mli","line":716,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Captured_text.t","type":"Pane.Id.t","qualifiedName":"Libtmux.Captured_text.pane","slug":"libtmux-captured_text-t-pane"},{"id":"Libtmux.Captured_text.t.source","publicId":"Libtmux.Captured_text.t.source","name":"source","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":715,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"source : Source.t;","source":{"file":"lib/libtmux.mli","line":715,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Captured_text.t","type":"Source.t","qualifiedName":"Libtmux.Captured_text.source","slug":"libtmux-captured_text-t-source"},{"id":"Libtmux.Captured_text.t.started_at_ns","publicId":"Libtmux.Captured_text.t.started_at_ns","name":"started_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":717,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"started_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":717,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Captured_text.t","type":"int64","qualifiedName":"Libtmux.Captured_text.started_at_ns","slug":"libtmux-captured_text-t-started_at_ns"},{"id":"Libtmux.Cardinality","publicId":"Libtmux.Cardinality","qualifiedName":"Libtmux.Cardinality","name":"Cardinality","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":685,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Cardinality : sig\n type error = No_match | Multiple_matches of { at_least : int }\n\n val pp_error : Format.formatter -> error -> unit\nend","source":{"file":"lib/libtmux.mli","line":685,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","slug":"libtmux-cardinality"},{"id":"Libtmux.Cardinality.error","publicId":"Libtmux.Cardinality.error","qualifiedName":"Libtmux.Cardinality.error","name":"error","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":686,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type error = No_match | Multiple_matches of { at_least : int }","source":{"file":"lib/libtmux.mli","line":686,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Cardinality","signatures":[{"raw":"type error =\n | No_match \n | Multiple_matches of {\n at_least: int } ","params":[]}],"slug":"libtmux-cardinality-error"},{"id":"Libtmux.Cardinality.error.Multiple_matches","publicId":"Libtmux.Cardinality.error.Multiple_matches","name":"Multiple_matches","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":686,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Multiple_matches of { at_least : int }","source":{"file":"lib/libtmux.mli","line":686,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Cardinality.error","variant":"struct","qualifiedName":"Libtmux.Cardinality.Multiple_matches","slug":"libtmux-cardinality-error-multiple_matches"},{"id":"Libtmux.Cardinality.error.Multiple_matches.at_least","publicId":"Libtmux.Cardinality.error.Multiple_matches.at_least","name":"at_least","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":686,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"at_least : int","source":{"file":"lib/libtmux.mli","line":686,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Cardinality.error.Multiple_matches","type":"int","qualifiedName":"Libtmux.Cardinality.at_least","slug":"libtmux-cardinality-error-multiple_matches-at_least"},{"id":"Libtmux.Cardinality.error.No_match","publicId":"Libtmux.Cardinality.error.No_match","name":"No_match","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":686,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"No_match","source":{"file":"lib/libtmux.mli","line":686,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Cardinality.error","variant":"unit","qualifiedName":"Libtmux.Cardinality.No_match","slug":"libtmux-cardinality-error-no_match"},{"id":"Libtmux.Cardinality.pp_error","publicId":"Libtmux.Cardinality.pp_error","qualifiedName":"Libtmux.Cardinality.pp_error","name":"pp_error","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":688,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp_error : Format.formatter -> error -> unit","source":{"file":"lib/libtmux.mli","line":688,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Cardinality","signatures":[{"raw":"val pp_error : Format.formatter -> error -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"error"}],"returns":"unit"}],"slug":"libtmux-cardinality-pp_error"},{"id":"Libtmux.Client_name","publicId":"Libtmux.Client_name","qualifiedName":"Libtmux.Client_name","name":"Client_name","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Client_name : sig\n type t\n (** A name in one connection generation, with current-name semantics. It does\n not identify a stable client incarnation; tmux may reuse client names. *)\n\n val source : t -> Source.t\n val to_string : t -> string\nend","source":{"file":"lib/libtmux.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","slug":"libtmux-client_name"},{"id":"Libtmux.Client_name.source","publicId":"Libtmux.Client_name.source","qualifiedName":"Libtmux.Client_name.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":124,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":124,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_name","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-client_name-source"},{"id":"Libtmux.Client_name.t","publicId":"Libtmux.Client_name.t","qualifiedName":"Libtmux.Client_name.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":120,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" A name in one connection generation, with current-name semantics. It does\n not identify a stable client incarnation; tmux may reuse client names. "],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":120,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_name","doc":{"summary":"A name in one connection generation, with current-name semantics. It does not identify a stable client incarnation; tmux may reuse client names."},"signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-client_name-t"},{"id":"Libtmux.Client_name.to_string","publicId":"Libtmux.Client_name.to_string","qualifiedName":"Libtmux.Client_name.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":125,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":125,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_name","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-client_name-to_string"},{"id":"Libtmux.Client_observation","publicId":"Libtmux.Client_observation","qualifiedName":"Libtmux.Client_observation","name":"Client_observation","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":365,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"and Client_observation : sig\n type t\n\n module Fields : sig\n val name : (t, string) Field.t\n val pid : (t, int) Field.t\n val width : (t, int) Field.t\n val control_mode : (t, bool) Field.t\n end\n\n module Relations : sig\n val session : (t, Session.t) Relation.Optional.t\n end\n\n val name : t -> string\n val pid : t -> int\n val width : t -> int\n\n val height : t -> int option\n (** No height is reported until the client has a started terminal. *)\n\n val control_mode : t -> bool\n val source : t -> Source.t\n\n val current_name : t -> Client_name.t\n (** Address whichever client has this name when a command executes. *)\n\n val session : t -> Session.t option\n (** [None] means the captured client has no attached session. *)\n\n val same_observation : t -> t -> bool\n (** Client names may be reused. No cross-snapshot entity equality is offered.\n *)\nend","source":{"file":"lib/libtmux.mli","line":365,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","slug":"libtmux-client_observation"},{"id":"Libtmux.Client_observation.Fields","publicId":"Libtmux.Client_observation.Fields","qualifiedName":"Libtmux.Client_observation.Fields","name":"Fields","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":368,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Fields : sig\n val name : (t, string) Field.t\n val pid : (t, int) Field.t\n val width : (t, int) Field.t\n val control_mode : (t, bool) Field.t\n end","source":{"file":"lib/libtmux.mli","line":368,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","slug":"libtmux-client_observation-fields"},{"id":"Libtmux.Client_observation.Fields.control_mode","publicId":"Libtmux.Client_observation.Fields.control_mode","qualifiedName":"Libtmux.Client_observation.Fields.control_mode","name":"control_mode","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":372,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val control_mode : (t, bool) Field.t","source":{"file":"lib/libtmux.mli","line":372,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation.Fields","signatures":[{"raw":"val control_mode : (t, bool) Field.t","params":[],"returns":"(t, bool) Field.t"}],"slug":"libtmux-client_observation-fields-control_mode"},{"id":"Libtmux.Client_observation.Fields.name","publicId":"Libtmux.Client_observation.Fields.name","qualifiedName":"Libtmux.Client_observation.Fields.name","name":"name","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":369,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val name : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":369,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation.Fields","signatures":[{"raw":"val name : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-client_observation-fields-name"},{"id":"Libtmux.Client_observation.Fields.pid","publicId":"Libtmux.Client_observation.Fields.pid","qualifiedName":"Libtmux.Client_observation.Fields.pid","name":"pid","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":370,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val pid : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":370,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation.Fields","signatures":[{"raw":"val pid : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-client_observation-fields-pid"},{"id":"Libtmux.Client_observation.Fields.width","publicId":"Libtmux.Client_observation.Fields.width","qualifiedName":"Libtmux.Client_observation.Fields.width","name":"width","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":371,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val width : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":371,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation.Fields","signatures":[{"raw":"val width : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-client_observation-fields-width"},{"id":"Libtmux.Client_observation.Relations","publicId":"Libtmux.Client_observation.Relations","qualifiedName":"Libtmux.Client_observation.Relations","name":"Relations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":375,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Relations : sig\n val session : (t, Session.t) Relation.Optional.t\n end","source":{"file":"lib/libtmux.mli","line":375,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","slug":"libtmux-client_observation-relations"},{"id":"Libtmux.Client_observation.Relations.session","publicId":"Libtmux.Client_observation.Relations.session","qualifiedName":"Libtmux.Client_observation.Relations.session","name":"session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":376,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val session : (t, Session.t) Relation.Optional.t","source":{"file":"lib/libtmux.mli","line":376,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation.Relations","signatures":[{"raw":"val session : (t, Session.t) Relation.Optional.t","params":[],"returns":"(t, Session.t) Relation.Optional.t"}],"slug":"libtmux-client_observation-relations-session"},{"id":"Libtmux.Client_observation.control_mode","publicId":"Libtmux.Client_observation.control_mode","qualifiedName":"Libtmux.Client_observation.control_mode","name":"control_mode","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":386,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val control_mode : t -> bool","source":{"file":"lib/libtmux.mli","line":386,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"val control_mode : t -> bool","params":[{"name":"arg1","type":"t"}],"returns":"bool"}],"slug":"libtmux-client_observation-control_mode"},{"id":"Libtmux.Client_observation.current_name","publicId":"Libtmux.Client_observation.current_name","qualifiedName":"Libtmux.Client_observation.current_name","name":"current_name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":389,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Address whichever client has this name when a command executes. "],"declarations":[{"kind":"function","text":"val current_name : t -> Client_name.t","source":{"file":"lib/libtmux.mli","line":389,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","doc":{"summary":"Address whichever client has this name when a command executes."},"signatures":[{"raw":"val current_name : t -> Client_name.t","params":[{"name":"arg1","type":"t"}],"returns":"Client_name.t"}],"slug":"libtmux-client_observation-current_name"},{"id":"Libtmux.Client_observation.height","publicId":"Libtmux.Client_observation.height","qualifiedName":"Libtmux.Client_observation.height","name":"height","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":383,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" No height is reported until the client has a started terminal. "],"declarations":[{"kind":"function","text":"val height : t -> int option","source":{"file":"lib/libtmux.mli","line":383,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","doc":{"summary":"No height is reported until the client has a started terminal."},"signatures":[{"raw":"val height : t -> int option","params":[{"name":"arg1","type":"t"}],"returns":"int option"}],"slug":"libtmux-client_observation-height"},{"id":"Libtmux.Client_observation.name","publicId":"Libtmux.Client_observation.name","qualifiedName":"Libtmux.Client_observation.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":379,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : t -> string","source":{"file":"lib/libtmux.mli","line":379,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"val name : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-client_observation-name"},{"id":"Libtmux.Client_observation.pid","publicId":"Libtmux.Client_observation.pid","qualifiedName":"Libtmux.Client_observation.pid","name":"pid","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":380,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pid : t -> int","source":{"file":"lib/libtmux.mli","line":380,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"val pid : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-client_observation-pid"},{"id":"Libtmux.Client_observation.same_observation","publicId":"Libtmux.Client_observation.same_observation","qualifiedName":"Libtmux.Client_observation.same_observation","name":"same_observation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":395,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Client names may be reused. No cross-snapshot entity equality is offered.\n "],"declarations":[{"kind":"function","text":"val same_observation : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":395,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","doc":{"summary":"Client names may be reused. No cross-snapshot entity equality is offered."},"signatures":[{"raw":"val same_observation : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-client_observation-same_observation"},{"id":"Libtmux.Client_observation.session","publicId":"Libtmux.Client_observation.session","qualifiedName":"Libtmux.Client_observation.session","name":"session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":392,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" [None] means the captured client has no attached session. "],"declarations":[{"kind":"function","text":"val session : t -> Session.t option","source":{"file":"lib/libtmux.mli","line":392,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","doc":{"summary":"`None` means the captured client has no attached session."},"signatures":[{"raw":"val session : t -> Session.t option","params":[{"name":"arg1","type":"t"}],"returns":"Session.t option"}],"slug":"libtmux-client_observation-session"},{"id":"Libtmux.Client_observation.source","publicId":"Libtmux.Client_observation.source","qualifiedName":"Libtmux.Client_observation.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":387,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":387,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-client_observation-source"},{"id":"Libtmux.Client_observation.t","publicId":"Libtmux.Client_observation.t","qualifiedName":"Libtmux.Client_observation.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":366,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":366,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-client_observation-t"},{"id":"Libtmux.Client_observation.width","publicId":"Libtmux.Client_observation.width","qualifiedName":"Libtmux.Client_observation.width","name":"width","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":381,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val width : t -> int","source":{"file":"lib/libtmux.mli","line":381,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Client_observation","signatures":[{"raw":"val width : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-client_observation-width"},{"id":"Libtmux.Command","publicId":"Libtmux.Command","qualifiedName":"Libtmux.Command","name":"Command","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":883,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Typed descriptions of explicit acquisition and mutation operations.\n Construction performs no I/O; a backend validates and admits the command. "],"declarations":[{"kind":"module","text":"module Command : sig\n type mutation =\n | Kill_session of Session.target\n | Kill_window of Window.target\n | Kill_pane of Pane.target\n | Select_window_at of Session.target * int\n | Unlink_window_at of {\n session : Session.target;\n index : int;\n allow_kill : bool;\n }\n | Link_window of {\n window : Window.target;\n session : Session.target;\n index : int;\n }\n | Move_window_at of {\n from_session : Session.target;\n from_index : int;\n session : Session.target;\n index : int;\n }\n | Select_pane of Pane.target\n | Set_pane_title of Pane.target * string\n | Resize_pane of {\n pane : Pane.target;\n width : int option;\n height : int option;\n }\n | Resize_window of {\n window : Window.target;\n width : int option;\n height : int option;\n }\n | Select_layout of Window.target * Layout.t\n | Cycle_layout of Window.target * [ `Next | `Previous ]\n | Move_pane of {\n pane : Pane.target;\n beside : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n }\n | Swap_panes of Pane.target * Pane.target\n | Rotate_panes of Window.target * [ `Forward | `Backward ]\n | Zoom_pane of Pane.target\n | Respawn_pane of {\n pane : Pane.target;\n spawn : Spawn.t;\n kill_running : bool;\n }\n | Clear_history of Pane.target\n | Set_environment of {\n scope : Environment.scope;\n name : string;\n value : string;\n hidden : bool;\n }\n | Unset_environment of Environment.scope * string\n | Remove_environment of Environment.scope * string\n | Set_option of {\n scope : Options.scope;\n name : string;\n index : int option;\n value : Options.scalar;\n append : bool;\n }\n | Unset_option of Options.scope * string * int option\n | Clear_option_array of Options.scope * string\n | Set_hook of {\n scope : Options.scope;\n name : string;\n index : int option;\n commands : Hook.command list;\n append : bool;\n }\n | Remove_hook of Options.scope * string * int option\n | Run_hook of Options.scope * string\n | Switch_client_at of {\n client : Client_name.t;\n session : Session.target;\n update_environment : bool;\n }\n | Request_detach_client_at of Client_name.t\n | Refresh_client_at of Client_name.t * bool\n | Resize_control_client_at of {\n client : Client_name.t;\n width : int;\n height : int;\n }\n\n type 'a t\n (** An immutable description, validated by a backend before admission.\n Constructing or inspecting it performs no I/O. *)\n\n type _ view =\n | Capture : Snapshot.t view\n | Capture_text : {\n pane : Pane.t;\n start : int;\n end_ : int;\n scratch_dir : string;\n }\n -> Captured_text.t view\n | Rename_window : Window.target * string -> unit view\n | Rename_session : Session.target * string -> unit view\n | Send_text : Pane.target * string -> unit view\n | Send_keys : Pane.target * Key.t list -> unit view\n | Wait_for : string -> unit view\n | Signal : string -> unit view\n | Capture_environment : Environment.scope * bool -> Environment.t view\n | Capture_options : Options.scope * bool -> Options.t view\n | Read_option : Options.scope * string * bool -> Options.value option view\n | Capture_hooks : Options.scope -> Options.t view\n | Read_hook : Options.scope * string * bool -> Options.value option view\n | Mutate : mutation -> unit view\n | Create_session : {\n name : string;\n window_name : string option;\n width : int;\n height : int;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Create_window : {\n session : Session.target;\n index : int option;\n name : string option;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Split_pane : {\n pane : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Break_pane : {\n pane : Pane.target;\n session : Session.target;\n index : int;\n name : string option;\n }\n -> Created.t view\n\n val view : 'a t -> 'a view\n (** Read-only inspection for transport adapters. *)\nend","source":{"file":"lib/libtmux.mli","line":883,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Typed descriptions of explicit acquisition and mutation operations. Construction performs no I/O; a backend validates and admits the command."},"slug":"libtmux-command"},{"id":"Libtmux.Command.mutation","publicId":"Libtmux.Command.mutation","qualifiedName":"Libtmux.Command.mutation","name":"mutation","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":884,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type mutation =\n | Kill_session of Session.target\n | Kill_window of Window.target\n | Kill_pane of Pane.target\n | Select_window_at of Session.target * int\n | Unlink_window_at of {\n session : Session.target;\n index : int;\n allow_kill : bool;\n }\n | Link_window of {\n window : Window.target;\n session : Session.target;\n index : int;\n }\n | Move_window_at of {\n from_session : Session.target;\n from_index : int;\n session : Session.target;\n index : int;\n }\n | Select_pane of Pane.target\n | Set_pane_title of Pane.target * string\n | Resize_pane of {\n pane : Pane.target;\n width : int option;\n height : int option;\n }\n | Resize_window of {\n window : Window.target;\n width : int option;\n height : int option;\n }\n | Select_layout of Window.target * Layout.t\n | Cycle_layout of Window.target * [ `Next | `Previous ]\n | Move_pane of {\n pane : Pane.target;\n beside : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n }\n | Swap_panes of Pane.target * Pane.target\n | Rotate_panes of Window.target * [ `Forward | `Backward ]\n | Zoom_pane of Pane.target\n | Respawn_pane of {\n pane : Pane.target;\n spawn : Spawn.t;\n kill_running : bool;\n }\n | Clear_history of Pane.target\n | Set_environment of {\n scope : Environment.scope;\n name : string;\n value : string;\n hidden : bool;\n }\n | Unset_environment of Environment.scope * string\n | Remove_environment of Environment.scope * string\n | Set_option of {\n scope : Options.scope;\n name : string;\n index : int option;\n value : Options.scalar;\n append : bool;\n }\n | Unset_option of Options.scope * string * int option\n | Clear_option_array of Options.scope * string\n | Set_hook of {\n scope : Options.scope;\n name : string;\n index : int option;\n commands : Hook.command list;\n append : bool;\n }\n | Remove_hook of Options.scope * string * int option\n | Run_hook of Options.scope * string\n | Switch_client_at of {\n client : Client_name.t;\n session : Session.target;\n update_environment : bool;\n }\n | Request_detach_client_at of Client_name.t\n | Refresh_client_at of Client_name.t * bool\n | Resize_control_client_at of {\n client : Client_name.t;\n width : int;\n height : int;\n }","source":{"file":"lib/libtmux.mli","line":884,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command","signatures":[{"raw":"type mutation =\n | Kill_session of Session.target \n | Kill_window of Window.target \n | Kill_pane of Pane.target \n | Select_window_at of Session.target * int \n | Unlink_window_at of\n {\n session: Session.target ;\n index: int ;\n allow_kill: bool } \n | Link_window of\n {\n window: Window.target ;\n session: Session.target ;\n index: int } \n | Move_window_at of\n {\n from_session: Session.target ;\n from_index: int ;\n session: Session.target ;\n index: int } \n | Select_pane of Pane.target \n | Set_pane_title of Pane.target * string \n | Resize_pane of\n {\n pane: Pane.target ;\n width: int option ;\n height: int option } \n | Resize_window of\n {\n window: Window.target ;\n width: int option ;\n height: int option } \n | Select_layout of Window.target * Layout.t \n | Cycle_layout of Window.target * [ `Next | `Previous ] \n | Move_pane of\n {\n pane: Pane.target ;\n beside: Pane.target ;\n direction: Geometry.direction ;\n size: Geometry.size option } \n | Swap_panes of Pane.target * Pane.target \n | Rotate_panes of Window.target * [ `Forward | `Backward ] \n | Zoom_pane of Pane.target \n | Respawn_pane of {\n pane: Pane.target ;\n spawn: Spawn.t ;\n kill_running: bool } \n | Clear_history of Pane.target \n | Set_environment of\n {\n scope: Environment.scope ;\n name: string ;\n value: string ;\n hidden: bool } \n | Unset_environment of Environment.scope * string \n | Remove_environment of Environment.scope * string \n | Set_option of\n {\n scope: Options.scope ;\n name: string ;\n index: int option ;\n value: Options.scalar ;\n append: bool } \n | Unset_option of Options.scope * string * int option \n | Clear_option_array of Options.scope * string \n | Set_hook of\n {\n scope: Options.scope ;\n name: string ;\n index: int option ;\n commands: Hook.command list ;\n append: bool } \n | Remove_hook of Options.scope * string * int option \n | Run_hook of Options.scope * string \n | Switch_client_at of\n {\n client: Client_name.t ;\n session: Session.target ;\n update_environment: bool } \n | Request_detach_client_at of Client_name.t \n | Refresh_client_at of Client_name.t * bool \n | Resize_control_client_at of\n {\n client: Client_name.t ;\n width: int ;\n height: int } ","params":[]}],"slug":"libtmux-command-mutation"},{"id":"Libtmux.Command.mutation.Clear_history","publicId":"Libtmux.Command.mutation.Clear_history","name":"Clear_history","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":933,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Clear_history of Pane.target","source":{"file":"lib/libtmux.mli","line":933,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Clear_history","slug":"libtmux-command-mutation-clear_history"},{"id":"Libtmux.Command.mutation.Clear_option_array","publicId":"Libtmux.Command.mutation.Clear_option_array","name":"Clear_option_array","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":950,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Clear_option_array of Options.scope * string","source":{"file":"lib/libtmux.mli","line":950,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Clear_option_array","slug":"libtmux-command-mutation-clear_option_array"},{"id":"Libtmux.Command.mutation.Cycle_layout","publicId":"Libtmux.Command.mutation.Cycle_layout","name":"Cycle_layout","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":918,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Cycle_layout of Window.target * [ `Next | `Previous ]","source":{"file":"lib/libtmux.mli","line":918,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Cycle_layout","slug":"libtmux-command-mutation-cycle_layout"},{"id":"Libtmux.Command.mutation.Kill_pane","publicId":"Libtmux.Command.mutation.Kill_pane","name":"Kill_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":887,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Kill_pane of Pane.target","source":{"file":"lib/libtmux.mli","line":887,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Kill_pane","slug":"libtmux-command-mutation-kill_pane"},{"id":"Libtmux.Command.mutation.Kill_session","publicId":"Libtmux.Command.mutation.Kill_session","name":"Kill_session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":885,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Kill_session of Session.target","source":{"file":"lib/libtmux.mli","line":885,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Kill_session","slug":"libtmux-command-mutation-kill_session"},{"id":"Libtmux.Command.mutation.Kill_window","publicId":"Libtmux.Command.mutation.Kill_window","name":"Kill_window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":886,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Kill_window of Window.target","source":{"file":"lib/libtmux.mli","line":886,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Kill_window","slug":"libtmux-command-mutation-kill_window"},{"id":"Libtmux.Command.mutation.Link_window","publicId":"Libtmux.Command.mutation.Link_window","name":"Link_window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":894,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Link_window of {\n window : Window.target;\n session : Session.target;\n index : int;\n }","source":{"file":"lib/libtmux.mli","line":894,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Link_window","slug":"libtmux-command-mutation-link_window"},{"id":"Libtmux.Command.mutation.Link_window.index","publicId":"Libtmux.Command.mutation.Link_window.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":897,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":897,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Link_window","type":"int","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-mutation-link_window-index"},{"id":"Libtmux.Command.mutation.Link_window.session","publicId":"Libtmux.Command.mutation.Link_window.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":896,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":896,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Link_window","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-mutation-link_window-session"},{"id":"Libtmux.Command.mutation.Link_window.window","publicId":"Libtmux.Command.mutation.Link_window.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":895,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : Window.target;","source":{"file":"lib/libtmux.mli","line":895,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Link_window","type":"Window.target","qualifiedName":"Libtmux.Command.window","slug":"libtmux-command-mutation-link_window-window"},{"id":"Libtmux.Command.mutation.Move_pane","publicId":"Libtmux.Command.mutation.Move_pane","name":"Move_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":919,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Move_pane of {\n pane : Pane.target;\n beside : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n }","source":{"file":"lib/libtmux.mli","line":919,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Move_pane","slug":"libtmux-command-mutation-move_pane"},{"id":"Libtmux.Command.mutation.Move_pane.beside","publicId":"Libtmux.Command.mutation.Move_pane.beside","name":"beside","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":921,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"beside : Pane.target;","source":{"file":"lib/libtmux.mli","line":921,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Move_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.beside","slug":"libtmux-command-mutation-move_pane-beside"},{"id":"Libtmux.Command.mutation.Move_pane.direction","publicId":"Libtmux.Command.mutation.Move_pane.direction","name":"direction","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":922,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"direction : Geometry.direction;","source":{"file":"lib/libtmux.mli","line":922,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Move_pane","type":"Geometry.direction","qualifiedName":"Libtmux.Command.direction","slug":"libtmux-command-mutation-move_pane-direction"},{"id":"Libtmux.Command.mutation.Move_pane.pane","publicId":"Libtmux.Command.mutation.Move_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":920,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":920,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Move_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-mutation-move_pane-pane"},{"id":"Libtmux.Command.mutation.Move_pane.size","publicId":"Libtmux.Command.mutation.Move_pane.size","name":"size","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":923,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"size : Geometry.size option;","source":{"file":"lib/libtmux.mli","line":923,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Move_pane","type":"Geometry.size option","qualifiedName":"Libtmux.Command.size","slug":"libtmux-command-mutation-move_pane-size"},{"id":"Libtmux.Command.mutation.Move_window_at","publicId":"Libtmux.Command.mutation.Move_window_at","name":"Move_window_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":899,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Move_window_at of {\n from_session : Session.target;\n from_index : int;\n session : Session.target;\n index : int;\n }","source":{"file":"lib/libtmux.mli","line":899,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Move_window_at","slug":"libtmux-command-mutation-move_window_at"},{"id":"Libtmux.Command.mutation.Move_window_at.from_index","publicId":"Libtmux.Command.mutation.Move_window_at.from_index","name":"from_index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":901,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"from_index : int;","source":{"file":"lib/libtmux.mli","line":901,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Move_window_at","type":"int","qualifiedName":"Libtmux.Command.from_index","slug":"libtmux-command-mutation-move_window_at-from_index"},{"id":"Libtmux.Command.mutation.Move_window_at.from_session","publicId":"Libtmux.Command.mutation.Move_window_at.from_session","name":"from_session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":900,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"from_session : Session.target;","source":{"file":"lib/libtmux.mli","line":900,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Move_window_at","type":"Session.target","qualifiedName":"Libtmux.Command.from_session","slug":"libtmux-command-mutation-move_window_at-from_session"},{"id":"Libtmux.Command.mutation.Move_window_at.index","publicId":"Libtmux.Command.mutation.Move_window_at.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":903,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":903,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Move_window_at","type":"int","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-mutation-move_window_at-index"},{"id":"Libtmux.Command.mutation.Move_window_at.session","publicId":"Libtmux.Command.mutation.Move_window_at.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":902,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":902,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Move_window_at","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-mutation-move_window_at-session"},{"id":"Libtmux.Command.mutation.Refresh_client_at","publicId":"Libtmux.Command.mutation.Refresh_client_at","name":"Refresh_client_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":966,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Refresh_client_at of Client_name.t * bool","source":{"file":"lib/libtmux.mli","line":966,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Refresh_client_at","slug":"libtmux-command-mutation-refresh_client_at"},{"id":"Libtmux.Command.mutation.Remove_environment","publicId":"Libtmux.Command.mutation.Remove_environment","name":"Remove_environment","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":941,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Remove_environment of Environment.scope * string","source":{"file":"lib/libtmux.mli","line":941,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Remove_environment","slug":"libtmux-command-mutation-remove_environment"},{"id":"Libtmux.Command.mutation.Remove_hook","publicId":"Libtmux.Command.mutation.Remove_hook","name":"Remove_hook","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":958,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Remove_hook of Options.scope * string * int option","source":{"file":"lib/libtmux.mli","line":958,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Remove_hook","slug":"libtmux-command-mutation-remove_hook"},{"id":"Libtmux.Command.mutation.Request_detach_client_at","publicId":"Libtmux.Command.mutation.Request_detach_client_at","name":"Request_detach_client_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":965,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Request_detach_client_at of Client_name.t","source":{"file":"lib/libtmux.mli","line":965,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Request_detach_client_at","slug":"libtmux-command-mutation-request_detach_client_at"},{"id":"Libtmux.Command.mutation.Resize_control_client_at","publicId":"Libtmux.Command.mutation.Resize_control_client_at","name":"Resize_control_client_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":967,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Resize_control_client_at of {\n client : Client_name.t;\n width : int;\n height : int;\n }","source":{"file":"lib/libtmux.mli","line":967,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Resize_control_client_at","slug":"libtmux-command-mutation-resize_control_client_at"},{"id":"Libtmux.Command.mutation.Resize_control_client_at.client","publicId":"Libtmux.Command.mutation.Resize_control_client_at.client","name":"client","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":968,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"client : Client_name.t;","source":{"file":"lib/libtmux.mli","line":968,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Resize_control_client_at","type":"Client_name.t","qualifiedName":"Libtmux.Command.client","slug":"libtmux-command-mutation-resize_control_client_at-client"},{"id":"Libtmux.Command.mutation.Resize_control_client_at.height","publicId":"Libtmux.Command.mutation.Resize_control_client_at.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":970,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int;","source":{"file":"lib/libtmux.mli","line":970,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Resize_control_client_at","type":"int","qualifiedName":"Libtmux.Command.height","slug":"libtmux-command-mutation-resize_control_client_at-height"},{"id":"Libtmux.Command.mutation.Resize_control_client_at.width","publicId":"Libtmux.Command.mutation.Resize_control_client_at.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":969,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"lib/libtmux.mli","line":969,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Resize_control_client_at","type":"int","qualifiedName":"Libtmux.Command.width","slug":"libtmux-command-mutation-resize_control_client_at-width"},{"id":"Libtmux.Command.mutation.Resize_pane","publicId":"Libtmux.Command.mutation.Resize_pane","name":"Resize_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":907,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Resize_pane of {\n pane : Pane.target;\n width : int option;\n height : int option;\n }","source":{"file":"lib/libtmux.mli","line":907,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Resize_pane","slug":"libtmux-command-mutation-resize_pane"},{"id":"Libtmux.Command.mutation.Resize_pane.height","publicId":"Libtmux.Command.mutation.Resize_pane.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":910,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int option;","source":{"file":"lib/libtmux.mli","line":910,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Resize_pane","type":"int option","qualifiedName":"Libtmux.Command.height","slug":"libtmux-command-mutation-resize_pane-height"},{"id":"Libtmux.Command.mutation.Resize_pane.pane","publicId":"Libtmux.Command.mutation.Resize_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":908,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":908,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Resize_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-mutation-resize_pane-pane"},{"id":"Libtmux.Command.mutation.Resize_pane.width","publicId":"Libtmux.Command.mutation.Resize_pane.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":909,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int option;","source":{"file":"lib/libtmux.mli","line":909,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Resize_pane","type":"int option","qualifiedName":"Libtmux.Command.width","slug":"libtmux-command-mutation-resize_pane-width"},{"id":"Libtmux.Command.mutation.Resize_window","publicId":"Libtmux.Command.mutation.Resize_window","name":"Resize_window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":912,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Resize_window of {\n window : Window.target;\n width : int option;\n height : int option;\n }","source":{"file":"lib/libtmux.mli","line":912,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Resize_window","slug":"libtmux-command-mutation-resize_window"},{"id":"Libtmux.Command.mutation.Resize_window.height","publicId":"Libtmux.Command.mutation.Resize_window.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":915,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int option;","source":{"file":"lib/libtmux.mli","line":915,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Resize_window","type":"int option","qualifiedName":"Libtmux.Command.height","slug":"libtmux-command-mutation-resize_window-height"},{"id":"Libtmux.Command.mutation.Resize_window.width","publicId":"Libtmux.Command.mutation.Resize_window.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":914,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int option;","source":{"file":"lib/libtmux.mli","line":914,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Resize_window","type":"int option","qualifiedName":"Libtmux.Command.width","slug":"libtmux-command-mutation-resize_window-width"},{"id":"Libtmux.Command.mutation.Resize_window.window","publicId":"Libtmux.Command.mutation.Resize_window.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":913,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : Window.target;","source":{"file":"lib/libtmux.mli","line":913,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Resize_window","type":"Window.target","qualifiedName":"Libtmux.Command.window","slug":"libtmux-command-mutation-resize_window-window"},{"id":"Libtmux.Command.mutation.Respawn_pane","publicId":"Libtmux.Command.mutation.Respawn_pane","name":"Respawn_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":928,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Respawn_pane of {\n pane : Pane.target;\n spawn : Spawn.t;\n kill_running : bool;\n }","source":{"file":"lib/libtmux.mli","line":928,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Respawn_pane","slug":"libtmux-command-mutation-respawn_pane"},{"id":"Libtmux.Command.mutation.Respawn_pane.kill_running","publicId":"Libtmux.Command.mutation.Respawn_pane.kill_running","name":"kill_running","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":931,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"kill_running : bool;","source":{"file":"lib/libtmux.mli","line":931,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Respawn_pane","type":"bool","qualifiedName":"Libtmux.Command.kill_running","slug":"libtmux-command-mutation-respawn_pane-kill_running"},{"id":"Libtmux.Command.mutation.Respawn_pane.pane","publicId":"Libtmux.Command.mutation.Respawn_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":929,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":929,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Respawn_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-mutation-respawn_pane-pane"},{"id":"Libtmux.Command.mutation.Respawn_pane.spawn","publicId":"Libtmux.Command.mutation.Respawn_pane.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":930,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Spawn.t;","source":{"file":"lib/libtmux.mli","line":930,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Respawn_pane","type":"Spawn.t","qualifiedName":"Libtmux.Command.spawn","slug":"libtmux-command-mutation-respawn_pane-spawn"},{"id":"Libtmux.Command.mutation.Rotate_panes","publicId":"Libtmux.Command.mutation.Rotate_panes","name":"Rotate_panes","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":926,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Rotate_panes of Window.target * [ `Forward | `Backward ]","source":{"file":"lib/libtmux.mli","line":926,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Rotate_panes","slug":"libtmux-command-mutation-rotate_panes"},{"id":"Libtmux.Command.mutation.Run_hook","publicId":"Libtmux.Command.mutation.Run_hook","name":"Run_hook","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":959,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Run_hook of Options.scope * string","source":{"file":"lib/libtmux.mli","line":959,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Run_hook","slug":"libtmux-command-mutation-run_hook"},{"id":"Libtmux.Command.mutation.Select_layout","publicId":"Libtmux.Command.mutation.Select_layout","name":"Select_layout","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":917,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Select_layout of Window.target * Layout.t","source":{"file":"lib/libtmux.mli","line":917,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Select_layout","slug":"libtmux-command-mutation-select_layout"},{"id":"Libtmux.Command.mutation.Select_pane","publicId":"Libtmux.Command.mutation.Select_pane","name":"Select_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":905,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Select_pane of Pane.target","source":{"file":"lib/libtmux.mli","line":905,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Select_pane","slug":"libtmux-command-mutation-select_pane"},{"id":"Libtmux.Command.mutation.Select_window_at","publicId":"Libtmux.Command.mutation.Select_window_at","name":"Select_window_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":888,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Select_window_at of Session.target * int","source":{"file":"lib/libtmux.mli","line":888,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Select_window_at","slug":"libtmux-command-mutation-select_window_at"},{"id":"Libtmux.Command.mutation.Set_environment","publicId":"Libtmux.Command.mutation.Set_environment","name":"Set_environment","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":934,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_environment of {\n scope : Environment.scope;\n name : string;\n value : string;\n hidden : bool;\n }","source":{"file":"lib/libtmux.mli","line":934,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Set_environment","slug":"libtmux-command-mutation-set_environment"},{"id":"Libtmux.Command.mutation.Set_environment.hidden","publicId":"Libtmux.Command.mutation.Set_environment.hidden","name":"hidden","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":938,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"hidden : bool;","source":{"file":"lib/libtmux.mli","line":938,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_environment","type":"bool","qualifiedName":"Libtmux.Command.hidden","slug":"libtmux-command-mutation-set_environment-hidden"},{"id":"Libtmux.Command.mutation.Set_environment.name","publicId":"Libtmux.Command.mutation.Set_environment.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":936,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":936,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_environment","type":"string","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-mutation-set_environment-name"},{"id":"Libtmux.Command.mutation.Set_environment.scope","publicId":"Libtmux.Command.mutation.Set_environment.scope","name":"scope","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":935,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scope : Environment.scope;","source":{"file":"lib/libtmux.mli","line":935,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_environment","type":"Environment.scope","qualifiedName":"Libtmux.Command.scope","slug":"libtmux-command-mutation-set_environment-scope"},{"id":"Libtmux.Command.mutation.Set_environment.value","publicId":"Libtmux.Command.mutation.Set_environment.value","name":"value","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":937,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"value : string;","source":{"file":"lib/libtmux.mli","line":937,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_environment","type":"string","qualifiedName":"Libtmux.Command.value","slug":"libtmux-command-mutation-set_environment-value"},{"id":"Libtmux.Command.mutation.Set_hook","publicId":"Libtmux.Command.mutation.Set_hook","name":"Set_hook","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":951,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_hook of {\n scope : Options.scope;\n name : string;\n index : int option;\n commands : Hook.command list;\n append : bool;\n }","source":{"file":"lib/libtmux.mli","line":951,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Set_hook","slug":"libtmux-command-mutation-set_hook"},{"id":"Libtmux.Command.mutation.Set_hook.append","publicId":"Libtmux.Command.mutation.Set_hook.append","name":"append","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":956,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"append : bool;","source":{"file":"lib/libtmux.mli","line":956,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_hook","type":"bool","qualifiedName":"Libtmux.Command.append","slug":"libtmux-command-mutation-set_hook-append"},{"id":"Libtmux.Command.mutation.Set_hook.commands","publicId":"Libtmux.Command.mutation.Set_hook.commands","name":"commands","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":955,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"commands : Hook.command list;","source":{"file":"lib/libtmux.mli","line":955,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_hook","type":"Hook.command list","qualifiedName":"Libtmux.Command.commands","slug":"libtmux-command-mutation-set_hook-commands"},{"id":"Libtmux.Command.mutation.Set_hook.index","publicId":"Libtmux.Command.mutation.Set_hook.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":954,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int option;","source":{"file":"lib/libtmux.mli","line":954,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_hook","type":"int option","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-mutation-set_hook-index"},{"id":"Libtmux.Command.mutation.Set_hook.name","publicId":"Libtmux.Command.mutation.Set_hook.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":953,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":953,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_hook","type":"string","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-mutation-set_hook-name"},{"id":"Libtmux.Command.mutation.Set_hook.scope","publicId":"Libtmux.Command.mutation.Set_hook.scope","name":"scope","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":952,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scope : Options.scope;","source":{"file":"lib/libtmux.mli","line":952,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_hook","type":"Options.scope","qualifiedName":"Libtmux.Command.scope","slug":"libtmux-command-mutation-set_hook-scope"},{"id":"Libtmux.Command.mutation.Set_option","publicId":"Libtmux.Command.mutation.Set_option","name":"Set_option","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":942,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_option of {\n scope : Options.scope;\n name : string;\n index : int option;\n value : Options.scalar;\n append : bool;\n }","source":{"file":"lib/libtmux.mli","line":942,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Set_option","slug":"libtmux-command-mutation-set_option"},{"id":"Libtmux.Command.mutation.Set_option.append","publicId":"Libtmux.Command.mutation.Set_option.append","name":"append","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":947,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"append : bool;","source":{"file":"lib/libtmux.mli","line":947,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_option","type":"bool","qualifiedName":"Libtmux.Command.append","slug":"libtmux-command-mutation-set_option-append"},{"id":"Libtmux.Command.mutation.Set_option.index","publicId":"Libtmux.Command.mutation.Set_option.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":945,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int option;","source":{"file":"lib/libtmux.mli","line":945,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_option","type":"int option","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-mutation-set_option-index"},{"id":"Libtmux.Command.mutation.Set_option.name","publicId":"Libtmux.Command.mutation.Set_option.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":944,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":944,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_option","type":"string","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-mutation-set_option-name"},{"id":"Libtmux.Command.mutation.Set_option.scope","publicId":"Libtmux.Command.mutation.Set_option.scope","name":"scope","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":943,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scope : Options.scope;","source":{"file":"lib/libtmux.mli","line":943,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_option","type":"Options.scope","qualifiedName":"Libtmux.Command.scope","slug":"libtmux-command-mutation-set_option-scope"},{"id":"Libtmux.Command.mutation.Set_option.value","publicId":"Libtmux.Command.mutation.Set_option.value","name":"value","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":946,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"value : Options.scalar;","source":{"file":"lib/libtmux.mli","line":946,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Set_option","type":"Options.scalar","qualifiedName":"Libtmux.Command.value","slug":"libtmux-command-mutation-set_option-value"},{"id":"Libtmux.Command.mutation.Set_pane_title","publicId":"Libtmux.Command.mutation.Set_pane_title","name":"Set_pane_title","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":906,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_pane_title of Pane.target * string","source":{"file":"lib/libtmux.mli","line":906,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Set_pane_title","slug":"libtmux-command-mutation-set_pane_title"},{"id":"Libtmux.Command.mutation.Swap_panes","publicId":"Libtmux.Command.mutation.Swap_panes","name":"Swap_panes","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":925,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Swap_panes of Pane.target * Pane.target","source":{"file":"lib/libtmux.mli","line":925,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Swap_panes","slug":"libtmux-command-mutation-swap_panes"},{"id":"Libtmux.Command.mutation.Switch_client_at","publicId":"Libtmux.Command.mutation.Switch_client_at","name":"Switch_client_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":960,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Switch_client_at of {\n client : Client_name.t;\n session : Session.target;\n update_environment : bool;\n }","source":{"file":"lib/libtmux.mli","line":960,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Switch_client_at","slug":"libtmux-command-mutation-switch_client_at"},{"id":"Libtmux.Command.mutation.Switch_client_at.client","publicId":"Libtmux.Command.mutation.Switch_client_at.client","name":"client","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":961,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"client : Client_name.t;","source":{"file":"lib/libtmux.mli","line":961,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Switch_client_at","type":"Client_name.t","qualifiedName":"Libtmux.Command.client","slug":"libtmux-command-mutation-switch_client_at-client"},{"id":"Libtmux.Command.mutation.Switch_client_at.session","publicId":"Libtmux.Command.mutation.Switch_client_at.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":962,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":962,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Switch_client_at","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-mutation-switch_client_at-session"},{"id":"Libtmux.Command.mutation.Switch_client_at.update_environment","publicId":"Libtmux.Command.mutation.Switch_client_at.update_environment","name":"update_environment","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":963,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"update_environment : bool;","source":{"file":"lib/libtmux.mli","line":963,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Switch_client_at","type":"bool","qualifiedName":"Libtmux.Command.update_environment","slug":"libtmux-command-mutation-switch_client_at-update_environment"},{"id":"Libtmux.Command.mutation.Unlink_window_at","publicId":"Libtmux.Command.mutation.Unlink_window_at","name":"Unlink_window_at","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":889,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unlink_window_at of {\n session : Session.target;\n index : int;\n allow_kill : bool;\n }","source":{"file":"lib/libtmux.mli","line":889,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"struct","qualifiedName":"Libtmux.Command.Unlink_window_at","slug":"libtmux-command-mutation-unlink_window_at"},{"id":"Libtmux.Command.mutation.Unlink_window_at.allow_kill","publicId":"Libtmux.Command.mutation.Unlink_window_at.allow_kill","name":"allow_kill","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":892,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"allow_kill : bool;","source":{"file":"lib/libtmux.mli","line":892,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Unlink_window_at","type":"bool","qualifiedName":"Libtmux.Command.allow_kill","slug":"libtmux-command-mutation-unlink_window_at-allow_kill"},{"id":"Libtmux.Command.mutation.Unlink_window_at.index","publicId":"Libtmux.Command.mutation.Unlink_window_at.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":891,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":891,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Unlink_window_at","type":"int","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-mutation-unlink_window_at-index"},{"id":"Libtmux.Command.mutation.Unlink_window_at.session","publicId":"Libtmux.Command.mutation.Unlink_window_at.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":890,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":890,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation.Unlink_window_at","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-mutation-unlink_window_at-session"},{"id":"Libtmux.Command.mutation.Unset_environment","publicId":"Libtmux.Command.mutation.Unset_environment","name":"Unset_environment","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":940,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unset_environment of Environment.scope * string","source":{"file":"lib/libtmux.mli","line":940,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Unset_environment","slug":"libtmux-command-mutation-unset_environment"},{"id":"Libtmux.Command.mutation.Unset_option","publicId":"Libtmux.Command.mutation.Unset_option","name":"Unset_option","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":949,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unset_option of Options.scope * string * int option","source":{"file":"lib/libtmux.mli","line":949,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Unset_option","slug":"libtmux-command-mutation-unset_option"},{"id":"Libtmux.Command.mutation.Zoom_pane","publicId":"Libtmux.Command.mutation.Zoom_pane","name":"Zoom_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":927,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Zoom_pane of Pane.target","source":{"file":"lib/libtmux.mli","line":927,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.mutation","variant":"tuple","qualifiedName":"Libtmux.Command.Zoom_pane","slug":"libtmux-command-mutation-zoom_pane"},{"id":"Libtmux.Command.t","publicId":"Libtmux.Command.t","qualifiedName":"Libtmux.Command.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":973,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" An immutable description, validated by a backend before admission.\n Constructing or inspecting it performs no I/O. "],"declarations":[{"kind":"typealias","text":"type 'a t","source":{"file":"lib/libtmux.mli","line":973,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command","doc":{"summary":"An immutable description, validated by a backend before admission. Constructing or inspecting it performs no I/O."},"signatures":[{"raw":"type 'a t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-command-t"},{"id":"Libtmux.Command.view","publicId":"Libtmux.Command.view","qualifiedName":"Libtmux.Command.view","name":"view","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1028,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read-only inspection for transport adapters. "],"declarations":[{"kind":"function","text":"val view : 'a t -> 'a view","source":{"file":"lib/libtmux.mli","line":1028,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command","doc":{"summary":"Read-only inspection for transport adapters."},"signatures":[{"raw":"val view : 'a t -> 'a view","params":[{"name":"arg1","type":"'a t"}],"returns":"'a view"}],"slug":"libtmux-command-view"},{"id":"Libtmux.Command.view:type","publicId":"Libtmux.Command.view:type","qualifiedName":"Libtmux.Command.view","name":"view","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":977,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type _ view =\n | Capture : Snapshot.t view\n | Capture_text : {\n pane : Pane.t;\n start : int;\n end_ : int;\n scratch_dir : string;\n }\n -> Captured_text.t view\n | Rename_window : Window.target * string -> unit view\n | Rename_session : Session.target * string -> unit view\n | Send_text : Pane.target * string -> unit view\n | Send_keys : Pane.target * Key.t list -> unit view\n | Wait_for : string -> unit view\n | Signal : string -> unit view\n | Capture_environment : Environment.scope * bool -> Environment.t view\n | Capture_options : Options.scope * bool -> Options.t view\n | Read_option : Options.scope * string * bool -> Options.value option view\n | Capture_hooks : Options.scope -> Options.t view\n | Read_hook : Options.scope * string * bool -> Options.value option view\n | Mutate : mutation -> unit view\n | Create_session : {\n name : string;\n window_name : string option;\n width : int;\n height : int;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Create_window : {\n session : Session.target;\n index : int option;\n name : string option;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Split_pane : {\n pane : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n spawn : Spawn.t;\n }\n -> Created.t view\n | Break_pane : {\n pane : Pane.target;\n session : Session.target;\n index : int;\n name : string option;\n }\n -> Created.t view","source":{"file":"lib/libtmux.mli","line":977,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command","signatures":[{"raw":"type _ view =\n | Capture: Snapshot.t view \n | Capture_text: {\n pane: Pane.t ;\n start: int ;\n end_: int ;\n scratch_dir: string } -> Captured_text.t view \n | Rename_window: Window.target * string -> unit view \n | Rename_session: Session.target * string -> unit view \n | Send_text: Pane.target * string -> unit view \n | Send_keys: Pane.target * Key.t list -> unit view \n | Wait_for: string -> unit view \n | Signal: string -> unit view \n | Capture_environment: Environment.scope * bool -> Environment.t view \n | Capture_options: Options.scope * bool -> Options.t view \n | Read_option: Options.scope * string * bool -> Options.value option view \n | Capture_hooks: Options.scope -> Options.t view \n | Read_hook: Options.scope * string * bool -> Options.value option view \n | Mutate: mutation -> unit view \n | Create_session:\n {\n name: string ;\n window_name: string option ;\n width: int ;\n height: int ;\n spawn: Spawn.t } -> Created.t view \n | Create_window:\n {\n session: Session.target ;\n index: int option ;\n name: string option ;\n spawn: Spawn.t } -> Created.t view \n | Split_pane:\n {\n pane: Pane.target ;\n direction: Geometry.direction ;\n size: Geometry.size option ;\n spawn: Spawn.t } -> Created.t view \n | Break_pane:\n {\n pane: Pane.target ;\n session: Session.target ;\n index: int ;\n name: string option } -> Created.t view ","params":[]}],"slug":"libtmux-command-view-type"},{"id":"Libtmux.Command.view:type.Break_pane","publicId":"Libtmux.Command.view:type.Break_pane","name":"Break_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1020,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Break_pane : {\n pane : Pane.target;\n session : Session.target;\n index : int;\n name : string option;\n }\n -> Created.t view","source":{"file":"lib/libtmux.mli","line":1020,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"struct","qualifiedName":"Libtmux.Command.Break_pane","slug":"libtmux-command-view-type-break_pane"},{"id":"Libtmux.Command.view:type.Break_pane.index","publicId":"Libtmux.Command.view:type.Break_pane.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1023,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":1023,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Break_pane","type":"int","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-view-type-break_pane-index"},{"id":"Libtmux.Command.view:type.Break_pane.name","publicId":"Libtmux.Command.view:type.Break_pane.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1024,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string option;","source":{"file":"lib/libtmux.mli","line":1024,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Break_pane","type":"string option","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-view-type-break_pane-name"},{"id":"Libtmux.Command.view:type.Break_pane.pane","publicId":"Libtmux.Command.view:type.Break_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1021,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":1021,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Break_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-view-type-break_pane-pane"},{"id":"Libtmux.Command.view:type.Break_pane.session","publicId":"Libtmux.Command.view:type.Break_pane.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1022,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":1022,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Break_pane","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-view-type-break_pane-session"},{"id":"Libtmux.Command.view:type.Capture","publicId":"Libtmux.Command.view:type.Capture","name":"Capture","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":978,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture : Snapshot.t view","source":{"file":"lib/libtmux.mli","line":978,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"unit","qualifiedName":"Libtmux.Command.Capture","slug":"libtmux-command-view-type-capture"},{"id":"Libtmux.Command.view:type.Capture_environment","publicId":"Libtmux.Command.view:type.Capture_environment","name":"Capture_environment","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":992,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture_environment : Environment.scope * bool -> Environment.t view","source":{"file":"lib/libtmux.mli","line":992,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Capture_environment","slug":"libtmux-command-view-type-capture_environment"},{"id":"Libtmux.Command.view:type.Capture_hooks","publicId":"Libtmux.Command.view:type.Capture_hooks","name":"Capture_hooks","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":995,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture_hooks : Options.scope -> Options.t view","source":{"file":"lib/libtmux.mli","line":995,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Capture_hooks","slug":"libtmux-command-view-type-capture_hooks"},{"id":"Libtmux.Command.view:type.Capture_options","publicId":"Libtmux.Command.view:type.Capture_options","name":"Capture_options","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":993,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture_options : Options.scope * bool -> Options.t view","source":{"file":"lib/libtmux.mli","line":993,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Capture_options","slug":"libtmux-command-view-type-capture_options"},{"id":"Libtmux.Command.view:type.Capture_text","publicId":"Libtmux.Command.view:type.Capture_text","name":"Capture_text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":979,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture_text : {\n pane : Pane.t;\n start : int;\n end_ : int;\n scratch_dir : string;\n }\n -> Captured_text.t view","source":{"file":"lib/libtmux.mli","line":979,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"struct","qualifiedName":"Libtmux.Command.Capture_text","slug":"libtmux-command-view-type-capture_text"},{"id":"Libtmux.Command.view:type.Capture_text.end_","publicId":"Libtmux.Command.view:type.Capture_text.end_","name":"end_","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":982,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"end_ : int;","source":{"file":"lib/libtmux.mli","line":982,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Capture_text","type":"int","qualifiedName":"Libtmux.Command.end_","slug":"libtmux-command-view-type-capture_text-end_"},{"id":"Libtmux.Command.view:type.Capture_text.pane","publicId":"Libtmux.Command.view:type.Capture_text.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":980,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.t;","source":{"file":"lib/libtmux.mli","line":980,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Capture_text","type":"Pane.t","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-view-type-capture_text-pane"},{"id":"Libtmux.Command.view:type.Capture_text.scratch_dir","publicId":"Libtmux.Command.view:type.Capture_text.scratch_dir","name":"scratch_dir","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":983,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scratch_dir : string;","source":{"file":"lib/libtmux.mli","line":983,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Capture_text","type":"string","qualifiedName":"Libtmux.Command.scratch_dir","slug":"libtmux-command-view-type-capture_text-scratch_dir"},{"id":"Libtmux.Command.view:type.Capture_text.start","publicId":"Libtmux.Command.view:type.Capture_text.start","name":"start","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":981,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"start : int;","source":{"file":"lib/libtmux.mli","line":981,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Capture_text","type":"int","qualifiedName":"Libtmux.Command.start","slug":"libtmux-command-view-type-capture_text-start"},{"id":"Libtmux.Command.view:type.Create_session","publicId":"Libtmux.Command.view:type.Create_session","name":"Create_session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":998,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Create_session : {\n name : string;\n window_name : string option;\n width : int;\n height : int;\n spawn : Spawn.t;\n }\n -> Created.t view","source":{"file":"lib/libtmux.mli","line":998,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"struct","qualifiedName":"Libtmux.Command.Create_session","slug":"libtmux-command-view-type-create_session"},{"id":"Libtmux.Command.view:type.Create_session.height","publicId":"Libtmux.Command.view:type.Create_session.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1002,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int;","source":{"file":"lib/libtmux.mli","line":1002,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Create_session","type":"int","qualifiedName":"Libtmux.Command.height","slug":"libtmux-command-view-type-create_session-height"},{"id":"Libtmux.Command.view:type.Create_session.name","publicId":"Libtmux.Command.view:type.Create_session.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":999,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":999,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Create_session","type":"string","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-view-type-create_session-name"},{"id":"Libtmux.Command.view:type.Create_session.spawn","publicId":"Libtmux.Command.view:type.Create_session.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1003,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Spawn.t;","source":{"file":"lib/libtmux.mli","line":1003,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Create_session","type":"Spawn.t","qualifiedName":"Libtmux.Command.spawn","slug":"libtmux-command-view-type-create_session-spawn"},{"id":"Libtmux.Command.view:type.Create_session.width","publicId":"Libtmux.Command.view:type.Create_session.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1001,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"lib/libtmux.mli","line":1001,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Create_session","type":"int","qualifiedName":"Libtmux.Command.width","slug":"libtmux-command-view-type-create_session-width"},{"id":"Libtmux.Command.view:type.Create_session.window_name","publicId":"Libtmux.Command.view:type.Create_session.window_name","name":"window_name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1000,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_name : string option;","source":{"file":"lib/libtmux.mli","line":1000,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Create_session","type":"string option","qualifiedName":"Libtmux.Command.window_name","slug":"libtmux-command-view-type-create_session-window_name"},{"id":"Libtmux.Command.view:type.Create_window","publicId":"Libtmux.Command.view:type.Create_window","name":"Create_window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1006,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Create_window : {\n session : Session.target;\n index : int option;\n name : string option;\n spawn : Spawn.t;\n }\n -> Created.t view","source":{"file":"lib/libtmux.mli","line":1006,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"struct","qualifiedName":"Libtmux.Command.Create_window","slug":"libtmux-command-view-type-create_window"},{"id":"Libtmux.Command.view:type.Create_window.index","publicId":"Libtmux.Command.view:type.Create_window.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1008,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int option;","source":{"file":"lib/libtmux.mli","line":1008,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Create_window","type":"int option","qualifiedName":"Libtmux.Command.index","slug":"libtmux-command-view-type-create_window-index"},{"id":"Libtmux.Command.view:type.Create_window.name","publicId":"Libtmux.Command.view:type.Create_window.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1009,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string option;","source":{"file":"lib/libtmux.mli","line":1009,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Create_window","type":"string option","qualifiedName":"Libtmux.Command.name","slug":"libtmux-command-view-type-create_window-name"},{"id":"Libtmux.Command.view:type.Create_window.session","publicId":"Libtmux.Command.view:type.Create_window.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1007,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":1007,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Create_window","type":"Session.target","qualifiedName":"Libtmux.Command.session","slug":"libtmux-command-view-type-create_window-session"},{"id":"Libtmux.Command.view:type.Create_window.spawn","publicId":"Libtmux.Command.view:type.Create_window.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1010,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Spawn.t;","source":{"file":"lib/libtmux.mli","line":1010,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Create_window","type":"Spawn.t","qualifiedName":"Libtmux.Command.spawn","slug":"libtmux-command-view-type-create_window-spawn"},{"id":"Libtmux.Command.view:type.Mutate","publicId":"Libtmux.Command.view:type.Mutate","name":"Mutate","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":997,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Mutate : mutation -> unit view","source":{"file":"lib/libtmux.mli","line":997,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Mutate","slug":"libtmux-command-view-type-mutate"},{"id":"Libtmux.Command.view:type.Read_hook","publicId":"Libtmux.Command.view:type.Read_hook","name":"Read_hook","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":996,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Read_hook : Options.scope * string * bool -> Options.value option view","source":{"file":"lib/libtmux.mli","line":996,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Read_hook","slug":"libtmux-command-view-type-read_hook"},{"id":"Libtmux.Command.view:type.Read_option","publicId":"Libtmux.Command.view:type.Read_option","name":"Read_option","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":994,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Read_option : Options.scope * string * bool -> Options.value option view","source":{"file":"lib/libtmux.mli","line":994,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Read_option","slug":"libtmux-command-view-type-read_option"},{"id":"Libtmux.Command.view:type.Rename_session","publicId":"Libtmux.Command.view:type.Rename_session","name":"Rename_session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":987,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Rename_session : Session.target * string -> unit view","source":{"file":"lib/libtmux.mli","line":987,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Rename_session","slug":"libtmux-command-view-type-rename_session"},{"id":"Libtmux.Command.view:type.Rename_window","publicId":"Libtmux.Command.view:type.Rename_window","name":"Rename_window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":986,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Rename_window : Window.target * string -> unit view","source":{"file":"lib/libtmux.mli","line":986,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Rename_window","slug":"libtmux-command-view-type-rename_window"},{"id":"Libtmux.Command.view:type.Send_keys","publicId":"Libtmux.Command.view:type.Send_keys","name":"Send_keys","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":989,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Send_keys : Pane.target * Key.t list -> unit view","source":{"file":"lib/libtmux.mli","line":989,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Send_keys","slug":"libtmux-command-view-type-send_keys"},{"id":"Libtmux.Command.view:type.Send_text","publicId":"Libtmux.Command.view:type.Send_text","name":"Send_text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":988,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Send_text : Pane.target * string -> unit view","source":{"file":"lib/libtmux.mli","line":988,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Send_text","slug":"libtmux-command-view-type-send_text"},{"id":"Libtmux.Command.view:type.Signal","publicId":"Libtmux.Command.view:type.Signal","name":"Signal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":991,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Signal : string -> unit view","source":{"file":"lib/libtmux.mli","line":991,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Signal","slug":"libtmux-command-view-type-signal"},{"id":"Libtmux.Command.view:type.Split_pane","publicId":"Libtmux.Command.view:type.Split_pane","name":"Split_pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1013,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Split_pane : {\n pane : Pane.target;\n direction : Geometry.direction;\n size : Geometry.size option;\n spawn : Spawn.t;\n }\n -> Created.t view","source":{"file":"lib/libtmux.mli","line":1013,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"struct","qualifiedName":"Libtmux.Command.Split_pane","slug":"libtmux-command-view-type-split_pane"},{"id":"Libtmux.Command.view:type.Split_pane.direction","publicId":"Libtmux.Command.view:type.Split_pane.direction","name":"direction","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1015,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"direction : Geometry.direction;","source":{"file":"lib/libtmux.mli","line":1015,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Split_pane","type":"Geometry.direction","qualifiedName":"Libtmux.Command.direction","slug":"libtmux-command-view-type-split_pane-direction"},{"id":"Libtmux.Command.view:type.Split_pane.pane","publicId":"Libtmux.Command.view:type.Split_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1014,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":1014,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Split_pane","type":"Pane.target","qualifiedName":"Libtmux.Command.pane","slug":"libtmux-command-view-type-split_pane-pane"},{"id":"Libtmux.Command.view:type.Split_pane.size","publicId":"Libtmux.Command.view:type.Split_pane.size","name":"size","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1016,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"size : Geometry.size option;","source":{"file":"lib/libtmux.mli","line":1016,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Split_pane","type":"Geometry.size option","qualifiedName":"Libtmux.Command.size","slug":"libtmux-command-view-type-split_pane-size"},{"id":"Libtmux.Command.view:type.Split_pane.spawn","publicId":"Libtmux.Command.view:type.Split_pane.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1017,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Spawn.t;","source":{"file":"lib/libtmux.mli","line":1017,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type.Split_pane","type":"Spawn.t","qualifiedName":"Libtmux.Command.spawn","slug":"libtmux-command-view-type-split_pane-spawn"},{"id":"Libtmux.Command.view:type.Wait_for","publicId":"Libtmux.Command.view:type.Wait_for","name":"Wait_for","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":990,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Wait_for : string -> unit view","source":{"file":"lib/libtmux.mli","line":990,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Command.view:type","variant":"tuple","qualifiedName":"Libtmux.Command.Wait_for","slug":"libtmux-command-view-type-wait_for"},{"id":"Libtmux.Created","publicId":"Libtmux.Created","qualifiedName":"Libtmux.Created","name":"Created","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":779,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" IDs reported by a successful creation reply. Only the requested kind is\n newly created; the other fields can describe existing containers. "],"declarations":[{"kind":"module","text":"module Created : sig\n type t = {\n session : Session.target;\n window : Window.target;\n pane : Pane.target;\n window_index : int;\n pane_index : int;\n }\n (** IDs returned by the creation command, without a second capture. Indexes\n describe the creation response and may change afterward. Only the resource\n requested by the command is newly created: splitting a pane does not\n create the reported session or window. *)\nend","source":{"file":"lib/libtmux.mli","line":779,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"IDs reported by a successful creation reply. Only the requested kind is newly created; the other fields can describe existing containers."},"slug":"libtmux-created"},{"id":"Libtmux.Created.t","publicId":"Libtmux.Created.t","qualifiedName":"Libtmux.Created.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":780,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" IDs returned by the creation command, without a second capture. Indexes\n describe the creation response and may change afterward. Only the resource\n requested by the command is newly created: splitting a pane does not\n create the reported session or window. "],"declarations":[{"kind":"struct","text":"type t = {\n session : Session.target;\n window : Window.target;\n pane : Pane.target;\n window_index : int;\n pane_index : int;\n }","source":{"file":"lib/libtmux.mli","line":780,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Created","doc":{"summary":"IDs returned by the creation command, without a second capture. Indexes describe the creation response and may change afterward. Only the resource requested by the command is newly created: splitting a pane does not create the reported session or window."},"signatures":[{"raw":"type t =\n {\n session: Session.target ;\n window: Window.target ;\n pane: Pane.target ;\n window_index: int ;\n pane_index: int }","params":[]}],"slug":"libtmux-created-t"},{"id":"Libtmux.Created.t.pane","publicId":"Libtmux.Created.t.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":783,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Pane.target;","source":{"file":"lib/libtmux.mli","line":783,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Created.t","type":"Pane.target","qualifiedName":"Libtmux.Created.pane","slug":"libtmux-created-t-pane"},{"id":"Libtmux.Created.t.pane_index","publicId":"Libtmux.Created.t.pane_index","name":"pane_index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":785,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane_index : int;","source":{"file":"lib/libtmux.mli","line":785,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Created.t","type":"int","qualifiedName":"Libtmux.Created.pane_index","slug":"libtmux-created-t-pane_index"},{"id":"Libtmux.Created.t.session","publicId":"Libtmux.Created.t.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":781,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Session.target;","source":{"file":"lib/libtmux.mli","line":781,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Created.t","type":"Session.target","qualifiedName":"Libtmux.Created.session","slug":"libtmux-created-t-session"},{"id":"Libtmux.Created.t.window","publicId":"Libtmux.Created.t.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":782,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : Window.target;","source":{"file":"lib/libtmux.mli","line":782,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Created.t","type":"Window.target","qualifiedName":"Libtmux.Created.window","slug":"libtmux-created-t-window"},{"id":"Libtmux.Created.t.window_index","publicId":"Libtmux.Created.t.window_index","name":"window_index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":784,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_index : int;","source":{"file":"lib/libtmux.mli","line":784,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Created.t","type":"int","qualifiedName":"Libtmux.Created.window_index","slug":"libtmux-created-t-window_index"},{"id":"Libtmux.Endpoint","publicId":"Libtmux.Endpoint","qualifiedName":"Libtmux.Endpoint","name":"Endpoint","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":30,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" An explicit socket description. Constructing an endpoint neither reads the\n environment nor starts a daemon. {!Source.t} adds the observed daemon and\n connection generation. "],"declarations":[{"kind":"module","text":"module Endpoint : sig\n type t\n (** An explicit socket description, independent of the environment. *)\n\n type kind = Named_socket of string | Socket_path of string\n\n val named_socket : string -> t\n (** [named_socket name] describes tmux's [-L name] endpoint. Raises\n [Invalid_argument] if [name] is empty or contains NUL or [/]. *)\n\n val socket_path : string -> t\n (** [socket_path path] describes an absolute [-S path] endpoint. It does not\n check existence or resolve symbolic links. Raises [Invalid_argument] if\n [path] is relative, empty or contains NUL. *)\n\n val kind : t -> kind\n\n val equal : t -> t -> bool\n (** Equality compares descriptions, not server instances or resolved paths. *)\n\n val pp : Format.formatter -> t -> unit\nend","source":{"file":"lib/libtmux.mli","line":30,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"An explicit socket description. Constructing an endpoint neither reads the environment nor starts a daemon. {!Source.t} adds the observed daemon and connection generation."},"slug":"libtmux-endpoint"},{"id":"Libtmux.Endpoint.equal","publicId":"Libtmux.Endpoint.equal","qualifiedName":"Libtmux.Endpoint.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":47,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Equality compares descriptions, not server instances or resolved paths. "],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":47,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Endpoint","doc":{"summary":"Equality compares descriptions, not server instances or resolved paths."},"signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-endpoint-equal"},{"id":"Libtmux.Endpoint.kind","publicId":"Libtmux.Endpoint.kind","qualifiedName":"Libtmux.Endpoint.kind","name":"kind","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":45,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val kind : t -> kind","source":{"file":"lib/libtmux.mli","line":45,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Endpoint","signatures":[{"raw":"val kind : t -> kind","params":[{"name":"arg1","type":"t"}],"returns":"kind"}],"slug":"libtmux-endpoint-kind"},{"id":"Libtmux.Endpoint.kind:type","publicId":"Libtmux.Endpoint.kind:type","qualifiedName":"Libtmux.Endpoint.kind","name":"kind","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":34,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type kind = Named_socket of string | Socket_path of string","source":{"file":"lib/libtmux.mli","line":34,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Endpoint","signatures":[{"raw":"type kind =\n | Named_socket of string \n | Socket_path of string ","params":[]}],"slug":"libtmux-endpoint-kind-type"},{"id":"Libtmux.Endpoint.kind:type.Named_socket","publicId":"Libtmux.Endpoint.kind:type.Named_socket","name":"Named_socket","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":34,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Named_socket of string","source":{"file":"lib/libtmux.mli","line":34,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Endpoint.kind:type","variant":"tuple","qualifiedName":"Libtmux.Endpoint.Named_socket","slug":"libtmux-endpoint-kind-type-named_socket"},{"id":"Libtmux.Endpoint.kind:type.Socket_path","publicId":"Libtmux.Endpoint.kind:type.Socket_path","name":"Socket_path","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":34,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Socket_path of string","source":{"file":"lib/libtmux.mli","line":34,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Endpoint.kind:type","variant":"tuple","qualifiedName":"Libtmux.Endpoint.Socket_path","slug":"libtmux-endpoint-kind-type-socket_path"},{"id":"Libtmux.Endpoint.named_socket","publicId":"Libtmux.Endpoint.named_socket","qualifiedName":"Libtmux.Endpoint.named_socket","name":"named_socket","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":36,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" [named_socket name] describes tmux's [-L name] endpoint. Raises\n [Invalid_argument] if [name] is empty or contains NUL or [/]. "],"declarations":[{"kind":"function","text":"val named_socket : string -> t","source":{"file":"lib/libtmux.mli","line":36,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Endpoint","doc":{"summary":"`named_socket name` describes tmux's `-L name` endpoint. Raises `Invalid_argument` if `name` is empty or contains NUL or `/`."},"signatures":[{"raw":"val named_socket : string -> t","params":[{"name":"arg1","type":"string"}],"returns":"t"}],"slug":"libtmux-endpoint-named_socket"},{"id":"Libtmux.Endpoint.pp","publicId":"Libtmux.Endpoint.pp","qualifiedName":"Libtmux.Endpoint.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":50,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":50,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Endpoint","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-endpoint-pp"},{"id":"Libtmux.Endpoint.socket_path","publicId":"Libtmux.Endpoint.socket_path","qualifiedName":"Libtmux.Endpoint.socket_path","name":"socket_path","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":40,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" [socket_path path] describes an absolute [-S path] endpoint. It does not\n check existence or resolve symbolic links. Raises [Invalid_argument] if\n [path] is relative, empty or contains NUL. "],"declarations":[{"kind":"function","text":"val socket_path : string -> t","source":{"file":"lib/libtmux.mli","line":40,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Endpoint","doc":{"summary":"`socket_path path` describes an absolute `-S path` endpoint. It does not check existence or resolve symbolic links. Raises `Invalid_argument` if `path` is relative, empty or contains NUL."},"signatures":[{"raw":"val socket_path : string -> t","params":[{"name":"arg1","type":"string"}],"returns":"t"}],"slug":"libtmux-endpoint-socket_path"},{"id":"Libtmux.Endpoint.t","publicId":"Libtmux.Endpoint.t","qualifiedName":"Libtmux.Endpoint.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":31,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" An explicit socket description, independent of the environment. "],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":31,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Endpoint","doc":{"summary":"An explicit socket description, independent of the environment."},"signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-endpoint-t"},{"id":"Libtmux.Environment","publicId":"Libtmux.Environment","qualifiedName":"Libtmux.Environment","name":"Environment","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":793,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Environment : sig\n type scope = Global | Session of Session.target\n type value = Value of string | Removed\n type entry = { name : string; value : value }\n\n type t = {\n source : Source.t;\n scope : scope;\n hidden : bool;\n entries : entry Iarray.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }\n (** One captured environment table, in tmux order. [hidden] selects hidden\n variables exclusively. Session tables contain local entries, including\n removal markers; they do not merge the global environment. *)\n\n val lookup : t -> string -> value option\n (** No I/O. [None] means absent from the selected table and visibility.\n [Removed] masks a global value; [Value \"\"] is an explicitly empty value.\n Names must be ASCII identifiers; values preserve non-NUL bytes. *)\nend","source":{"file":"lib/libtmux.mli","line":793,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","slug":"libtmux-environment"},{"id":"Libtmux.Environment.entry","publicId":"Libtmux.Environment.entry","qualifiedName":"Libtmux.Environment.entry","name":"entry","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":796,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type entry = { name : string; value : value }","source":{"file":"lib/libtmux.mli","line":796,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment","signatures":[{"raw":"type entry = {\n name: string ;\n value: value }","params":[]}],"slug":"libtmux-environment-entry"},{"id":"Libtmux.Environment.entry.name","publicId":"Libtmux.Environment.entry.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":796,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":796,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.entry","type":"string","qualifiedName":"Libtmux.Environment.name","slug":"libtmux-environment-entry-name"},{"id":"Libtmux.Environment.entry.value","publicId":"Libtmux.Environment.entry.value","name":"value","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":796,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"value : value","source":{"file":"lib/libtmux.mli","line":796,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.entry","type":"value","qualifiedName":"Libtmux.Environment.value","slug":"libtmux-environment-entry-value"},{"id":"Libtmux.Environment.lookup","publicId":"Libtmux.Environment.lookup","qualifiedName":"Libtmux.Environment.lookup","name":"lookup","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":810,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" No I/O. [None] means absent from the selected table and visibility.\n [Removed] masks a global value; [Value \"\"] is an explicitly empty value.\n Names must be ASCII identifiers; values preserve non-NUL bytes. "],"declarations":[{"kind":"function","text":"val lookup : t -> string -> value option","source":{"file":"lib/libtmux.mli","line":810,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment","doc":{"summary":"No I/O. `None` means absent from the selected table and visibility. `Removed` masks a global value; `Value \"\"` is an explicitly empty value. Names must be ASCII identifiers; values preserve non-NUL bytes."},"signatures":[{"raw":"val lookup : t -> string -> value option","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"value option"}],"slug":"libtmux-environment-lookup"},{"id":"Libtmux.Environment.scope","publicId":"Libtmux.Environment.scope","qualifiedName":"Libtmux.Environment.scope","name":"scope","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":794,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type scope = Global | Session of Session.target","source":{"file":"lib/libtmux.mli","line":794,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment","signatures":[{"raw":"type scope =\n | Global \n | Session of Session.target ","params":[]}],"slug":"libtmux-environment-scope"},{"id":"Libtmux.Environment.scope.Global","publicId":"Libtmux.Environment.scope.Global","name":"Global","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":794,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Global","source":{"file":"lib/libtmux.mli","line":794,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.scope","variant":"unit","qualifiedName":"Libtmux.Environment.Global","slug":"libtmux-environment-scope-global"},{"id":"Libtmux.Environment.scope.Session","publicId":"Libtmux.Environment.scope.Session","name":"Session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":794,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Session of Session.target","source":{"file":"lib/libtmux.mli","line":794,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.scope","variant":"tuple","qualifiedName":"Libtmux.Environment.Session","slug":"libtmux-environment-scope-session"},{"id":"Libtmux.Environment.t","publicId":"Libtmux.Environment.t","qualifiedName":"Libtmux.Environment.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":798,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" One captured environment table, in tmux order. [hidden] selects hidden\n variables exclusively. Session tables contain local entries, including\n removal markers; they do not merge the global environment. "],"declarations":[{"kind":"struct","text":"type t = {\n source : Source.t;\n scope : scope;\n hidden : bool;\n entries : entry Iarray.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }","source":{"file":"lib/libtmux.mli","line":798,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment","doc":{"summary":"One captured environment table, in tmux order. `hidden` selects hidden variables exclusively. Session tables contain local entries, including removal markers; they do not merge the global environment."},"signatures":[{"raw":"type t =\n {\n source: Source.t ;\n scope: scope ;\n hidden: bool ;\n entries: entry Iarray.t ;\n started_at_ns: int64 ;\n finished_at_ns: int64 }","params":[]}],"slug":"libtmux-environment-t"},{"id":"Libtmux.Environment.t.entries","publicId":"Libtmux.Environment.t.entries","name":"entries","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":802,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"entries : entry Iarray.t;","source":{"file":"lib/libtmux.mli","line":802,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.t","type":"entry Iarray.t","qualifiedName":"Libtmux.Environment.entries","slug":"libtmux-environment-t-entries"},{"id":"Libtmux.Environment.t.finished_at_ns","publicId":"Libtmux.Environment.t.finished_at_ns","name":"finished_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":804,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"finished_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":804,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.t","type":"int64","qualifiedName":"Libtmux.Environment.finished_at_ns","slug":"libtmux-environment-t-finished_at_ns"},{"id":"Libtmux.Environment.t.hidden","publicId":"Libtmux.Environment.t.hidden","name":"hidden","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":801,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"hidden : bool;","source":{"file":"lib/libtmux.mli","line":801,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.t","type":"bool","qualifiedName":"Libtmux.Environment.hidden","slug":"libtmux-environment-t-hidden"},{"id":"Libtmux.Environment.t.scope","publicId":"Libtmux.Environment.t.scope","name":"scope","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":800,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scope : scope;","source":{"file":"lib/libtmux.mli","line":800,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.t","type":"scope","qualifiedName":"Libtmux.Environment.scope","slug":"libtmux-environment-t-scope"},{"id":"Libtmux.Environment.t.source","publicId":"Libtmux.Environment.t.source","name":"source","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":799,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"source : Source.t;","source":{"file":"lib/libtmux.mli","line":799,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.t","type":"Source.t","qualifiedName":"Libtmux.Environment.source","slug":"libtmux-environment-t-source"},{"id":"Libtmux.Environment.t.started_at_ns","publicId":"Libtmux.Environment.t.started_at_ns","name":"started_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":803,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"started_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":803,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.t","type":"int64","qualifiedName":"Libtmux.Environment.started_at_ns","slug":"libtmux-environment-t-started_at_ns"},{"id":"Libtmux.Environment.value","publicId":"Libtmux.Environment.value","qualifiedName":"Libtmux.Environment.value","name":"value","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":795,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type value = Value of string | Removed","source":{"file":"lib/libtmux.mli","line":795,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment","signatures":[{"raw":"type value =\n | Value of string \n | Removed ","params":[]}],"slug":"libtmux-environment-value"},{"id":"Libtmux.Environment.value.Removed","publicId":"Libtmux.Environment.value.Removed","name":"Removed","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":795,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Removed","source":{"file":"lib/libtmux.mli","line":795,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.value","variant":"unit","qualifiedName":"Libtmux.Environment.Removed","slug":"libtmux-environment-value-removed"},{"id":"Libtmux.Environment.value.Value","publicId":"Libtmux.Environment.value.Value","name":"Value","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":795,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Value of string","source":{"file":"lib/libtmux.mli","line":795,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Environment.value","variant":"tuple","qualifiedName":"Libtmux.Environment.Value","slug":"libtmux-environment-value-value"},{"id":"Libtmux.Error","publicId":"Libtmux.Error","qualifiedName":"Libtmux.Error","name":"Error","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":56,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Expected input, capture, capability and transport failures. Cancellation\n belongs to the chosen backend and is not converted into an ordinary error.\n"],"declarations":[{"kind":"module","text":"module Error : sig\n type t =\n | Invalid_input of string\n | Malformed_data of string\n | Capture_raced of string\n | Unsupported_version of string\n | Unsupported_binding of string\n | Unsupported_capture_hooks\n | Unsupported of string\n | Closed\n | Disconnected of string\n | Filesystem of { operation : string; message : string }\n | Wrong_domain\n | Busy\n | Capacity of { resource : string; limit : int }\n | Stale_target\n | No_such_entity of { kind : string; id : string }\n | Command_failed of { command : string; message : string }\n | Deadline_exceeded\n | Not_started\n | Outcome_unknown of string\n\n val pp : Format.formatter -> t -> unit\nend","source":{"file":"lib/libtmux.mli","line":56,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Expected input, capture, capability and transport failures. Cancellation belongs to the chosen backend and is not converted into an ordinary error."},"slug":"libtmux-error"},{"id":"Libtmux.Error.pp","publicId":"Libtmux.Error.pp","qualifiedName":"Libtmux.Error.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":78,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":78,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-error-pp"},{"id":"Libtmux.Error.t","publicId":"Libtmux.Error.t","qualifiedName":"Libtmux.Error.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":57,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t =\n | Invalid_input of string\n | Malformed_data of string\n | Capture_raced of string\n | Unsupported_version of string\n | Unsupported_binding of string\n | Unsupported_capture_hooks\n | Unsupported of string\n | Closed\n | Disconnected of string\n | Filesystem of { operation : string; message : string }\n | Wrong_domain\n | Busy\n | Capacity of { resource : string; limit : int }\n | Stale_target\n | No_such_entity of { kind : string; id : string }\n | Command_failed of { command : string; message : string }\n | Deadline_exceeded\n | Not_started\n | Outcome_unknown of string","source":{"file":"lib/libtmux.mli","line":57,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error","signatures":[{"raw":"type t =\n | Invalid_input of string \n | Malformed_data of string \n | Capture_raced of string \n | Unsupported_version of string \n | Unsupported_binding of string \n | Unsupported_capture_hooks \n | Unsupported of string \n | Closed \n | Disconnected of string \n | Filesystem of {\n operation: string ;\n message: string } \n | Wrong_domain \n | Busy \n | Capacity of {\n resource: string ;\n limit: int } \n | Stale_target \n | No_such_entity of {\n kind: string ;\n id: string } \n | Command_failed of {\n command: string ;\n message: string } \n | Deadline_exceeded \n | Not_started \n | Outcome_unknown of string ","params":[]}],"slug":"libtmux-error-t"},{"id":"Libtmux.Error.t.Busy","publicId":"Libtmux.Error.t.Busy","name":"Busy","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":69,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Busy","source":{"file":"lib/libtmux.mli","line":69,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Busy","slug":"libtmux-error-t-busy"},{"id":"Libtmux.Error.t.Capacity","publicId":"Libtmux.Error.t.Capacity","name":"Capacity","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":70,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capacity of { resource : string; limit : int }","source":{"file":"lib/libtmux.mli","line":70,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"struct","qualifiedName":"Libtmux.Error.Capacity","slug":"libtmux-error-t-capacity"},{"id":"Libtmux.Error.t.Capacity.limit","publicId":"Libtmux.Error.t.Capacity.limit","name":"limit","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":70,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"limit : int","source":{"file":"lib/libtmux.mli","line":70,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t.Capacity","type":"int","qualifiedName":"Libtmux.Error.limit","slug":"libtmux-error-t-capacity-limit"},{"id":"Libtmux.Error.t.Capacity.resource","publicId":"Libtmux.Error.t.Capacity.resource","name":"resource","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":70,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"resource : string;","source":{"file":"lib/libtmux.mli","line":70,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t.Capacity","type":"string","qualifiedName":"Libtmux.Error.resource","slug":"libtmux-error-t-capacity-resource"},{"id":"Libtmux.Error.t.Capture_raced","publicId":"Libtmux.Error.t.Capture_raced","name":"Capture_raced","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":60,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Capture_raced of string","source":{"file":"lib/libtmux.mli","line":60,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Capture_raced","slug":"libtmux-error-t-capture_raced"},{"id":"Libtmux.Error.t.Closed","publicId":"Libtmux.Error.t.Closed","name":"Closed","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":65,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Closed","source":{"file":"lib/libtmux.mli","line":65,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Closed","slug":"libtmux-error-t-closed"},{"id":"Libtmux.Error.t.Command_failed","publicId":"Libtmux.Error.t.Command_failed","name":"Command_failed","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Command_failed of { command : string; message : string }","source":{"file":"lib/libtmux.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"struct","qualifiedName":"Libtmux.Error.Command_failed","slug":"libtmux-error-t-command_failed"},{"id":"Libtmux.Error.t.Command_failed.command","publicId":"Libtmux.Error.t.Command_failed.command","name":"command","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"command : string;","source":{"file":"lib/libtmux.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t.Command_failed","type":"string","qualifiedName":"Libtmux.Error.command","slug":"libtmux-error-t-command_failed-command"},{"id":"Libtmux.Error.t.Command_failed.message","publicId":"Libtmux.Error.t.Command_failed.message","name":"message","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"message : string","source":{"file":"lib/libtmux.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t.Command_failed","type":"string","qualifiedName":"Libtmux.Error.message","slug":"libtmux-error-t-command_failed-message"},{"id":"Libtmux.Error.t.Deadline_exceeded","publicId":"Libtmux.Error.t.Deadline_exceeded","name":"Deadline_exceeded","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":74,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Deadline_exceeded","source":{"file":"lib/libtmux.mli","line":74,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Deadline_exceeded","slug":"libtmux-error-t-deadline_exceeded"},{"id":"Libtmux.Error.t.Disconnected","publicId":"Libtmux.Error.t.Disconnected","name":"Disconnected","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":66,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Disconnected of string","source":{"file":"lib/libtmux.mli","line":66,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Disconnected","slug":"libtmux-error-t-disconnected"},{"id":"Libtmux.Error.t.Filesystem","publicId":"Libtmux.Error.t.Filesystem","name":"Filesystem","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":67,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Filesystem of { operation : string; message : string }","source":{"file":"lib/libtmux.mli","line":67,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"struct","qualifiedName":"Libtmux.Error.Filesystem","slug":"libtmux-error-t-filesystem"},{"id":"Libtmux.Error.t.Filesystem.message","publicId":"Libtmux.Error.t.Filesystem.message","name":"message","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":67,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"message : string","source":{"file":"lib/libtmux.mli","line":67,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t.Filesystem","type":"string","qualifiedName":"Libtmux.Error.message","slug":"libtmux-error-t-filesystem-message"},{"id":"Libtmux.Error.t.Filesystem.operation","publicId":"Libtmux.Error.t.Filesystem.operation","name":"operation","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":67,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"operation : string;","source":{"file":"lib/libtmux.mli","line":67,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t.Filesystem","type":"string","qualifiedName":"Libtmux.Error.operation","slug":"libtmux-error-t-filesystem-operation"},{"id":"Libtmux.Error.t.Invalid_input","publicId":"Libtmux.Error.t.Invalid_input","name":"Invalid_input","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":58,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Invalid_input of string","source":{"file":"lib/libtmux.mli","line":58,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Invalid_input","slug":"libtmux-error-t-invalid_input"},{"id":"Libtmux.Error.t.Malformed_data","publicId":"Libtmux.Error.t.Malformed_data","name":"Malformed_data","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":59,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Malformed_data of string","source":{"file":"lib/libtmux.mli","line":59,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Malformed_data","slug":"libtmux-error-t-malformed_data"},{"id":"Libtmux.Error.t.No_such_entity","publicId":"Libtmux.Error.t.No_such_entity","name":"No_such_entity","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":72,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| No_such_entity of { kind : string; id : string }","source":{"file":"lib/libtmux.mli","line":72,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"struct","qualifiedName":"Libtmux.Error.No_such_entity","slug":"libtmux-error-t-no_such_entity"},{"id":"Libtmux.Error.t.No_such_entity.id","publicId":"Libtmux.Error.t.No_such_entity.id","name":"id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":72,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"id : string","source":{"file":"lib/libtmux.mli","line":72,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t.No_such_entity","type":"string","qualifiedName":"Libtmux.Error.id","slug":"libtmux-error-t-no_such_entity-id"},{"id":"Libtmux.Error.t.No_such_entity.kind","publicId":"Libtmux.Error.t.No_such_entity.kind","name":"kind","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":72,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"kind : string;","source":{"file":"lib/libtmux.mli","line":72,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t.No_such_entity","type":"string","qualifiedName":"Libtmux.Error.kind","slug":"libtmux-error-t-no_such_entity-kind"},{"id":"Libtmux.Error.t.Not_started","publicId":"Libtmux.Error.t.Not_started","name":"Not_started","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":75,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Not_started","source":{"file":"lib/libtmux.mli","line":75,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Not_started","slug":"libtmux-error-t-not_started"},{"id":"Libtmux.Error.t.Outcome_unknown","publicId":"Libtmux.Error.t.Outcome_unknown","name":"Outcome_unknown","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":76,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Outcome_unknown of string","source":{"file":"lib/libtmux.mli","line":76,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Outcome_unknown","slug":"libtmux-error-t-outcome_unknown"},{"id":"Libtmux.Error.t.Stale_target","publicId":"Libtmux.Error.t.Stale_target","name":"Stale_target","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":71,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Stale_target","source":{"file":"lib/libtmux.mli","line":71,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Stale_target","slug":"libtmux-error-t-stale_target"},{"id":"Libtmux.Error.t.Unsupported","publicId":"Libtmux.Error.t.Unsupported","name":"Unsupported","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":64,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported of string","source":{"file":"lib/libtmux.mli","line":64,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Unsupported","slug":"libtmux-error-t-unsupported"},{"id":"Libtmux.Error.t.Unsupported_binding","publicId":"Libtmux.Error.t.Unsupported_binding","name":"Unsupported_binding","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":62,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported_binding of string","source":{"file":"lib/libtmux.mli","line":62,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Unsupported_binding","slug":"libtmux-error-t-unsupported_binding"},{"id":"Libtmux.Error.t.Unsupported_capture_hooks","publicId":"Libtmux.Error.t.Unsupported_capture_hooks","name":"Unsupported_capture_hooks","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":63,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported_capture_hooks","source":{"file":"lib/libtmux.mli","line":63,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Unsupported_capture_hooks","slug":"libtmux-error-t-unsupported_capture_hooks"},{"id":"Libtmux.Error.t.Unsupported_version","publicId":"Libtmux.Error.t.Unsupported_version","name":"Unsupported_version","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":61,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported_version of string","source":{"file":"lib/libtmux.mli","line":61,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"tuple","qualifiedName":"Libtmux.Error.Unsupported_version","slug":"libtmux-error-t-unsupported_version"},{"id":"Libtmux.Error.t.Wrong_domain","publicId":"Libtmux.Error.t.Wrong_domain","name":"Wrong_domain","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":68,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Wrong_domain","source":{"file":"lib/libtmux.mli","line":68,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Error.t","variant":"unit","qualifiedName":"Libtmux.Error.Wrong_domain","slug":"libtmux-error-t-wrong_domain"},{"id":"Libtmux.Expr","publicId":"Libtmux.Expr","qualifiedName":"Libtmux.Expr","name":"Expr","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":574,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Inspectable predicates whose entity and operand types are checked by the\n compiler. Combine native closures separately with [Seq.filter]. Evaluation\n follows captured relationships without acquisition or hidden caches. "],"declarations":[{"kind":"module","text":"module Expr : sig\n type 'entity t\n\n val all : 'a t list -> 'a t\n (** Boolean conjunction; the empty conjunction is true. *)\n\n val any : 'a t list -> 'a t\n (** Boolean disjunction; the empty disjunction is false. *)\n\n val not_ : 'a t -> 'a t\n\n module Bool : sig\n val equal : ('a, bool) Field.t -> bool -> 'a t\n val is_true : ('a, bool) Field.t -> 'a t\n val is_false : ('a, bool) Field.t -> 'a t\n end\n\n module Int : sig\n val equal : ('a, int) Field.t -> int -> 'a t\n val lt : ('a, int) Field.t -> int -> 'a t\n val le : ('a, int) Field.t -> int -> 'a t\n val gt : ('a, int) Field.t -> int -> 'a t\n val ge : ('a, int) Field.t -> int -> 'a t\n val is_in : ('a, int) Field.t -> int list -> 'a t\n end\n\n module Text : sig\n val equal : ('a, string) Field.t -> string -> 'a t\n val starts_with : ('a, string) Field.t -> string -> 'a t\n val ends_with : ('a, string) Field.t -> string -> 'a t\n val contains : ('a, string) Field.t -> string -> 'a t\n\n val is_in : ('a, string) Field.t -> string list -> 'a t\n (** Comparisons use exact bytes, without case folding or normalization. The\n empty substring matches every string. *)\n end\n\n module Rel : sig\n val any : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n val all : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n\n val none : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n (** On empty relations, [any] is false; [all] and [none] are true. One child\n must satisfy the complete nested expression. *)\n\n val is : ('a, 'b) Relation.One.t -> 'b t -> 'a t\n val exists : ('a, 'b) Relation.Optional.t -> 'b t -> 'a t\n val is_absent : ('a, 'b) Relation.Optional.t -> 'a t\n end\n\n val compile : 'a t -> 'a -> bool\n (** Prepare a reusable predicate. Compilation and evaluation perform no I/O.\n *)\n\n val pp : Format.formatter -> 'a t -> unit\n val describe : 'a t -> string\n\n type _ comparison =\n | Bool_equal : bool -> bool comparison\n | Int_equal : int -> int comparison\n | Int_lt : int -> int comparison\n | Int_le : int -> int comparison\n | Int_gt : int -> int comparison\n | Int_ge : int -> int comparison\n | Int_in : int list -> int comparison\n | Text_equal : string -> string comparison\n | Text_starts_with : string -> string comparison\n | Text_ends_with : string -> string comparison\n | Text_contains : string -> string comparison\n | Text_in : string list -> string comparison\n\n type 'a view =\n | Compare : ('a, 'v) Field.t * 'v comparison -> 'a view\n | All of 'a t list\n | Any of 'a t list\n | Not of 'a t\n | Related_any : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_all : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_none : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_one : ('a, 'b) Relation.One.t * 'b t -> 'a view\n | Related_optional : ('a, 'b) Relation.Optional.t * 'b t -> 'a view\n | Absent : ('a, 'b) Relation.Optional.t -> 'a view\n\n val view : 'a t -> 'a view\n (** Typed read-only inspection for codecs and planners. A view cannot add\n custom accessors or closures to an expression. *)\nend","source":{"file":"lib/libtmux.mli","line":574,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Inspectable predicates whose entity and operand types are checked by the compiler. Combine native closures separately with `Seq.filter`. Evaluation follows captured relationships without acquisition or hidden caches."},"slug":"libtmux-expr"},{"id":"Libtmux.Expr.Bool","publicId":"Libtmux.Expr.Bool","qualifiedName":"Libtmux.Expr.Bool","name":"Bool","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":585,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Bool : sig\n val equal : ('a, bool) Field.t -> bool -> 'a t\n val is_true : ('a, bool) Field.t -> 'a t\n val is_false : ('a, bool) Field.t -> 'a t\n end","source":{"file":"lib/libtmux.mli","line":585,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","slug":"libtmux-expr-bool"},{"id":"Libtmux.Expr.Bool.equal","publicId":"Libtmux.Expr.Bool.equal","qualifiedName":"Libtmux.Expr.Bool.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":586,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : ('a, bool) Field.t -> bool -> 'a t","source":{"file":"lib/libtmux.mli","line":586,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Bool","signatures":[{"raw":"val equal : ('a, bool) Field.t -> bool -> 'a t","params":[{"name":"arg1","type":"('a, bool) Field.t"},{"name":"arg2","type":"bool"}],"returns":"'a t"}],"slug":"libtmux-expr-bool-equal"},{"id":"Libtmux.Expr.Bool.is_false","publicId":"Libtmux.Expr.Bool.is_false","qualifiedName":"Libtmux.Expr.Bool.is_false","name":"is_false","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":588,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is_false : ('a, bool) Field.t -> 'a t","source":{"file":"lib/libtmux.mli","line":588,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Bool","signatures":[{"raw":"val is_false : ('a, bool) Field.t -> 'a t","params":[{"name":"arg1","type":"('a, bool) Field.t"}],"returns":"'a t"}],"slug":"libtmux-expr-bool-is_false"},{"id":"Libtmux.Expr.Bool.is_true","publicId":"Libtmux.Expr.Bool.is_true","qualifiedName":"Libtmux.Expr.Bool.is_true","name":"is_true","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":587,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is_true : ('a, bool) Field.t -> 'a t","source":{"file":"lib/libtmux.mli","line":587,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Bool","signatures":[{"raw":"val is_true : ('a, bool) Field.t -> 'a t","params":[{"name":"arg1","type":"('a, bool) Field.t"}],"returns":"'a t"}],"slug":"libtmux-expr-bool-is_true"},{"id":"Libtmux.Expr.Int","publicId":"Libtmux.Expr.Int","qualifiedName":"Libtmux.Expr.Int","name":"Int","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":591,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Int : sig\n val equal : ('a, int) Field.t -> int -> 'a t\n val lt : ('a, int) Field.t -> int -> 'a t\n val le : ('a, int) Field.t -> int -> 'a t\n val gt : ('a, int) Field.t -> int -> 'a t\n val ge : ('a, int) Field.t -> int -> 'a t\n val is_in : ('a, int) Field.t -> int list -> 'a t\n end","source":{"file":"lib/libtmux.mli","line":591,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","slug":"libtmux-expr-int"},{"id":"Libtmux.Expr.Int.equal","publicId":"Libtmux.Expr.Int.equal","qualifiedName":"Libtmux.Expr.Int.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":592,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : ('a, int) Field.t -> int -> 'a t","source":{"file":"lib/libtmux.mli","line":592,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val equal : ('a, int) Field.t -> int -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int"}],"returns":"'a t"}],"slug":"libtmux-expr-int-equal"},{"id":"Libtmux.Expr.Int.ge","publicId":"Libtmux.Expr.Int.ge","qualifiedName":"Libtmux.Expr.Int.ge","name":"ge","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":596,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val ge : ('a, int) Field.t -> int -> 'a t","source":{"file":"lib/libtmux.mli","line":596,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val ge : ('a, int) Field.t -> int -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int"}],"returns":"'a t"}],"slug":"libtmux-expr-int-ge"},{"id":"Libtmux.Expr.Int.gt","publicId":"Libtmux.Expr.Int.gt","qualifiedName":"Libtmux.Expr.Int.gt","name":"gt","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":595,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val gt : ('a, int) Field.t -> int -> 'a t","source":{"file":"lib/libtmux.mli","line":595,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val gt : ('a, int) Field.t -> int -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int"}],"returns":"'a t"}],"slug":"libtmux-expr-int-gt"},{"id":"Libtmux.Expr.Int.is_in","publicId":"Libtmux.Expr.Int.is_in","qualifiedName":"Libtmux.Expr.Int.is_in","name":"is_in","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":597,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is_in : ('a, int) Field.t -> int list -> 'a t","source":{"file":"lib/libtmux.mli","line":597,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val is_in : ('a, int) Field.t -> int list -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int list"}],"returns":"'a t"}],"slug":"libtmux-expr-int-is_in"},{"id":"Libtmux.Expr.Int.le","publicId":"Libtmux.Expr.Int.le","qualifiedName":"Libtmux.Expr.Int.le","name":"le","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":594,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val le : ('a, int) Field.t -> int -> 'a t","source":{"file":"lib/libtmux.mli","line":594,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val le : ('a, int) Field.t -> int -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int"}],"returns":"'a t"}],"slug":"libtmux-expr-int-le"},{"id":"Libtmux.Expr.Int.lt","publicId":"Libtmux.Expr.Int.lt","qualifiedName":"Libtmux.Expr.Int.lt","name":"lt","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":593,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val lt : ('a, int) Field.t -> int -> 'a t","source":{"file":"lib/libtmux.mli","line":593,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Int","signatures":[{"raw":"val lt : ('a, int) Field.t -> int -> 'a t","params":[{"name":"arg1","type":"('a, int) Field.t"},{"name":"arg2","type":"int"}],"returns":"'a t"}],"slug":"libtmux-expr-int-lt"},{"id":"Libtmux.Expr.Rel","publicId":"Libtmux.Expr.Rel","qualifiedName":"Libtmux.Expr.Rel","name":"Rel","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":611,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Rel : sig\n val any : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n val all : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n\n val none : ('a, 'b) Relation.Many.t -> 'b t -> 'a t\n (** On empty relations, [any] is false; [all] and [none] are true. One child\n must satisfy the complete nested expression. *)\n\n val is : ('a, 'b) Relation.One.t -> 'b t -> 'a t\n val exists : ('a, 'b) Relation.Optional.t -> 'b t -> 'a t\n val is_absent : ('a, 'b) Relation.Optional.t -> 'a t\n end","source":{"file":"lib/libtmux.mli","line":611,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","slug":"libtmux-expr-rel"},{"id":"Libtmux.Expr.Rel.all","publicId":"Libtmux.Expr.Rel.all","qualifiedName":"Libtmux.Expr.Rel.all","name":"all","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":613,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val all : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","source":{"file":"lib/libtmux.mli","line":613,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Rel","signatures":[{"raw":"val all : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.Many.t"},{"name":"arg2","type":"'b t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-all"},{"id":"Libtmux.Expr.Rel.any","publicId":"Libtmux.Expr.Rel.any","qualifiedName":"Libtmux.Expr.Rel.any","name":"any","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":612,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val any : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","source":{"file":"lib/libtmux.mli","line":612,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Rel","signatures":[{"raw":"val any : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.Many.t"},{"name":"arg2","type":"'b t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-any"},{"id":"Libtmux.Expr.Rel.exists","publicId":"Libtmux.Expr.Rel.exists","qualifiedName":"Libtmux.Expr.Rel.exists","name":"exists","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":620,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val exists : ('a, 'b) Relation.Optional.t -> 'b t -> 'a t","source":{"file":"lib/libtmux.mli","line":620,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Rel","signatures":[{"raw":"val exists : ('a, 'b) Relation.Optional.t -> 'b t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.Optional.t"},{"name":"arg2","type":"'b t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-exists"},{"id":"Libtmux.Expr.Rel.is","publicId":"Libtmux.Expr.Rel.is","qualifiedName":"Libtmux.Expr.Rel.is","name":"is","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":619,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is : ('a, 'b) Relation.One.t -> 'b t -> 'a t","source":{"file":"lib/libtmux.mli","line":619,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Rel","signatures":[{"raw":"val is : ('a, 'b) Relation.One.t -> 'b t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.One.t"},{"name":"arg2","type":"'b t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-is"},{"id":"Libtmux.Expr.Rel.is_absent","publicId":"Libtmux.Expr.Rel.is_absent","qualifiedName":"Libtmux.Expr.Rel.is_absent","name":"is_absent","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":621,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is_absent : ('a, 'b) Relation.Optional.t -> 'a t","source":{"file":"lib/libtmux.mli","line":621,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Rel","signatures":[{"raw":"val is_absent : ('a, 'b) Relation.Optional.t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.Optional.t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-is_absent"},{"id":"Libtmux.Expr.Rel.none","publicId":"Libtmux.Expr.Rel.none","qualifiedName":"Libtmux.Expr.Rel.none","name":"none","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":615,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" On empty relations, [any] is false; [all] and [none] are true. One child\n must satisfy the complete nested expression. "],"declarations":[{"kind":"function","text":"val none : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","source":{"file":"lib/libtmux.mli","line":615,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Rel","doc":{"summary":"On empty relations, `any` is false; `all` and `none` are true. One child must satisfy the complete nested expression."},"signatures":[{"raw":"val none : ('a, 'b) Relation.Many.t -> 'b t -> 'a t","params":[{"name":"arg1","type":"('a, 'b) Relation.Many.t"},{"name":"arg2","type":"'b t"}],"returns":"'a t"}],"slug":"libtmux-expr-rel-none"},{"id":"Libtmux.Expr.Text","publicId":"Libtmux.Expr.Text","qualifiedName":"Libtmux.Expr.Text","name":"Text","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":600,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Text : sig\n val equal : ('a, string) Field.t -> string -> 'a t\n val starts_with : ('a, string) Field.t -> string -> 'a t\n val ends_with : ('a, string) Field.t -> string -> 'a t\n val contains : ('a, string) Field.t -> string -> 'a t\n\n val is_in : ('a, string) Field.t -> string list -> 'a t\n (** Comparisons use exact bytes, without case folding or normalization. The\n empty substring matches every string. *)\n end","source":{"file":"lib/libtmux.mli","line":600,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","slug":"libtmux-expr-text"},{"id":"Libtmux.Expr.Text.contains","publicId":"Libtmux.Expr.Text.contains","qualifiedName":"Libtmux.Expr.Text.contains","name":"contains","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":604,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val contains : ('a, string) Field.t -> string -> 'a t","source":{"file":"lib/libtmux.mli","line":604,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Text","signatures":[{"raw":"val contains : ('a, string) Field.t -> string -> 'a t","params":[{"name":"arg1","type":"('a, string) Field.t"},{"name":"arg2","type":"string"}],"returns":"'a t"}],"slug":"libtmux-expr-text-contains"},{"id":"Libtmux.Expr.Text.ends_with","publicId":"Libtmux.Expr.Text.ends_with","qualifiedName":"Libtmux.Expr.Text.ends_with","name":"ends_with","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":603,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val ends_with : ('a, string) Field.t -> string -> 'a t","source":{"file":"lib/libtmux.mli","line":603,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Text","signatures":[{"raw":"val ends_with : ('a, string) Field.t -> string -> 'a t","params":[{"name":"arg1","type":"('a, string) Field.t"},{"name":"arg2","type":"string"}],"returns":"'a t"}],"slug":"libtmux-expr-text-ends_with"},{"id":"Libtmux.Expr.Text.equal","publicId":"Libtmux.Expr.Text.equal","qualifiedName":"Libtmux.Expr.Text.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":601,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : ('a, string) Field.t -> string -> 'a t","source":{"file":"lib/libtmux.mli","line":601,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Text","signatures":[{"raw":"val equal : ('a, string) Field.t -> string -> 'a t","params":[{"name":"arg1","type":"('a, string) Field.t"},{"name":"arg2","type":"string"}],"returns":"'a t"}],"slug":"libtmux-expr-text-equal"},{"id":"Libtmux.Expr.Text.is_in","publicId":"Libtmux.Expr.Text.is_in","qualifiedName":"Libtmux.Expr.Text.is_in","name":"is_in","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":606,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Comparisons use exact bytes, without case folding or normalization. The\n empty substring matches every string. "],"declarations":[{"kind":"function","text":"val is_in : ('a, string) Field.t -> string list -> 'a t","source":{"file":"lib/libtmux.mli","line":606,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Text","doc":{"summary":"Comparisons use exact bytes, without case folding or normalization. The empty substring matches every string."},"signatures":[{"raw":"val is_in : ('a, string) Field.t -> string list -> 'a t","params":[{"name":"arg1","type":"('a, string) Field.t"},{"name":"arg2","type":"string list"}],"returns":"'a t"}],"slug":"libtmux-expr-text-is_in"},{"id":"Libtmux.Expr.Text.starts_with","publicId":"Libtmux.Expr.Text.starts_with","qualifiedName":"Libtmux.Expr.Text.starts_with","name":"starts_with","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":602,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val starts_with : ('a, string) Field.t -> string -> 'a t","source":{"file":"lib/libtmux.mli","line":602,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.Text","signatures":[{"raw":"val starts_with : ('a, string) Field.t -> string -> 'a t","params":[{"name":"arg1","type":"('a, string) Field.t"},{"name":"arg2","type":"string"}],"returns":"'a t"}],"slug":"libtmux-expr-text-starts_with"},{"id":"Libtmux.Expr.all","publicId":"Libtmux.Expr.all","qualifiedName":"Libtmux.Expr.all","name":"all","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":577,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Boolean conjunction; the empty conjunction is true. "],"declarations":[{"kind":"function","text":"val all : 'a t list -> 'a t","source":{"file":"lib/libtmux.mli","line":577,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","doc":{"summary":"Boolean conjunction; the empty conjunction is true."},"signatures":[{"raw":"val all : 'a t list -> 'a t","params":[{"name":"arg1","type":"'a t list"}],"returns":"'a t"}],"slug":"libtmux-expr-all"},{"id":"Libtmux.Expr.any","publicId":"Libtmux.Expr.any","qualifiedName":"Libtmux.Expr.any","name":"any","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":580,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Boolean disjunction; the empty disjunction is false. "],"declarations":[{"kind":"function","text":"val any : 'a t list -> 'a t","source":{"file":"lib/libtmux.mli","line":580,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","doc":{"summary":"Boolean disjunction; the empty disjunction is false."},"signatures":[{"raw":"val any : 'a t list -> 'a t","params":[{"name":"arg1","type":"'a t list"}],"returns":"'a t"}],"slug":"libtmux-expr-any"},{"id":"Libtmux.Expr.comparison","publicId":"Libtmux.Expr.comparison","qualifiedName":"Libtmux.Expr.comparison","name":"comparison","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":631,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type _ comparison =\n | Bool_equal : bool -> bool comparison\n | Int_equal : int -> int comparison\n | Int_lt : int -> int comparison\n | Int_le : int -> int comparison\n | Int_gt : int -> int comparison\n | Int_ge : int -> int comparison\n | Int_in : int list -> int comparison\n | Text_equal : string -> string comparison\n | Text_starts_with : string -> string comparison\n | Text_ends_with : string -> string comparison\n | Text_contains : string -> string comparison\n | Text_in : string list -> string comparison","source":{"file":"lib/libtmux.mli","line":631,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"type _ comparison =\n | Bool_equal: bool -> bool comparison \n | Int_equal: int -> int comparison \n | Int_lt: int -> int comparison \n | Int_le: int -> int comparison \n | Int_gt: int -> int comparison \n | Int_ge: int -> int comparison \n | Int_in: int list -> int comparison \n | Text_equal: string -> string comparison \n | Text_starts_with: string -> string comparison \n | Text_ends_with: string -> string comparison \n | Text_contains: string -> string comparison \n | Text_in: string list -> string comparison ","params":[]}],"slug":"libtmux-expr-comparison"},{"id":"Libtmux.Expr.comparison.Bool_equal","publicId":"Libtmux.Expr.comparison.Bool_equal","name":"Bool_equal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":632,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Bool_equal : bool -> bool comparison","source":{"file":"lib/libtmux.mli","line":632,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Bool_equal","slug":"libtmux-expr-comparison-bool_equal"},{"id":"Libtmux.Expr.comparison.Int_equal","publicId":"Libtmux.Expr.comparison.Int_equal","name":"Int_equal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":633,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_equal : int -> int comparison","source":{"file":"lib/libtmux.mli","line":633,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_equal","slug":"libtmux-expr-comparison-int_equal"},{"id":"Libtmux.Expr.comparison.Int_ge","publicId":"Libtmux.Expr.comparison.Int_ge","name":"Int_ge","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":637,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_ge : int -> int comparison","source":{"file":"lib/libtmux.mli","line":637,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_ge","slug":"libtmux-expr-comparison-int_ge"},{"id":"Libtmux.Expr.comparison.Int_gt","publicId":"Libtmux.Expr.comparison.Int_gt","name":"Int_gt","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":636,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_gt : int -> int comparison","source":{"file":"lib/libtmux.mli","line":636,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_gt","slug":"libtmux-expr-comparison-int_gt"},{"id":"Libtmux.Expr.comparison.Int_in","publicId":"Libtmux.Expr.comparison.Int_in","name":"Int_in","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":638,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_in : int list -> int comparison","source":{"file":"lib/libtmux.mli","line":638,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_in","slug":"libtmux-expr-comparison-int_in"},{"id":"Libtmux.Expr.comparison.Int_le","publicId":"Libtmux.Expr.comparison.Int_le","name":"Int_le","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":635,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_le : int -> int comparison","source":{"file":"lib/libtmux.mli","line":635,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_le","slug":"libtmux-expr-comparison-int_le"},{"id":"Libtmux.Expr.comparison.Int_lt","publicId":"Libtmux.Expr.comparison.Int_lt","name":"Int_lt","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":634,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int_lt : int -> int comparison","source":{"file":"lib/libtmux.mli","line":634,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Int_lt","slug":"libtmux-expr-comparison-int_lt"},{"id":"Libtmux.Expr.comparison.Text_contains","publicId":"Libtmux.Expr.comparison.Text_contains","name":"Text_contains","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":642,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text_contains : string -> string comparison","source":{"file":"lib/libtmux.mli","line":642,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Text_contains","slug":"libtmux-expr-comparison-text_contains"},{"id":"Libtmux.Expr.comparison.Text_ends_with","publicId":"Libtmux.Expr.comparison.Text_ends_with","name":"Text_ends_with","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":641,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text_ends_with : string -> string comparison","source":{"file":"lib/libtmux.mli","line":641,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Text_ends_with","slug":"libtmux-expr-comparison-text_ends_with"},{"id":"Libtmux.Expr.comparison.Text_equal","publicId":"Libtmux.Expr.comparison.Text_equal","name":"Text_equal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":639,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text_equal : string -> string comparison","source":{"file":"lib/libtmux.mli","line":639,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Text_equal","slug":"libtmux-expr-comparison-text_equal"},{"id":"Libtmux.Expr.comparison.Text_in","publicId":"Libtmux.Expr.comparison.Text_in","name":"Text_in","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":643,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text_in : string list -> string comparison","source":{"file":"lib/libtmux.mli","line":643,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Text_in","slug":"libtmux-expr-comparison-text_in"},{"id":"Libtmux.Expr.comparison.Text_starts_with","publicId":"Libtmux.Expr.comparison.Text_starts_with","name":"Text_starts_with","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":640,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text_starts_with : string -> string comparison","source":{"file":"lib/libtmux.mli","line":640,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.comparison","variant":"tuple","qualifiedName":"Libtmux.Expr.Text_starts_with","slug":"libtmux-expr-comparison-text_starts_with"},{"id":"Libtmux.Expr.compile","publicId":"Libtmux.Expr.compile","qualifiedName":"Libtmux.Expr.compile","name":"compile","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":624,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Prepare a reusable predicate. Compilation and evaluation perform no I/O.\n "],"declarations":[{"kind":"function","text":"val compile : 'a t -> 'a -> bool","source":{"file":"lib/libtmux.mli","line":624,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","doc":{"summary":"Prepare a reusable predicate. Compilation and evaluation perform no I/O."},"signatures":[{"raw":"val compile : 'a t -> 'a -> bool","params":[{"name":"arg1","type":"'a t"},{"name":"arg2","type":"'a"}],"returns":"bool"}],"slug":"libtmux-expr-compile"},{"id":"Libtmux.Expr.describe","publicId":"Libtmux.Expr.describe","qualifiedName":"Libtmux.Expr.describe","name":"describe","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":629,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val describe : 'a t -> string","source":{"file":"lib/libtmux.mli","line":629,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"val describe : 'a t -> string","params":[{"name":"arg1","type":"'a t"}],"returns":"string"}],"slug":"libtmux-expr-describe"},{"id":"Libtmux.Expr.not_","publicId":"Libtmux.Expr.not_","qualifiedName":"Libtmux.Expr.not_","name":"not_","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":583,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val not_ : 'a t -> 'a t","source":{"file":"lib/libtmux.mli","line":583,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"val not_ : 'a t -> 'a t","params":[{"name":"arg1","type":"'a t"}],"returns":"'a t"}],"slug":"libtmux-expr-not_"},{"id":"Libtmux.Expr.pp","publicId":"Libtmux.Expr.pp","qualifiedName":"Libtmux.Expr.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":628,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> 'a t -> unit","source":{"file":"lib/libtmux.mli","line":628,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"val pp : Format.formatter -> 'a t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"'a t"}],"returns":"unit"}],"slug":"libtmux-expr-pp"},{"id":"Libtmux.Expr.t","publicId":"Libtmux.Expr.t","qualifiedName":"Libtmux.Expr.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":575,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type 'entity t","source":{"file":"lib/libtmux.mli","line":575,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"type 'entity t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-expr-t"},{"id":"Libtmux.Expr.view","publicId":"Libtmux.Expr.view","qualifiedName":"Libtmux.Expr.view","name":"view","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":657,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Typed read-only inspection for codecs and planners. A view cannot add\n custom accessors or closures to an expression. "],"declarations":[{"kind":"function","text":"val view : 'a t -> 'a view","source":{"file":"lib/libtmux.mli","line":657,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","doc":{"summary":"Typed read-only inspection for codecs and planners. A view cannot add custom accessors or closures to an expression."},"signatures":[{"raw":"val view : 'a t -> 'a view","params":[{"name":"arg1","type":"'a t"}],"returns":"'a view"}],"slug":"libtmux-expr-view"},{"id":"Libtmux.Expr.view:type","publicId":"Libtmux.Expr.view:type","qualifiedName":"Libtmux.Expr.view","name":"view","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":645,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type 'a view =\n | Compare : ('a, 'v) Field.t * 'v comparison -> 'a view\n | All of 'a t list\n | Any of 'a t list\n | Not of 'a t\n | Related_any : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_all : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_none : ('a, 'b) Relation.Many.t * 'b t -> 'a view\n | Related_one : ('a, 'b) Relation.One.t * 'b t -> 'a view\n | Related_optional : ('a, 'b) Relation.Optional.t * 'b t -> 'a view\n | Absent : ('a, 'b) Relation.Optional.t -> 'a view","source":{"file":"lib/libtmux.mli","line":645,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr","signatures":[{"raw":"type 'a view =\n | Compare: ('a, 'v) Field.t * 'v comparison -> 'a view \n | All of 'a t list \n | Any of 'a t list \n | Not of 'a t \n | Related_any: ('a, 'b) Relation.Many.t * 'b t -> 'a view \n | Related_all: ('a, 'b) Relation.Many.t * 'b t -> 'a view \n | Related_none: ('a, 'b) Relation.Many.t * 'b t -> 'a view \n | Related_one: ('a, 'b) Relation.One.t * 'b t -> 'a view \n | Related_optional: ('a, 'b) Relation.Optional.t * 'b t -> 'a view \n | Absent: ('a, 'b) Relation.Optional.t -> 'a view ","params":[]}],"slug":"libtmux-expr-view-type"},{"id":"Libtmux.Expr.view:type.Absent","publicId":"Libtmux.Expr.view:type.Absent","name":"Absent","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":655,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Absent : ('a, 'b) Relation.Optional.t -> 'a view","source":{"file":"lib/libtmux.mli","line":655,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Absent","slug":"libtmux-expr-view-type-absent"},{"id":"Libtmux.Expr.view:type.All","publicId":"Libtmux.Expr.view:type.All","name":"All","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":647,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| All of 'a t list","source":{"file":"lib/libtmux.mli","line":647,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.All","slug":"libtmux-expr-view-type-all"},{"id":"Libtmux.Expr.view:type.Any","publicId":"Libtmux.Expr.view:type.Any","name":"Any","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":648,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Any of 'a t list","source":{"file":"lib/libtmux.mli","line":648,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Any","slug":"libtmux-expr-view-type-any"},{"id":"Libtmux.Expr.view:type.Compare","publicId":"Libtmux.Expr.view:type.Compare","name":"Compare","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":646,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Compare : ('a, 'v) Field.t * 'v comparison -> 'a view","source":{"file":"lib/libtmux.mli","line":646,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Compare","slug":"libtmux-expr-view-type-compare"},{"id":"Libtmux.Expr.view:type.Not","publicId":"Libtmux.Expr.view:type.Not","name":"Not","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":649,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Not of 'a t","source":{"file":"lib/libtmux.mli","line":649,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Not","slug":"libtmux-expr-view-type-not"},{"id":"Libtmux.Expr.view:type.Related_all","publicId":"Libtmux.Expr.view:type.Related_all","name":"Related_all","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":651,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Related_all : ('a, 'b) Relation.Many.t * 'b t -> 'a view","source":{"file":"lib/libtmux.mli","line":651,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Related_all","slug":"libtmux-expr-view-type-related_all"},{"id":"Libtmux.Expr.view:type.Related_any","publicId":"Libtmux.Expr.view:type.Related_any","name":"Related_any","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":650,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Related_any : ('a, 'b) Relation.Many.t * 'b t -> 'a view","source":{"file":"lib/libtmux.mli","line":650,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Related_any","slug":"libtmux-expr-view-type-related_any"},{"id":"Libtmux.Expr.view:type.Related_none","publicId":"Libtmux.Expr.view:type.Related_none","name":"Related_none","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":652,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Related_none : ('a, 'b) Relation.Many.t * 'b t -> 'a view","source":{"file":"lib/libtmux.mli","line":652,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Related_none","slug":"libtmux-expr-view-type-related_none"},{"id":"Libtmux.Expr.view:type.Related_one","publicId":"Libtmux.Expr.view:type.Related_one","name":"Related_one","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":653,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Related_one : ('a, 'b) Relation.One.t * 'b t -> 'a view","source":{"file":"lib/libtmux.mli","line":653,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Related_one","slug":"libtmux-expr-view-type-related_one"},{"id":"Libtmux.Expr.view:type.Related_optional","publicId":"Libtmux.Expr.view:type.Related_optional","name":"Related_optional","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":654,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Related_optional : ('a, 'b) Relation.Optional.t * 'b t -> 'a view","source":{"file":"lib/libtmux.mli","line":654,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Expr.view:type","variant":"tuple","qualifiedName":"Libtmux.Expr.Related_optional","slug":"libtmux-expr-view-type-related_optional"},{"id":"Libtmux.Field","publicId":"Libtmux.Field","qualifiedName":"Libtmux.Field","name":"Field","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":143,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Sealed scalar descriptors carrying entity and value types. Descriptors read\n captured data and provide trusted identities for {!Expr} values. Use\n {!Relation} for graph edges. "],"declarations":[{"kind":"module","text":"module Field : sig\n type _ kind = Bool : bool kind | Int : int kind | Text : string kind\n type ('entity, 'value) t\n type 'entity packed = Pack : ('entity, 'value) t -> 'entity packed\n\n val name : ('entity, 'value) t -> string\n val kind : ('entity, 'value) t -> 'value kind\n\n val get : ('entity, 'value) t -> 'entity -> 'value\n (** Canonical descriptors are sealed. Accessing a field reads captured data.\n *)\nend","source":{"file":"lib/libtmux.mli","line":143,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Sealed scalar descriptors carrying entity and value types. Descriptors read captured data and provide trusted identities for {!Expr} values. Use {!Relation} for graph edges."},"slug":"libtmux-field"},{"id":"Libtmux.Field.get","publicId":"Libtmux.Field.get","qualifiedName":"Libtmux.Field.get","name":"get","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":151,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Canonical descriptors are sealed. Accessing a field reads captured data.\n "],"declarations":[{"kind":"function","text":"val get : ('entity, 'value) t -> 'entity -> 'value","source":{"file":"lib/libtmux.mli","line":151,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Field","doc":{"summary":"Canonical descriptors are sealed. Accessing a field reads captured data."},"signatures":[{"raw":"val get : ('entity, 'value) t -> 'entity -> 'value","params":[{"name":"arg1","type":"('entity, 'value) t"},{"name":"arg2","type":"'entity"}],"returns":"'value"}],"slug":"libtmux-field-get"},{"id":"Libtmux.Field.kind","publicId":"Libtmux.Field.kind","qualifiedName":"Libtmux.Field.kind","name":"kind","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":149,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val kind : ('entity, 'value) t -> 'value kind","source":{"file":"lib/libtmux.mli","line":149,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Field","signatures":[{"raw":"val kind : ('entity, 'value) t -> 'value kind","params":[{"name":"arg1","type":"('entity, 'value) t"}],"returns":"'value kind"}],"slug":"libtmux-field-kind"},{"id":"Libtmux.Field.kind:type","publicId":"Libtmux.Field.kind:type","qualifiedName":"Libtmux.Field.kind","name":"kind","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":144,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type _ kind = Bool : bool kind | Int : int kind | Text : string kind","source":{"file":"lib/libtmux.mli","line":144,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Field","signatures":[{"raw":"type _ kind =\n | Bool: bool kind \n | Int: int kind \n | Text: string kind ","params":[]}],"slug":"libtmux-field-kind-type"},{"id":"Libtmux.Field.kind:type.Bool","publicId":"Libtmux.Field.kind:type.Bool","name":"Bool","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":144,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Bool : bool kind","source":{"file":"lib/libtmux.mli","line":144,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Field.kind:type","variant":"unit","qualifiedName":"Libtmux.Field.Bool","slug":"libtmux-field-kind-type-bool"},{"id":"Libtmux.Field.kind:type.Int","publicId":"Libtmux.Field.kind:type.Int","name":"Int","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":144,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int : int kind","source":{"file":"lib/libtmux.mli","line":144,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Field.kind:type","variant":"unit","qualifiedName":"Libtmux.Field.Int","slug":"libtmux-field-kind-type-int"},{"id":"Libtmux.Field.kind:type.Text","publicId":"Libtmux.Field.kind:type.Text","name":"Text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":144,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text : string kind","source":{"file":"lib/libtmux.mli","line":144,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Field.kind:type","variant":"unit","qualifiedName":"Libtmux.Field.Text","slug":"libtmux-field-kind-type-text"},{"id":"Libtmux.Field.name","publicId":"Libtmux.Field.name","qualifiedName":"Libtmux.Field.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":148,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : ('entity, 'value) t -> string","source":{"file":"lib/libtmux.mli","line":148,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Field","signatures":[{"raw":"val name : ('entity, 'value) t -> string","params":[{"name":"arg1","type":"('entity, 'value) t"}],"returns":"string"}],"slug":"libtmux-field-name"},{"id":"Libtmux.Field.packed","publicId":"Libtmux.Field.packed","qualifiedName":"Libtmux.Field.packed","name":"packed","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":146,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type 'entity packed = Pack : ('entity, 'value) t -> 'entity packed","source":{"file":"lib/libtmux.mli","line":146,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Field","signatures":[{"raw":"type 'entity packed =\n | Pack: ('entity, 'value) t -> 'entity packed ","params":[]}],"slug":"libtmux-field-packed"},{"id":"Libtmux.Field.packed.Pack","publicId":"Libtmux.Field.packed.Pack","name":"Pack","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":146,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Pack : ('entity, 'value) t -> 'entity packed","source":{"file":"lib/libtmux.mli","line":146,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Field.packed","variant":"tuple","qualifiedName":"Libtmux.Field.Pack","slug":"libtmux-field-packed-pack"},{"id":"Libtmux.Field.t","publicId":"Libtmux.Field.t","qualifiedName":"Libtmux.Field.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":145,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type ('entity, 'value) t","source":{"file":"lib/libtmux.mli","line":145,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Field","signatures":[{"raw":"type ('entity, 'value) t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-field-t"},{"id":"Libtmux.Formats","publicId":"Libtmux.Formats","qualifiedName":"Libtmux.Formats","name":"Formats","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":495,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Formats : sig\n module Kind : sig\n type t = Text | Timestamp\n end\n\n module Context : sig\n type t =\n | Server\n | Connection\n | Session\n | Window\n | Window_link\n | Pane\n | Client\n | Buffer\n | Mouse\n | Command\n end\n\n type descriptor = {\n name : string;\n kind : Kind.t;\n contexts : Context.t list;\n versions : string list;\n }\n (** Metadata generated from pinned tmux format callbacks. [contexts] lists\n direct context dependencies, not a promise that a value exists. Caller\n variables from hooks and menus are outside this built-in catalog. *)\n\n type observation =\n | Snapshot of Snapshot.t\n | Session of Session.t\n | Window of Window.t\n | Window_link of Window_link.t\n | Pane of Pane.t\n | Client of Client_observation.t\n\n type scalar = Bool of bool | Int of int | Text of string\n\n type state =\n | Value of scalar\n | Missing\n | Unacquired\n | Unsupported\n (** [Missing] is an absence explicitly recorded in the observation, such\n as a client without terminal height. [Unacquired] means no captured\n value for this observation, including ambiguous session context for\n a pane. [Unsupported] means the name is outside the selected\n release's catalog. [Value (Text \"\")] is a captured empty string,\n never inferred absence. *)\n\n val catalog : version:string -> (descriptor Iarray.t, Error.t) result\n val describe : version:string -> string -> (descriptor option, Error.t) result\n\n val lookup :\n version:string -> observation -> string -> (state, Error.t) result\n (** No I/O. Supply the version recorded by the acquiring client's [version]\n accessor. Unsupported catalog versions return an error. Native typed\n accessors remain the primary API; lookup does not acquire extra fields. *)\nend","source":{"file":"lib/libtmux.mli","line":495,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","slug":"libtmux-formats"},{"id":"Libtmux.Formats.Context","publicId":"Libtmux.Formats.Context","qualifiedName":"Libtmux.Formats.Context","name":"Context","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":500,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Context : sig\n type t =\n | Server\n | Connection\n | Session\n | Window\n | Window_link\n | Pane\n | Client\n | Buffer\n | Mouse\n | Command\n end","source":{"file":"lib/libtmux.mli","line":500,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats","slug":"libtmux-formats-context"},{"id":"Libtmux.Formats.Context.t","publicId":"Libtmux.Formats.Context.t","qualifiedName":"Libtmux.Formats.Context.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":501,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t =\n | Server\n | Connection\n | Session\n | Window\n | Window_link\n | Pane\n | Client\n | Buffer\n | Mouse\n | Command","source":{"file":"lib/libtmux.mli","line":501,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Context","signatures":[{"raw":"type t =\n | Server \n | Connection \n | Session \n | Window \n | Window_link \n | Pane \n | Client \n | Buffer \n | Mouse \n | Command ","params":[]}],"slug":"libtmux-formats-context-t"},{"id":"Libtmux.Formats.Context.t.Buffer","publicId":"Libtmux.Formats.Context.t.Buffer","name":"Buffer","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":509,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Buffer","source":{"file":"lib/libtmux.mli","line":509,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Buffer","slug":"libtmux-formats-context-t-buffer"},{"id":"Libtmux.Formats.Context.t.Client","publicId":"Libtmux.Formats.Context.t.Client","name":"Client","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":508,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Client","source":{"file":"lib/libtmux.mli","line":508,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Client","slug":"libtmux-formats-context-t-client"},{"id":"Libtmux.Formats.Context.t.Command","publicId":"Libtmux.Formats.Context.t.Command","name":"Command","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":511,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Command","source":{"file":"lib/libtmux.mli","line":511,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Command","slug":"libtmux-formats-context-t-command"},{"id":"Libtmux.Formats.Context.t.Connection","publicId":"Libtmux.Formats.Context.t.Connection","name":"Connection","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":503,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Connection","source":{"file":"lib/libtmux.mli","line":503,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Connection","slug":"libtmux-formats-context-t-connection"},{"id":"Libtmux.Formats.Context.t.Mouse","publicId":"Libtmux.Formats.Context.t.Mouse","name":"Mouse","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":510,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Mouse","source":{"file":"lib/libtmux.mli","line":510,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Mouse","slug":"libtmux-formats-context-t-mouse"},{"id":"Libtmux.Formats.Context.t.Pane","publicId":"Libtmux.Formats.Context.t.Pane","name":"Pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":507,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Pane","source":{"file":"lib/libtmux.mli","line":507,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Pane","slug":"libtmux-formats-context-t-pane"},{"id":"Libtmux.Formats.Context.t.Server","publicId":"Libtmux.Formats.Context.t.Server","name":"Server","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":502,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Server","source":{"file":"lib/libtmux.mli","line":502,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Server","slug":"libtmux-formats-context-t-server"},{"id":"Libtmux.Formats.Context.t.Session","publicId":"Libtmux.Formats.Context.t.Session","name":"Session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":504,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Session","source":{"file":"lib/libtmux.mli","line":504,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Session","slug":"libtmux-formats-context-t-session"},{"id":"Libtmux.Formats.Context.t.Window","publicId":"Libtmux.Formats.Context.t.Window","name":"Window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":505,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window","source":{"file":"lib/libtmux.mli","line":505,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Window","slug":"libtmux-formats-context-t-window"},{"id":"Libtmux.Formats.Context.t.Window_link","publicId":"Libtmux.Formats.Context.t.Window_link","name":"Window_link","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":506,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window_link","source":{"file":"lib/libtmux.mli","line":506,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Context.t","variant":"unit","qualifiedName":"Libtmux.Formats.Context.Window_link","slug":"libtmux-formats-context-t-window_link"},{"id":"Libtmux.Formats.Kind","publicId":"Libtmux.Formats.Kind","qualifiedName":"Libtmux.Formats.Kind","name":"Kind","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":496,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Kind : sig\n type t = Text | Timestamp\n end","source":{"file":"lib/libtmux.mli","line":496,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats","slug":"libtmux-formats-kind"},{"id":"Libtmux.Formats.Kind.t","publicId":"Libtmux.Formats.Kind.t","qualifiedName":"Libtmux.Formats.Kind.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":497,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t = Text | Timestamp","source":{"file":"lib/libtmux.mli","line":497,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Kind","signatures":[{"raw":"type t =\n | Text \n | Timestamp ","params":[]}],"slug":"libtmux-formats-kind-t"},{"id":"Libtmux.Formats.Kind.t.Text","publicId":"Libtmux.Formats.Kind.t.Text","name":"Text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":497,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Text","source":{"file":"lib/libtmux.mli","line":497,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Kind.t","variant":"unit","qualifiedName":"Libtmux.Formats.Kind.Text","slug":"libtmux-formats-kind-t-text"},{"id":"Libtmux.Formats.Kind.t.Timestamp","publicId":"Libtmux.Formats.Kind.t.Timestamp","name":"Timestamp","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":497,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Timestamp","source":{"file":"lib/libtmux.mli","line":497,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.Kind.t","variant":"unit","qualifiedName":"Libtmux.Formats.Kind.Timestamp","slug":"libtmux-formats-kind-t-timestamp"},{"id":"Libtmux.Formats.catalog","publicId":"Libtmux.Formats.catalog","qualifiedName":"Libtmux.Formats.catalog","name":"catalog","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":546,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val catalog : version:string -> (descriptor Iarray.t, Error.t) result","source":{"file":"lib/libtmux.mli","line":546,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats","signatures":[{"raw":"val catalog : version:string -> (descriptor Iarray.t, Error.t) result","params":[{"name":"version","type":"string","keywordOnly":true}],"returns":"(descriptor Iarray.t, Error.t) result"}],"slug":"libtmux-formats-catalog"},{"id":"Libtmux.Formats.describe","publicId":"Libtmux.Formats.describe","qualifiedName":"Libtmux.Formats.describe","name":"describe","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":547,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val describe : version:string -> string -> (descriptor option, Error.t) result","source":{"file":"lib/libtmux.mli","line":547,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats","signatures":[{"raw":"val describe :\n version:string -> string -> (descriptor option, Error.t) result","params":[{"name":"version","type":"string","keywordOnly":true},{"name":"arg1","type":"string"}],"returns":"(descriptor option, Error.t) result"}],"slug":"libtmux-formats-describe"},{"id":"Libtmux.Formats.descriptor","publicId":"Libtmux.Formats.descriptor","qualifiedName":"Libtmux.Formats.descriptor","name":"descriptor","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":514,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Metadata generated from pinned tmux format callbacks. [contexts] lists\n direct context dependencies, not a promise that a value exists. Caller\n variables from hooks and menus are outside this built-in catalog. "],"declarations":[{"kind":"struct","text":"type descriptor = {\n name : string;\n kind : Kind.t;\n contexts : Context.t list;\n versions : string list;\n }","source":{"file":"lib/libtmux.mli","line":514,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats","doc":{"summary":"Metadata generated from pinned tmux format callbacks. `contexts` lists direct context dependencies, not a promise that a value exists. Caller variables from hooks and menus are outside this built-in catalog."},"signatures":[{"raw":"type descriptor =\n {\n name: string ;\n kind: Kind.t ;\n contexts: Context.t list ;\n versions: string list }","params":[]}],"slug":"libtmux-formats-descriptor"},{"id":"Libtmux.Formats.descriptor.contexts","publicId":"Libtmux.Formats.descriptor.contexts","name":"contexts","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":517,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"contexts : Context.t list;","source":{"file":"lib/libtmux.mli","line":517,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.descriptor","type":"Context.t list","qualifiedName":"Libtmux.Formats.contexts","slug":"libtmux-formats-descriptor-contexts"},{"id":"Libtmux.Formats.descriptor.kind","publicId":"Libtmux.Formats.descriptor.kind","name":"kind","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":516,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"kind : Kind.t;","source":{"file":"lib/libtmux.mli","line":516,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.descriptor","type":"Kind.t","qualifiedName":"Libtmux.Formats.kind","slug":"libtmux-formats-descriptor-kind"},{"id":"Libtmux.Formats.descriptor.name","publicId":"Libtmux.Formats.descriptor.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":515,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":515,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.descriptor","type":"string","qualifiedName":"Libtmux.Formats.name","slug":"libtmux-formats-descriptor-name"},{"id":"Libtmux.Formats.descriptor.versions","publicId":"Libtmux.Formats.descriptor.versions","name":"versions","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":518,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"versions : string list;","source":{"file":"lib/libtmux.mli","line":518,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.descriptor","type":"string list","qualifiedName":"Libtmux.Formats.versions","slug":"libtmux-formats-descriptor-versions"},{"id":"Libtmux.Formats.lookup","publicId":"Libtmux.Formats.lookup","qualifiedName":"Libtmux.Formats.lookup","name":"lookup","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":549,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" No I/O. Supply the version recorded by the acquiring client's [version]\n accessor. Unsupported catalog versions return an error. Native typed\n accessors remain the primary API; lookup does not acquire extra fields. "],"declarations":[{"kind":"function","text":"val lookup :\n version:string -> observation -> string -> (state, Error.t) result","source":{"file":"lib/libtmux.mli","line":549,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats","doc":{"summary":"No I/O. Supply the version recorded by the acquiring client's `version` accessor. Unsupported catalog versions return an error. Native typed accessors remain the primary API; lookup does not acquire extra fields."},"signatures":[{"raw":"val lookup :\n version:string -> observation -> string -> (state, Error.t) result","params":[{"name":"version","type":"string","keywordOnly":true},{"name":"arg1","type":"observation"},{"name":"arg2","type":"string"}],"returns":"(state, Error.t) result"}],"slug":"libtmux-formats-lookup"},{"id":"Libtmux.Formats.observation","publicId":"Libtmux.Formats.observation","qualifiedName":"Libtmux.Formats.observation","name":"observation","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":524,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type observation =\n | Snapshot of Snapshot.t\n | Session of Session.t\n | Window of Window.t\n | Window_link of Window_link.t\n | Pane of Pane.t\n | Client of Client_observation.t","source":{"file":"lib/libtmux.mli","line":524,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats","signatures":[{"raw":"type observation =\n | Snapshot of Snapshot.t \n | Session of Session.t \n | Window of Window.t \n | Window_link of Window_link.t \n | Pane of Pane.t \n | Client of Client_observation.t ","params":[]}],"slug":"libtmux-formats-observation"},{"id":"Libtmux.Formats.observation.Client","publicId":"Libtmux.Formats.observation.Client","name":"Client","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":530,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Client of Client_observation.t","source":{"file":"lib/libtmux.mli","line":530,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Client","slug":"libtmux-formats-observation-client"},{"id":"Libtmux.Formats.observation.Pane","publicId":"Libtmux.Formats.observation.Pane","name":"Pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":529,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Pane of Pane.t","source":{"file":"lib/libtmux.mli","line":529,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Pane","slug":"libtmux-formats-observation-pane"},{"id":"Libtmux.Formats.observation.Session","publicId":"Libtmux.Formats.observation.Session","name":"Session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":526,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Session of Session.t","source":{"file":"lib/libtmux.mli","line":526,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Session","slug":"libtmux-formats-observation-session"},{"id":"Libtmux.Formats.observation.Snapshot","publicId":"Libtmux.Formats.observation.Snapshot","name":"Snapshot","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":525,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Snapshot of Snapshot.t","source":{"file":"lib/libtmux.mli","line":525,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Snapshot","slug":"libtmux-formats-observation-snapshot"},{"id":"Libtmux.Formats.observation.Window","publicId":"Libtmux.Formats.observation.Window","name":"Window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":527,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window of Window.t","source":{"file":"lib/libtmux.mli","line":527,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Window","slug":"libtmux-formats-observation-window"},{"id":"Libtmux.Formats.observation.Window_link","publicId":"Libtmux.Formats.observation.Window_link","name":"Window_link","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":528,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window_link of Window_link.t","source":{"file":"lib/libtmux.mli","line":528,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.observation","variant":"tuple","qualifiedName":"Libtmux.Formats.Window_link","slug":"libtmux-formats-observation-window_link"},{"id":"Libtmux.Formats.scalar","publicId":"Libtmux.Formats.scalar","qualifiedName":"Libtmux.Formats.scalar","name":"scalar","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":532,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type scalar = Bool of bool | Int of int | Text of string","source":{"file":"lib/libtmux.mli","line":532,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats","signatures":[{"raw":"type scalar =\n | Bool of bool \n | Int of int \n | Text of string ","params":[]}],"slug":"libtmux-formats-scalar"},{"id":"Libtmux.Formats.scalar.Bool","publicId":"Libtmux.Formats.scalar.Bool","name":"Bool","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":532,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Bool of bool","source":{"file":"lib/libtmux.mli","line":532,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.scalar","variant":"tuple","qualifiedName":"Libtmux.Formats.Bool","slug":"libtmux-formats-scalar-bool"},{"id":"Libtmux.Formats.scalar.Int","publicId":"Libtmux.Formats.scalar.Int","name":"Int","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":532,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Int of int","source":{"file":"lib/libtmux.mli","line":532,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.scalar","variant":"tuple","qualifiedName":"Libtmux.Formats.Int","slug":"libtmux-formats-scalar-int"},{"id":"Libtmux.Formats.scalar.Text","publicId":"Libtmux.Formats.scalar.Text","name":"Text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":532,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text of string","source":{"file":"lib/libtmux.mli","line":532,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.scalar","variant":"tuple","qualifiedName":"Libtmux.Formats.Text","slug":"libtmux-formats-scalar-text"},{"id":"Libtmux.Formats.state","publicId":"Libtmux.Formats.state","qualifiedName":"Libtmux.Formats.state","name":"state","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":534,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type state =\n | Value of scalar\n | Missing\n | Unacquired\n | Unsupported","source":{"file":"lib/libtmux.mli","line":534,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats","signatures":[{"raw":"type state =\n | Value of scalar \n | Missing \n | Unacquired \n | Unsupported ","params":[]}],"slug":"libtmux-formats-state"},{"id":"Libtmux.Formats.state.Missing","publicId":"Libtmux.Formats.state.Missing","name":"Missing","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":536,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Missing","source":{"file":"lib/libtmux.mli","line":536,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.state","variant":"unit","qualifiedName":"Libtmux.Formats.Missing","slug":"libtmux-formats-state-missing"},{"id":"Libtmux.Formats.state.Unacquired","publicId":"Libtmux.Formats.state.Unacquired","name":"Unacquired","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":537,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unacquired","source":{"file":"lib/libtmux.mli","line":537,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.state","variant":"unit","qualifiedName":"Libtmux.Formats.Unacquired","slug":"libtmux-formats-state-unacquired"},{"id":"Libtmux.Formats.state.Unsupported","publicId":"Libtmux.Formats.state.Unsupported","name":"Unsupported","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":538,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" [Missing] is an absence explicitly recorded in the observation, such\n as a client without terminal height. [Unacquired] means no captured\n value for this observation, including ambiguous session context for\n a pane. [Unsupported] means the name is outside the selected\n release's catalog. [Value (Text \"\")] is a captured empty string,\n never inferred absence. "],"declarations":[{"kind":"constant","text":"| Unsupported","source":{"file":"lib/libtmux.mli","line":538,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.state","doc":{"summary":"`Missing` is an absence explicitly recorded in the observation, such as a client without terminal height. `Unacquired` means no captured value for this observation, including ambiguous session context for a pane. `Unsupported` means the name is outside the selected release's catalog. `Value (Text \"\")` is a captured empty string, never inferred absence."},"variant":"unit","qualifiedName":"Libtmux.Formats.Unsupported","slug":"libtmux-formats-state-unsupported"},{"id":"Libtmux.Formats.state.Value","publicId":"Libtmux.Formats.state.Value","name":"Value","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":535,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Value of scalar","source":{"file":"lib/libtmux.mli","line":535,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Formats.state","variant":"tuple","qualifiedName":"Libtmux.Formats.Value","slug":"libtmux-formats-state-value"},{"id":"Libtmux.Generation","publicId":"Libtmux.Generation","qualifiedName":"Libtmux.Generation","name":"Generation","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":83,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" A random connection-generation identifier. Reconnecting creates a new\n generation even when the socket and server PID are unchanged. "],"declarations":[{"kind":"module","text":"module Generation : sig\n type t\n\n val of_string : string -> (t, Error.t) result\n (** Import a 256-bit connection nonce as 64 lowercase hexadecimal characters.\n Backends generate a fresh random nonce for each connection. *)\n\n val to_string : t -> string\n val equal : t -> t -> bool\nend","source":{"file":"lib/libtmux.mli","line":83,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"A random connection-generation identifier. Reconnecting creates a new generation even when the socket and server PID are unchanged."},"slug":"libtmux-generation"},{"id":"Libtmux.Generation.equal","publicId":"Libtmux.Generation.equal","qualifiedName":"Libtmux.Generation.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":91,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":91,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Generation","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-generation-equal"},{"id":"Libtmux.Generation.of_string","publicId":"Libtmux.Generation.of_string","qualifiedName":"Libtmux.Generation.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":86,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Import a 256-bit connection nonce as 64 lowercase hexadecimal characters.\n Backends generate a fresh random nonce for each connection. "],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":86,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Generation","doc":{"summary":"Import a 256-bit connection nonce as 64 lowercase hexadecimal characters. Backends generate a fresh random nonce for each connection."},"signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-generation-of_string"},{"id":"Libtmux.Generation.t","publicId":"Libtmux.Generation.t","qualifiedName":"Libtmux.Generation.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":84,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":84,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Generation","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-generation-t"},{"id":"Libtmux.Generation.to_string","publicId":"Libtmux.Generation.to_string","qualifiedName":"Libtmux.Generation.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":90,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":90,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Generation","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-generation-to_string"},{"id":"Libtmux.Geometry","publicId":"Libtmux.Geometry","qualifiedName":"Libtmux.Geometry","name":"Geometry","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":762,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Geometry : sig\n type direction = Left | Right | Above | Below\n type size = Cells of int | Percent of int\nend","source":{"file":"lib/libtmux.mli","line":762,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","slug":"libtmux-geometry"},{"id":"Libtmux.Geometry.direction","publicId":"Libtmux.Geometry.direction","qualifiedName":"Libtmux.Geometry.direction","name":"direction","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":763,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type direction = Left | Right | Above | Below","source":{"file":"lib/libtmux.mli","line":763,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Geometry","signatures":[{"raw":"type direction =\n | Left \n | Right \n | Above \n | Below ","params":[]}],"slug":"libtmux-geometry-direction"},{"id":"Libtmux.Geometry.direction.Above","publicId":"Libtmux.Geometry.direction.Above","name":"Above","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":763,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Above","source":{"file":"lib/libtmux.mli","line":763,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Geometry.direction","variant":"unit","qualifiedName":"Libtmux.Geometry.Above","slug":"libtmux-geometry-direction-above"},{"id":"Libtmux.Geometry.direction.Below","publicId":"Libtmux.Geometry.direction.Below","name":"Below","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":763,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Below","source":{"file":"lib/libtmux.mli","line":763,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Geometry.direction","variant":"unit","qualifiedName":"Libtmux.Geometry.Below","slug":"libtmux-geometry-direction-below"},{"id":"Libtmux.Geometry.direction.Left","publicId":"Libtmux.Geometry.direction.Left","name":"Left","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":763,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Left","source":{"file":"lib/libtmux.mli","line":763,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Geometry.direction","variant":"unit","qualifiedName":"Libtmux.Geometry.Left","slug":"libtmux-geometry-direction-left"},{"id":"Libtmux.Geometry.direction.Right","publicId":"Libtmux.Geometry.direction.Right","name":"Right","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":763,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Right","source":{"file":"lib/libtmux.mli","line":763,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Geometry.direction","variant":"unit","qualifiedName":"Libtmux.Geometry.Right","slug":"libtmux-geometry-direction-right"},{"id":"Libtmux.Geometry.size","publicId":"Libtmux.Geometry.size","qualifiedName":"Libtmux.Geometry.size","name":"size","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":764,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type size = Cells of int | Percent of int","source":{"file":"lib/libtmux.mli","line":764,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Geometry","signatures":[{"raw":"type size =\n | Cells of int \n | Percent of int ","params":[]}],"slug":"libtmux-geometry-size"},{"id":"Libtmux.Geometry.size.Cells","publicId":"Libtmux.Geometry.size.Cells","name":"Cells","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":764,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Cells of int","source":{"file":"lib/libtmux.mli","line":764,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Geometry.size","variant":"tuple","qualifiedName":"Libtmux.Geometry.Cells","slug":"libtmux-geometry-size-cells"},{"id":"Libtmux.Geometry.size.Percent","publicId":"Libtmux.Geometry.size.Percent","name":"Percent","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":764,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Percent of int","source":{"file":"lib/libtmux.mli","line":764,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Geometry.size","variant":"tuple","qualifiedName":"Libtmux.Geometry.Percent","slug":"libtmux-geometry-size-percent"},{"id":"Libtmux.Hook","publicId":"Libtmux.Hook","qualifiedName":"Libtmux.Hook","name":"Hook","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":873,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Hook : sig\n type command = { name : string; arguments : string list }\n (** A tmux command and its distinct arguments. Setting a hook encodes these as\n command data; it does not concatenate arguments into shell code.\n Argument-specific tmux behavior, including format expansion, still applies\n when the hook runs. *)\nend","source":{"file":"lib/libtmux.mli","line":873,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","slug":"libtmux-hook"},{"id":"Libtmux.Hook.command","publicId":"Libtmux.Hook.command","qualifiedName":"Libtmux.Hook.command","name":"command","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":874,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" A tmux command and its distinct arguments. Setting a hook encodes these as\n command data; it does not concatenate arguments into shell code.\n Argument-specific tmux behavior, including format expansion, still applies\n when the hook runs. "],"declarations":[{"kind":"struct","text":"type command = { name : string; arguments : string list }","source":{"file":"lib/libtmux.mli","line":874,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Hook","doc":{"summary":"A tmux command and its distinct arguments. Setting a hook encodes these as command data; it does not concatenate arguments into shell code. Argument-specific tmux behavior, including format expansion, still applies when the hook runs."},"signatures":[{"raw":"type command = {\n name: string ;\n arguments: string list }","params":[]}],"slug":"libtmux-hook-command"},{"id":"Libtmux.Hook.command.arguments","publicId":"Libtmux.Hook.command.arguments","name":"arguments","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":874,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"arguments : string list","source":{"file":"lib/libtmux.mli","line":874,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Hook.command","type":"string list","qualifiedName":"Libtmux.Hook.arguments","slug":"libtmux-hook-command-arguments"},{"id":"Libtmux.Hook.command.name","publicId":"Libtmux.Hook.command.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":874,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":874,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Hook.command","type":"string","qualifiedName":"Libtmux.Hook.name","slug":"libtmux-hook-command-name"},{"id":"Libtmux.ID","publicId":"Libtmux.ID","qualifiedName":"Libtmux.ID","name":"ID","kind":"interface","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":128,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"interface","text":"module type ID = sig\n type t\n\n val of_string : string -> (t, Error.t) result\n (** Accept a canonical prefixed decimal tmux ID in the uint32 range. *)\n\n val to_string : t -> string\n val equal : t -> t -> bool\n val compare : t -> t -> int\n val pp : Format.formatter -> t -> unit\nend","source":{"file":"lib/libtmux.mli","line":128,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","slug":"libtmux-id"},{"id":"Libtmux.ID.compare","publicId":"Libtmux.ID.compare","qualifiedName":"Libtmux.ID.compare","name":"compare","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":136,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val compare : t -> t -> int","source":{"file":"lib/libtmux.mli","line":136,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.ID","signatures":[{"raw":"val compare : t -> t -> int","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"int"}],"slug":"libtmux-id-compare"},{"id":"Libtmux.ID.equal","publicId":"Libtmux.ID.equal","qualifiedName":"Libtmux.ID.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.ID","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-id-equal"},{"id":"Libtmux.ID.of_string","publicId":"Libtmux.ID.of_string","qualifiedName":"Libtmux.ID.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Accept a canonical prefixed decimal tmux ID in the uint32 range. "],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.ID","doc":{"summary":"Accept a canonical prefixed decimal tmux ID in the uint32 range."},"signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-id-of_string"},{"id":"Libtmux.ID.pp","publicId":"Libtmux.ID.pp","qualifiedName":"Libtmux.ID.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":137,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":137,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.ID","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-id-pp"},{"id":"Libtmux.ID.t","publicId":"Libtmux.ID.t","qualifiedName":"Libtmux.ID.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.ID","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-id-t"},{"id":"Libtmux.ID.to_string","publicId":"Libtmux.ID.to_string","qualifiedName":"Libtmux.ID.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":134,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":134,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.ID","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-id-to_string"},{"id":"Libtmux.Key","publicId":"Libtmux.Key","qualifiedName":"Libtmux.Key","name":"Key","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":724,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Key : sig\n type t =\n | Enter\n | Tab\n | Escape\n | Backspace\n | Up\n | Down\n | Left\n | Right\n | Control of char\nend","source":{"file":"lib/libtmux.mli","line":724,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","slug":"libtmux-key"},{"id":"Libtmux.Key.t","publicId":"Libtmux.Key.t","qualifiedName":"Libtmux.Key.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":725,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t =\n | Enter\n | Tab\n | Escape\n | Backspace\n | Up\n | Down\n | Left\n | Right\n | Control of char","source":{"file":"lib/libtmux.mli","line":725,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Key","signatures":[{"raw":"type t =\n | Enter \n | Tab \n | Escape \n | Backspace \n | Up \n | Down \n | Left \n | Right \n | Control of char ","params":[]}],"slug":"libtmux-key-t"},{"id":"Libtmux.Key.t.Backspace","publicId":"Libtmux.Key.t.Backspace","name":"Backspace","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":729,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Backspace","source":{"file":"lib/libtmux.mli","line":729,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Backspace","slug":"libtmux-key-t-backspace"},{"id":"Libtmux.Key.t.Control","publicId":"Libtmux.Key.t.Control","name":"Control","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":734,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Control of char","source":{"file":"lib/libtmux.mli","line":734,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Key.t","variant":"tuple","qualifiedName":"Libtmux.Key.Control","slug":"libtmux-key-t-control"},{"id":"Libtmux.Key.t.Down","publicId":"Libtmux.Key.t.Down","name":"Down","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":731,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Down","source":{"file":"lib/libtmux.mli","line":731,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Down","slug":"libtmux-key-t-down"},{"id":"Libtmux.Key.t.Enter","publicId":"Libtmux.Key.t.Enter","name":"Enter","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":726,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Enter","source":{"file":"lib/libtmux.mli","line":726,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Enter","slug":"libtmux-key-t-enter"},{"id":"Libtmux.Key.t.Escape","publicId":"Libtmux.Key.t.Escape","name":"Escape","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":728,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Escape","source":{"file":"lib/libtmux.mli","line":728,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Escape","slug":"libtmux-key-t-escape"},{"id":"Libtmux.Key.t.Left","publicId":"Libtmux.Key.t.Left","name":"Left","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":732,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Left","source":{"file":"lib/libtmux.mli","line":732,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Left","slug":"libtmux-key-t-left"},{"id":"Libtmux.Key.t.Right","publicId":"Libtmux.Key.t.Right","name":"Right","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":733,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Right","source":{"file":"lib/libtmux.mli","line":733,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Right","slug":"libtmux-key-t-right"},{"id":"Libtmux.Key.t.Tab","publicId":"Libtmux.Key.t.Tab","name":"Tab","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":727,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Tab","source":{"file":"lib/libtmux.mli","line":727,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Tab","slug":"libtmux-key-t-tab"},{"id":"Libtmux.Key.t.Up","publicId":"Libtmux.Key.t.Up","name":"Up","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":730,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Up","source":{"file":"lib/libtmux.mli","line":730,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Key.t","variant":"unit","qualifiedName":"Libtmux.Key.Up","slug":"libtmux-key-t-up"},{"id":"Libtmux.Layout","publicId":"Libtmux.Layout","qualifiedName":"Libtmux.Layout","name":"Layout","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":767,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Layout : sig\n type t =\n | Even_horizontal\n | Even_vertical\n | Main_horizontal\n | Main_vertical\n | Tiled\n | Custom of string\nend","source":{"file":"lib/libtmux.mli","line":767,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","slug":"libtmux-layout"},{"id":"Libtmux.Layout.t","publicId":"Libtmux.Layout.t","qualifiedName":"Libtmux.Layout.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":768,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t =\n | Even_horizontal\n | Even_vertical\n | Main_horizontal\n | Main_vertical\n | Tiled\n | Custom of string","source":{"file":"lib/libtmux.mli","line":768,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Layout","signatures":[{"raw":"type t =\n | Even_horizontal \n | Even_vertical \n | Main_horizontal \n | Main_vertical \n | Tiled \n | Custom of string ","params":[]}],"slug":"libtmux-layout-t"},{"id":"Libtmux.Layout.t.Custom","publicId":"Libtmux.Layout.t.Custom","name":"Custom","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":774,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Custom of string","source":{"file":"lib/libtmux.mli","line":774,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Layout.t","variant":"tuple","qualifiedName":"Libtmux.Layout.Custom","slug":"libtmux-layout-t-custom"},{"id":"Libtmux.Layout.t.Even_horizontal","publicId":"Libtmux.Layout.t.Even_horizontal","name":"Even_horizontal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":769,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Even_horizontal","source":{"file":"lib/libtmux.mli","line":769,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Layout.t","variant":"unit","qualifiedName":"Libtmux.Layout.Even_horizontal","slug":"libtmux-layout-t-even_horizontal"},{"id":"Libtmux.Layout.t.Even_vertical","publicId":"Libtmux.Layout.t.Even_vertical","name":"Even_vertical","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":770,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Even_vertical","source":{"file":"lib/libtmux.mli","line":770,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Layout.t","variant":"unit","qualifiedName":"Libtmux.Layout.Even_vertical","slug":"libtmux-layout-t-even_vertical"},{"id":"Libtmux.Layout.t.Main_horizontal","publicId":"Libtmux.Layout.t.Main_horizontal","name":"Main_horizontal","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":771,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Main_horizontal","source":{"file":"lib/libtmux.mli","line":771,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Layout.t","variant":"unit","qualifiedName":"Libtmux.Layout.Main_horizontal","slug":"libtmux-layout-t-main_horizontal"},{"id":"Libtmux.Layout.t.Main_vertical","publicId":"Libtmux.Layout.t.Main_vertical","name":"Main_vertical","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":772,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Main_vertical","source":{"file":"lib/libtmux.mli","line":772,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Layout.t","variant":"unit","qualifiedName":"Libtmux.Layout.Main_vertical","slug":"libtmux-layout-t-main_vertical"},{"id":"Libtmux.Layout.t.Tiled","publicId":"Libtmux.Layout.t.Tiled","name":"Tiled","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":773,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Tiled","source":{"file":"lib/libtmux.mli","line":773,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Layout.t","variant":"unit","qualifiedName":"Libtmux.Layout.Tiled","slug":"libtmux-layout-t-tiled"},{"id":"Libtmux.Model","publicId":"Libtmux.Model","qualifiedName":"Libtmux.Model","name":"Model","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":558,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Built-in model witnesses and canonical field lookup for typed codecs.\n Untrusted field names must resolve against the selected model. "],"declarations":[{"kind":"module","text":"module Model : sig\n type 'a t\n\n val session : Session.t t\n val window : Window.t t\n val window_link : Window_link.t t\n val pane : Pane.t t\n val client : Client_observation.t t\n val name : 'a t -> string\n val fields : 'a t -> 'a Field.packed list\n val find_field : 'a t -> string -> 'a Field.packed option\nend","source":{"file":"lib/libtmux.mli","line":558,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Built-in model witnesses and canonical field lookup for typed codecs. Untrusted field names must resolve against the selected model."},"slug":"libtmux-model"},{"id":"Libtmux.Model.client","publicId":"Libtmux.Model.client","qualifiedName":"Libtmux.Model.client","name":"client","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":565,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val client : Client_observation.t t","source":{"file":"lib/libtmux.mli","line":565,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val client : Client_observation.t t","params":[],"returns":"Client_observation.t t"}],"slug":"libtmux-model-client"},{"id":"Libtmux.Model.fields","publicId":"Libtmux.Model.fields","qualifiedName":"Libtmux.Model.fields","name":"fields","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":567,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val fields : 'a t -> 'a Field.packed list","source":{"file":"lib/libtmux.mli","line":567,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val fields : 'a t -> 'a Field.packed list","params":[{"name":"arg1","type":"'a t"}],"returns":"'a Field.packed list"}],"slug":"libtmux-model-fields"},{"id":"Libtmux.Model.find_field","publicId":"Libtmux.Model.find_field","qualifiedName":"Libtmux.Model.find_field","name":"find_field","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":568,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val find_field : 'a t -> string -> 'a Field.packed option","source":{"file":"lib/libtmux.mli","line":568,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val find_field : 'a t -> string -> 'a Field.packed option","params":[{"name":"arg1","type":"'a t"},{"name":"arg2","type":"string"}],"returns":"'a Field.packed option"}],"slug":"libtmux-model-find_field"},{"id":"Libtmux.Model.name","publicId":"Libtmux.Model.name","qualifiedName":"Libtmux.Model.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":566,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : 'a t -> string","source":{"file":"lib/libtmux.mli","line":566,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val name : 'a t -> string","params":[{"name":"arg1","type":"'a t"}],"returns":"string"}],"slug":"libtmux-model-name"},{"id":"Libtmux.Model.pane","publicId":"Libtmux.Model.pane","qualifiedName":"Libtmux.Model.pane","name":"pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":564,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val pane : Pane.t t","source":{"file":"lib/libtmux.mli","line":564,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val pane : Pane.t t","params":[],"returns":"Pane.t t"}],"slug":"libtmux-model-pane"},{"id":"Libtmux.Model.session","publicId":"Libtmux.Model.session","qualifiedName":"Libtmux.Model.session","name":"session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":561,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val session : Session.t t","source":{"file":"lib/libtmux.mli","line":561,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val session : Session.t t","params":[],"returns":"Session.t t"}],"slug":"libtmux-model-session"},{"id":"Libtmux.Model.t","publicId":"Libtmux.Model.t","qualifiedName":"Libtmux.Model.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":559,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type 'a t","source":{"file":"lib/libtmux.mli","line":559,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"type 'a t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-model-t"},{"id":"Libtmux.Model.window","publicId":"Libtmux.Model.window","qualifiedName":"Libtmux.Model.window","name":"window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":562,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val window : Window.t t","source":{"file":"lib/libtmux.mli","line":562,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val window : Window.t t","params":[],"returns":"Window.t t"}],"slug":"libtmux-model-window"},{"id":"Libtmux.Model.window_link","publicId":"Libtmux.Model.window_link","qualifiedName":"Libtmux.Model.window_link","name":"window_link","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":563,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val window_link : Window_link.t t","source":{"file":"lib/libtmux.mli","line":563,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Model","signatures":[{"raw":"val window_link : Window_link.t t","params":[],"returns":"Window_link.t t"}],"slug":"libtmux-model-window_link"},{"id":"Libtmux.Operations","publicId":"Libtmux.Operations","qualifiedName":"Libtmux.Operations","name":"Operations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1073,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Construct typed tmux operations for a backend client. Observations are\n immutable, mutations use explicit targets, and no command retries a mutation\n against another connection generation. Construction performs no I/O; the\n descriptions below state what execution does. "],"declarations":[{"kind":"module","text":"module Operations : sig\n val capture : unit -> Snapshot.t Command.t\n (** Capture and validate the complete session/window-link/pane graph. The\n result records an acquisition interval, not an atomic server instant. *)\n\n val capture_text :\n ?scratch_dir:string ->\n Pane.t ->\n start:int ->\n end_:int ->\n Captured_text.t Command.t\n (** Capture inclusive visible rows through an operation-owned temporary file.\n Require [0 <= start <= end_ < Pane.height pane]; scrollback is excluded.\n Retained bytes survive client close. The scratch directory must share the\n daemon filesystem. *)\n\n val rename_window : Window.target -> name:string -> unit Command.t\n (** Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. *)\n\n val rename_session : Session.target -> name:string -> unit Command.t\n (** Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. *)\n\n val switch_client_at :\n ?update_environment:bool ->\n Client_name.t ->\n session:Session.target ->\n unit Command.t\n (** Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. *)\n\n val request_detach_client_at : Client_name.t -> unit Command.t\n (** Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. *)\n\n val refresh_client_at : ?status_only:bool -> Client_name.t -> unit Command.t\n (** Request a redraw; no terminal-rendering completion is implied. *)\n\n val resize_control_client_at :\n Client_name.t -> width:int -> height:int -> unit Command.t\n (** Set a control client's reported size. tmux rejects terminal clients. *)\n\n val send_text : Pane.target -> text:string -> unit Command.t\n (** Literal bytes, without an implicit Enter. NUL is rejected at admission. *)\n\n val send_keys : Pane.target -> Key.t list -> unit Command.t\n (** Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. *)\n\n val wait_for : string -> unit Command.t\n (** Wait on a named tmux semaphore using a dedicated bound lane. *)\n\n val signal : string -> unit Command.t\n (** Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. *)\n\n val capture_environment :\n ?hidden:bool -> Environment.scope -> Environment.t Command.t\n (** Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n *)\n\n val set_environment :\n ?hidden:bool -> Environment.scope -> name:string -> string -> unit Command.t\n (** Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. *)\n\n val unset_environment : Environment.scope -> string -> unit Command.t\n (** Remove the local entry, allowing a global value to apply to future panes.\n *)\n\n val remove_environment : Environment.scope -> string -> unit Command.t\n (** Store a removal marker, excluding the variable from future panes. *)\n\n val capture_options :\n ?include_inherited:bool -> Options.scope -> Options.t Command.t\n (** Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Error.Unsupported}. *)\n\n val read_option :\n ?include_inherited:bool ->\n Options.scope ->\n string ->\n Options.value option Command.t\n (** Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. *)\n\n val set_option :\n ?index:int ->\n ?append:bool ->\n Options.scope ->\n name:string ->\n Options.scalar ->\n unit Command.t\n (** Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. *)\n\n val unset_option : ?index:int -> Options.scope -> string -> unit Command.t\n (** Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. *)\n\n val clear_option_array : Options.scope -> string -> unit Command.t\n (** Set a local empty array, masking inheritance. *)\n\n val capture_hooks : Options.scope -> Options.t Command.t\n (** Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. *)\n\n val read_hook :\n ?include_inherited:bool ->\n Options.scope ->\n string ->\n Options.value option Command.t\n (** Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. *)\n\n val set_hook :\n ?index:int ->\n ?append:bool ->\n Options.scope ->\n name:string ->\n Hook.command list ->\n unit Command.t\n (** Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Options.Text] value; bulk hook capture includes built-ins. Commands may\n cause arbitrary tmux effects when triggered. Hooks that print output are\n outside the supported control transport contract. *)\n\n val remove_hook : ?index:int -> Options.scope -> string -> unit Command.t\n (** Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. *)\n\n val run_hook : Options.scope -> string -> unit Command.t\n (** Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. *)\n\n val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Spawn.t ->\n name:string ->\n unit ->\n Created.t Command.t\n (** Create a detached session on the bound daemon. Name collisions fail. *)\n\n val create_window :\n ?index:int ->\n ?name:string ->\n ?spawn:Spawn.t ->\n Session.target ->\n Created.t Command.t\n (** Create detached, rejecting an occupied explicit index. *)\n\n val split_pane :\n ?size:Geometry.size ->\n ?spawn:Spawn.t ->\n Pane.target ->\n direction:Geometry.direction ->\n Created.t Command.t\n (** Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. *)\n\n val break_pane :\n ?name:string ->\n Pane.target ->\n session:Session.target ->\n index:int ->\n Created.t Command.t\n (** Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. *)\n\n val kill_session : Session.target -> unit Command.t\n (** Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. *)\n\n val kill_window : Window.target -> unit Command.t\n (** Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. *)\n\n val kill_pane : Pane.target -> unit Command.t\n (** Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. *)\n\n val select_window_at : Session.target -> index:int -> unit Command.t\n (** Operate on the session's current index at execution, not an old link\n incarnation. *)\n\n val unlink_window_at :\n ?allow_kill:bool -> Session.target -> index:int -> unit Command.t\n (** Without [allow_kill], tmux rejects removal of the last link to a window.\n *)\n\n val link_window :\n Window.target -> session:Session.target -> index:int -> unit Command.t\n (** Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. *)\n\n val move_window_at :\n Session.target ->\n from_index:int ->\n session:Session.target ->\n index:int ->\n unit Command.t\n (** Move the source session's current link at [from_index]. Destination\n collisions fail. *)\n\n val select_pane : Pane.target -> unit Command.t\n (** Make the pane active in its containing window. This does not open or\n attach a terminal client. *)\n\n val set_pane_title : Pane.target -> title:string -> unit Command.t\n (** Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. *)\n\n val resize_pane : ?width:int -> ?height:int -> Pane.target -> unit Command.t\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. *)\n\n val resize_window :\n ?width:int -> ?height:int -> Window.target -> unit Command.t\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. *)\n\n val select_layout : Window.target -> Layout.t -> unit Command.t\n (** Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. *)\n\n val cycle_layout : Window.target -> [ `Next | `Previous ] -> unit Command.t\n (** Select the next or previous tmux preset layout for this window. *)\n\n val move_pane :\n ?size:Geometry.size ->\n Pane.target ->\n beside:Pane.target ->\n direction:Geometry.direction ->\n unit Command.t\n (** Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. *)\n\n val swap_panes : Pane.target -> Pane.target -> unit Command.t\n (** Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. *)\n\n val rotate_panes : Window.target -> [ `Forward | `Backward ] -> unit Command.t\n (** Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. *)\n\n val zoom_pane : Pane.target -> unit Command.t\n (** Toggle the window's zoom state around this pane. *)\n\n val respawn_pane :\n ?kill_running:bool -> Pane.target -> Spawn.t -> unit Command.t\n (** Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. *)\n\n val clear_history : Pane.target -> unit Command.t\n (** Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. *)\nend","source":{"file":"lib/libtmux.mli","line":1073,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Construct typed tmux operations for a backend client. Observations are immutable, mutations use explicit targets, and no command retries a mutation against another connection generation. Construction performs no I/O; the descriptions below state what execution does."},"slug":"libtmux-operations"},{"id":"Libtmux.Operations.break_pane","publicId":"Libtmux.Operations.break_pane","qualifiedName":"Libtmux.Operations.break_pane","name":"break_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1257,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. "],"declarations":[{"kind":"function","text":"val break_pane :\n ?name:string ->\n Pane.target ->\n session:Session.target ->\n index:int ->\n Created.t Command.t","source":{"file":"lib/libtmux.mli","line":1257,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Move the pane into a new window at an explicit session index. An occupied destination fails. The returned IDs describe the resulting context; the pane itself already existed."},"signatures":[{"raw":"val break_pane :\n ?name:string ->\n Pane.target -> session:Session.target -> index:int -> Created.t Command.t","params":[{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.target"},{"name":"session","type":"Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"Created.t Command.t"}],"slug":"libtmux-operations-break_pane"},{"id":"Libtmux.Operations.capture","publicId":"Libtmux.Operations.capture","qualifiedName":"Libtmux.Operations.capture","name":"capture","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1074,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Capture and validate the complete session/window-link/pane graph. The\n result records an acquisition interval, not an atomic server instant. "],"declarations":[{"kind":"function","text":"val capture : unit -> Snapshot.t Command.t","source":{"file":"lib/libtmux.mli","line":1074,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Capture and validate the complete session/window-link/pane graph. The result records an acquisition interval, not an atomic server instant."},"signatures":[{"raw":"val capture : unit -> Snapshot.t Command.t","params":[{"name":"arg1","type":"unit"}],"returns":"Snapshot.t Command.t"}],"slug":"libtmux-operations-capture"},{"id":"Libtmux.Operations.capture_environment","publicId":"Libtmux.Operations.capture_environment","qualifiedName":"Libtmux.Operations.capture_environment","name":"capture_environment","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1132,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n "],"declarations":[{"kind":"function","text":"val capture_environment :\n ?hidden:bool -> Environment.scope -> Environment.t Command.t","source":{"file":"lib/libtmux.mli","line":1132,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Acquire a bounded table through a read-only command process. Its response must identify the bound daemon while the original pidfd remains live. Unsupported external variable names fail decoding; they are not omitted."},"signatures":[{"raw":"val capture_environment :\n ?hidden:bool -> Environment.scope -> Environment.t Command.t","params":[{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Environment.scope"}],"returns":"Environment.t Command.t"}],"slug":"libtmux-operations-capture_environment"},{"id":"Libtmux.Operations.capture_hooks","publicId":"Libtmux.Operations.capture_hooks","qualifiedName":"Libtmux.Operations.capture_hooks","name":"capture_hooks","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1190,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. "],"declarations":[{"kind":"function","text":"val capture_hooks : Options.scope -> Options.t Command.t","source":{"file":"lib/libtmux.mli","line":1190,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Capture locally configured built-in hooks. Command values are tmux's printed representation, retained as data."},"signatures":[{"raw":"val capture_hooks : Options.scope -> Options.t Command.t","params":[{"name":"arg1","type":"Options.scope"}],"returns":"Options.t Command.t"}],"slug":"libtmux-operations-capture_hooks"},{"id":"Libtmux.Operations.capture_options","publicId":"Libtmux.Operations.capture_options","qualifiedName":"Libtmux.Operations.capture_options","name":"capture_options","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1152,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Error.Unsupported}. "],"declarations":[{"kind":"function","text":"val capture_options :\n ?include_inherited:bool -> Options.scope -> Options.t Command.t","source":{"file":"lib/libtmux.mli","line":1152,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Acquire one bounded option table, excluding hooks. The default includes only local entries. Inherited table enumeration includes built-ins; inherited user options require `read_option` with their explicit name. Built-in descriptors cover every supported release from tmux 3.3a through 3.8; other versions return {!Error.Unsupported}."},"signatures":[{"raw":"val capture_options :\n ?include_inherited:bool -> Options.scope -> Options.t Command.t","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"}],"returns":"Options.t Command.t"}],"slug":"libtmux-operations-capture_options"},{"id":"Libtmux.Operations.capture_text","publicId":"Libtmux.Operations.capture_text","qualifiedName":"Libtmux.Operations.capture_text","name":"capture_text","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1078,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Capture inclusive visible rows through an operation-owned temporary file.\n Require [0 <= start <= end_ < Pane.height pane]; scrollback is excluded.\n Retained bytes survive client close. The scratch directory must share the\n daemon filesystem. "],"declarations":[{"kind":"function","text":"val capture_text :\n ?scratch_dir:string ->\n Pane.t ->\n start:int ->\n end_:int ->\n Captured_text.t Command.t","source":{"file":"lib/libtmux.mli","line":1078,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Capture inclusive visible rows through an operation-owned temporary file. Require `0 <= start <= end_ < Pane.height pane`; scrollback is excluded. Retained bytes survive client close. The scratch directory must share the daemon filesystem."},"signatures":[{"raw":"val capture_text :\n ?scratch_dir:string ->\n Pane.t -> start:int -> end_:int -> Captured_text.t Command.t","params":[{"name":"scratch_dir","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.t"},{"name":"start","type":"int","keywordOnly":true},{"name":"end_","type":"int","keywordOnly":true}],"returns":"Captured_text.t Command.t"}],"slug":"libtmux-operations-capture_text"},{"id":"Libtmux.Operations.clear_history","publicId":"Libtmux.Operations.clear_history","qualifiedName":"Libtmux.Operations.clear_history","name":"clear_history","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1355,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. "],"declarations":[{"kind":"function","text":"val clear_history : Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1355,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Clear stored scrollback for this pane. The visible screen and running process remain; later captures cannot recover discarded history."},"signatures":[{"raw":"val clear_history : Pane.target -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-clear_history"},{"id":"Libtmux.Operations.clear_option_array","publicId":"Libtmux.Operations.clear_option_array","qualifiedName":"Libtmux.Operations.clear_option_array","name":"clear_option_array","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1187,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a local empty array, masking inheritance. "],"declarations":[{"kind":"function","text":"val clear_option_array : Options.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1187,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set a local empty array, masking inheritance."},"signatures":[{"raw":"val clear_option_array : Options.scope -> string -> unit Command.t","params":[{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-clear_option_array"},{"id":"Libtmux.Operations.create_session","publicId":"Libtmux.Operations.create_session","qualifiedName":"Libtmux.Operations.create_session","name":"create_session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1229,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Create a detached session on the bound daemon. Name collisions fail. "],"declarations":[{"kind":"function","text":"val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Spawn.t ->\n name:string ->\n unit ->\n Created.t Command.t","source":{"file":"lib/libtmux.mli","line":1229,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Create a detached session on the bound daemon. Name collisions fail."},"signatures":[{"raw":"val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int -> ?spawn:Spawn.t -> name:string -> unit -> Created.t Command.t","params":[{"name":"window_name","type":"string","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"spawn","type":"Spawn.t","optional":true,"keywordOnly":true},{"name":"name","type":"string","keywordOnly":true},{"name":"arg1","type":"unit"}],"returns":"Created.t Command.t"}],"slug":"libtmux-operations-create_session"},{"id":"Libtmux.Operations.create_window","publicId":"Libtmux.Operations.create_window","qualifiedName":"Libtmux.Operations.create_window","name":"create_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1239,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Create detached, rejecting an occupied explicit index. "],"declarations":[{"kind":"function","text":"val create_window :\n ?index:int ->\n ?name:string ->\n ?spawn:Spawn.t ->\n Session.target ->\n Created.t Command.t","source":{"file":"lib/libtmux.mli","line":1239,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Create detached, rejecting an occupied explicit index."},"signatures":[{"raw":"val create_window :\n ?index:int ->\n ?name:string -> ?spawn:Spawn.t -> Session.target -> Created.t Command.t","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"spawn","type":"Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"Session.target"}],"returns":"Created.t Command.t"}],"slug":"libtmux-operations-create_window"},{"id":"Libtmux.Operations.cycle_layout","publicId":"Libtmux.Operations.cycle_layout","qualifiedName":"Libtmux.Operations.cycle_layout","name":"cycle_layout","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1325,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Select the next or previous tmux preset layout for this window. "],"declarations":[{"kind":"function","text":"val cycle_layout : Window.target -> [ `Next | `Previous ] -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1325,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Select the next or previous tmux preset layout for this window."},"signatures":[{"raw":"val cycle_layout : Window.target -> [ `Next | `Previous ] -> unit Command.t","params":[{"name":"arg1","type":"Window.target"},{"name":"arg2","type":"[ `Next | `Previous ]"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-cycle_layout"},{"id":"Libtmux.Operations.kill_pane","publicId":"Libtmux.Operations.kill_pane","qualifiedName":"Libtmux.Operations.kill_pane","name":"kill_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1275,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. "],"declarations":[{"kind":"function","text":"val kill_pane : Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1275,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Destroy the target pane and its running process. tmux removes a window that becomes empty and may remove its now-empty sessions."},"signatures":[{"raw":"val kill_pane : Pane.target -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-kill_pane"},{"id":"Libtmux.Operations.kill_session","publicId":"Libtmux.Operations.kill_session","qualifiedName":"Libtmux.Operations.kill_session","name":"kill_session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1267,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. "],"declarations":[{"kind":"function","text":"val kill_session : Session.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1267,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Remove the session and its window links. Windows with no other links and their panes are destroyed. Removing the last session may stop tmux."},"signatures":[{"raw":"val kill_session : Session.target -> unit Command.t","params":[{"name":"arg1","type":"Session.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-kill_session"},{"id":"Libtmux.Operations.kill_window","publicId":"Libtmux.Operations.kill_window","qualifiedName":"Libtmux.Operations.kill_window","name":"kill_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1271,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. "],"declarations":[{"kind":"function","text":"val kill_window : Window.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1271,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Destroy the window, all its session links and every contained pane. This acts on the global window, not a single contextual link."},"signatures":[{"raw":"val kill_window : Window.target -> unit Command.t","params":[{"name":"arg1","type":"Window.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-kill_window"},{"id":"Libtmux.Operations.link_window","publicId":"Libtmux.Operations.link_window","qualifiedName":"Libtmux.Operations.link_window","name":"link_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1288,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. "],"declarations":[{"kind":"function","text":"val link_window :\n Window.target -> session:Session.target -> index:int -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1288,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Add a session-specific link to the global window at `index`, rejecting an occupied index. The source window and its panes stay shared."},"signatures":[{"raw":"val link_window :\n Window.target -> session:Session.target -> index:int -> unit Command.t","params":[{"name":"arg1","type":"Window.target"},{"name":"session","type":"Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-link_window"},{"id":"Libtmux.Operations.move_pane","publicId":"Libtmux.Operations.move_pane","qualifiedName":"Libtmux.Operations.move_pane","name":"move_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1328,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. "],"declarations":[{"kind":"function","text":"val move_pane :\n ?size:Geometry.size ->\n Pane.target ->\n beside:Pane.target ->\n direction:Geometry.direction ->\n unit Command.t","source":{"file":"lib/libtmux.mli","line":1328,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Move the source pane beside another pane, optionally setting the split size. Both targets must belong to the same bound generation. An emptied source window is removed by tmux."},"signatures":[{"raw":"val move_pane :\n ?size:Geometry.size ->\n Pane.target ->\n beside:Pane.target -> direction:Geometry.direction -> unit Command.t","params":[{"name":"size","type":"Geometry.size","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.target"},{"name":"beside","type":"Pane.target","keywordOnly":true},{"name":"direction","type":"Geometry.direction","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-move_pane"},{"id":"Libtmux.Operations.move_window_at","publicId":"Libtmux.Operations.move_window_at","qualifiedName":"Libtmux.Operations.move_window_at","name":"move_window_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1293,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Move the source session's current link at [from_index]. Destination\n collisions fail. "],"declarations":[{"kind":"function","text":"val move_window_at :\n Session.target ->\n from_index:int ->\n session:Session.target ->\n index:int ->\n unit Command.t","source":{"file":"lib/libtmux.mli","line":1293,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Move the source session's current link at `from_index`. Destination collisions fail."},"signatures":[{"raw":"val move_window_at :\n Session.target ->\n from_index:int -> session:Session.target -> index:int -> unit Command.t","params":[{"name":"arg1","type":"Session.target"},{"name":"from_index","type":"int","keywordOnly":true},{"name":"session","type":"Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-move_window_at"},{"id":"Libtmux.Operations.read_hook","publicId":"Libtmux.Operations.read_hook","qualifiedName":"Libtmux.Operations.read_hook","name":"read_hook","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1194,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. "],"declarations":[{"kind":"function","text":"val read_hook :\n ?include_inherited:bool ->\n Options.scope ->\n string ->\n Options.value option Command.t","source":{"file":"lib/libtmux.mli","line":1194,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Read an exact hook name. Inheritance is included by default; `None` means no entry under the selected policy. Missing targets remain errors."},"signatures":[{"raw":"val read_hook :\n ?include_inherited:bool ->\n Options.scope -> string -> Options.value option Command.t","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"Options.value option Command.t"}],"slug":"libtmux-operations-read_hook"},{"id":"Libtmux.Operations.read_option","publicId":"Libtmux.Operations.read_option","qualifiedName":"Libtmux.Operations.read_option","name":"read_option","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1160,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. "],"declarations":[{"kind":"function","text":"val read_option :\n ?include_inherited:bool ->\n Options.scope ->\n string ->\n Options.value option Command.t","source":{"file":"lib/libtmux.mli","line":1160,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Read one exact name, including user-option inheritance. `None` means no entry under the selected policy. An invalid target remains an error. The default follows inheritance; this does not identify the defining parent scope."},"signatures":[{"raw":"val read_option :\n ?include_inherited:bool ->\n Options.scope -> string -> Options.value option Command.t","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"Options.value option Command.t"}],"slug":"libtmux-operations-read_option"},{"id":"Libtmux.Operations.refresh_client_at","publicId":"Libtmux.Operations.refresh_client_at","qualifiedName":"Libtmux.Operations.refresh_client_at","name":"refresh_client_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1111,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request a redraw; no terminal-rendering completion is implied. "],"declarations":[{"kind":"function","text":"val refresh_client_at : ?status_only:bool -> Client_name.t -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1111,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Request a redraw; no terminal-rendering completion is implied."},"signatures":[{"raw":"val refresh_client_at : ?status_only:bool -> Client_name.t -> unit Command.t","params":[{"name":"status_only","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Client_name.t"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-refresh_client_at"},{"id":"Libtmux.Operations.remove_environment","publicId":"Libtmux.Operations.remove_environment","qualifiedName":"Libtmux.Operations.remove_environment","name":"remove_environment","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1149,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Store a removal marker, excluding the variable from future panes. "],"declarations":[{"kind":"function","text":"val remove_environment : Environment.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1149,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Store a removal marker, excluding the variable from future panes."},"signatures":[{"raw":"val remove_environment : Environment.scope -> string -> unit Command.t","params":[{"name":"arg1","type":"Environment.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-remove_environment"},{"id":"Libtmux.Operations.remove_hook","publicId":"Libtmux.Operations.remove_hook","qualifiedName":"Libtmux.Operations.remove_hook","name":"remove_hook","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1217,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. "],"declarations":[{"kind":"function","text":"val remove_hook : ?index:int -> Options.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1217,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Remove the local hook or one indexed array entry. An inherited hook may become effective again; this does not stop work it already started."},"signatures":[{"raw":"val remove_hook : ?index:int -> Options.scope -> string -> unit Command.t","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-remove_hook"},{"id":"Libtmux.Operations.rename_session","publicId":"Libtmux.Operations.rename_session","qualifiedName":"Libtmux.Operations.rename_session","name":"rename_session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1093,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. "],"declarations":[{"kind":"function","text":"val rename_session : Session.target -> name:string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1093,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set the session name, rejecting a conflicting existing name. Bound IDs remain usable; existing snapshots retain their captured names."},"signatures":[{"raw":"val rename_session : Session.target -> name:string -> unit Command.t","params":[{"name":"arg1","type":"Session.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-rename_session"},{"id":"Libtmux.Operations.rename_window","publicId":"Libtmux.Operations.rename_window","qualifiedName":"Libtmux.Operations.rename_window","name":"rename_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1089,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. "],"declarations":[{"kind":"function","text":"val rename_window : Window.target -> name:string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1089,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set the global window name. Every session link observes the new name on its next capture; existing snapshots retain the old value."},"signatures":[{"raw":"val rename_window : Window.target -> name:string -> unit Command.t","params":[{"name":"arg1","type":"Window.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-rename_window"},{"id":"Libtmux.Operations.request_detach_client_at","publicId":"Libtmux.Operations.request_detach_client_at","qualifiedName":"Libtmux.Operations.request_detach_client_at","name":"request_detach_client_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1106,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. "],"declarations":[{"kind":"function","text":"val request_detach_client_at : Client_name.t -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1106,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Request detachment of the client currently bearing this name. Success confirms request processing, not peer exit. Detaching the library's own primary lane can lose the response and retire its generation."},"signatures":[{"raw":"val request_detach_client_at : Client_name.t -> unit Command.t","params":[{"name":"arg1","type":"Client_name.t"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-request_detach_client_at"},{"id":"Libtmux.Operations.resize_control_client_at","publicId":"Libtmux.Operations.resize_control_client_at","qualifiedName":"Libtmux.Operations.resize_control_client_at","name":"resize_control_client_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1114,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a control client's reported size. tmux rejects terminal clients. "],"declarations":[{"kind":"function","text":"val resize_control_client_at :\n Client_name.t -> width:int -> height:int -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1114,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set a control client's reported size. tmux rejects terminal clients."},"signatures":[{"raw":"val resize_control_client_at :\n Client_name.t -> width:int -> height:int -> unit Command.t","params":[{"name":"arg1","type":"Client_name.t"},{"name":"width","type":"int","keywordOnly":true},{"name":"height","type":"int","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-resize_control_client_at"},{"id":"Libtmux.Operations.resize_pane","publicId":"Libtmux.Operations.resize_pane","qualifiedName":"Libtmux.Operations.resize_pane","name":"resize_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1310,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. "],"declarations":[{"kind":"function","text":"val resize_pane : ?width:int -> ?height:int -> Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1310,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. tmux can constrain the result to the available layout. Capture again to observe the actual dimensions."},"signatures":[{"raw":"val resize_pane : ?width:int -> ?height:int -> Pane.target -> unit Command.t","params":[{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-resize_pane"},{"id":"Libtmux.Operations.resize_window","publicId":"Libtmux.Operations.resize_window","qualifiedName":"Libtmux.Operations.resize_window","name":"resize_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1315,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. "],"declarations":[{"kind":"function","text":"val resize_window :\n ?width:int -> ?height:int -> Window.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1315,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. Client-size and window-size policies can affect subsequent sizing."},"signatures":[{"raw":"val resize_window :\n ?width:int -> ?height:int -> Window.target -> unit Command.t","params":[{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"Window.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-resize_window"},{"id":"Libtmux.Operations.respawn_pane","publicId":"Libtmux.Operations.respawn_pane","qualifiedName":"Libtmux.Operations.respawn_pane","name":"respawn_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1349,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. "],"declarations":[{"kind":"function","text":"val respawn_pane :\n ?kill_running:bool -> Pane.target -> Spawn.t -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1349,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Start the supplied command in the existing pane. A running process causes failure unless `kill_running:true` explicitly replaces it. The pane ID remains unchanged."},"signatures":[{"raw":"val respawn_pane :\n ?kill_running:bool -> Pane.target -> Spawn.t -> unit Command.t","params":[{"name":"kill_running","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.target"},{"name":"arg2","type":"Spawn.t"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-respawn_pane"},{"id":"Libtmux.Operations.rotate_panes","publicId":"Libtmux.Operations.rotate_panes","qualifiedName":"Libtmux.Operations.rotate_panes","name":"rotate_panes","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1342,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. "],"declarations":[{"kind":"function","text":"val rotate_panes : Window.target -> [ `Forward | `Backward ] -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1342,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Rotate pane positions in the selected direction. Pane identities and running processes remain attached to their panes."},"signatures":[{"raw":"val rotate_panes :\n Window.target -> [ `Backward | `Forward ] -> unit Command.t","params":[{"name":"arg1","type":"Window.target"},{"name":"arg2","type":"[ `Backward | `Forward ]"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-rotate_panes"},{"id":"Libtmux.Operations.run_hook","publicId":"Libtmux.Operations.run_hook","qualifiedName":"Libtmux.Operations.run_hook","name":"run_hook","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1221,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. "],"declarations":[{"kind":"function","text":"val run_hook : Options.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1221,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Run the effective hook in an explicit session, window or pane context. A successful result follows completion of its synchronous command queue. Background work started by a hook has its own lifetime. A later hook failure returns an uncertain outcome; preceding effects remain. Named `@` hooks return `Unsupported` because tmux can hide their parse failures in the server log. Configuration and inspection remain available."},"signatures":[{"raw":"val run_hook : Options.scope -> string -> unit Command.t","params":[{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-run_hook"},{"id":"Libtmux.Operations.select_layout","publicId":"Libtmux.Operations.select_layout","qualifiedName":"Libtmux.Operations.select_layout","name":"select_layout","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1321,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. "],"declarations":[{"kind":"function","text":"val select_layout : Window.target -> Layout.t -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1321,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Apply a preset or validated custom layout to the window. Pane geometry follows tmux layout rules; capture again to observe the result."},"signatures":[{"raw":"val select_layout : Window.target -> Layout.t -> unit Command.t","params":[{"name":"arg1","type":"Window.target"},{"name":"arg2","type":"Layout.t"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-select_layout"},{"id":"Libtmux.Operations.select_pane","publicId":"Libtmux.Operations.select_pane","qualifiedName":"Libtmux.Operations.select_pane","name":"select_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1302,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Make the pane active in its containing window. This does not open or\n attach a terminal client. "],"declarations":[{"kind":"function","text":"val select_pane : Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1302,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Make the pane active in its containing window. This does not open or attach a terminal client."},"signatures":[{"raw":"val select_pane : Pane.target -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-select_pane"},{"id":"Libtmux.Operations.select_window_at","publicId":"Libtmux.Operations.select_window_at","qualifiedName":"Libtmux.Operations.select_window_at","name":"select_window_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1279,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Operate on the session's current index at execution, not an old link\n incarnation. "],"declarations":[{"kind":"function","text":"val select_window_at : Session.target -> index:int -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1279,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Operate on the session's current index at execution, not an old link incarnation."},"signatures":[{"raw":"val select_window_at : Session.target -> index:int -> unit Command.t","params":[{"name":"arg1","type":"Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-select_window_at"},{"id":"Libtmux.Operations.send_keys","publicId":"Libtmux.Operations.send_keys","qualifiedName":"Libtmux.Operations.send_keys","name":"send_keys","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1121,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. "],"declarations":[{"kind":"function","text":"val send_keys : Pane.target -> Key.t list -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1121,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Send named tmux keys in order, without an implicit Enter. Use {!send_text} for literal bytes rather than key interpretation."},"signatures":[{"raw":"val send_keys : Pane.target -> Key.t list -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"},{"name":"arg2","type":"Key.t list"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-send_keys"},{"id":"Libtmux.Operations.send_text","publicId":"Libtmux.Operations.send_text","qualifiedName":"Libtmux.Operations.send_text","name":"send_text","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1118,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Literal bytes, without an implicit Enter. NUL is rejected at admission. "],"declarations":[{"kind":"function","text":"val send_text : Pane.target -> text:string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1118,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Literal bytes, without an implicit Enter. NUL is rejected at admission."},"signatures":[{"raw":"val send_text : Pane.target -> text:string -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"},{"name":"text","type":"string","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-send_text"},{"id":"Libtmux.Operations.set_environment","publicId":"Libtmux.Operations.set_environment","qualifiedName":"Libtmux.Operations.set_environment","name":"set_environment","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1139,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. "],"declarations":[{"kind":"function","text":"val set_environment :\n ?hidden:bool -> Environment.scope -> name:string -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1139,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set a local environment value for future pane processes. `hidden` defaults to false; hidden values remain internal to tmux. Existing processes keep their environment."},"signatures":[{"raw":"val set_environment :\n ?hidden:bool ->\n Environment.scope -> name:string -> string -> unit Command.t","params":[{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Environment.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-set_environment"},{"id":"Libtmux.Operations.set_hook","publicId":"Libtmux.Operations.set_hook","qualifiedName":"Libtmux.Operations.set_hook","name":"set_hook","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1202,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Options.Text] value; bulk hook capture includes built-ins. Commands may\n cause arbitrary tmux effects when triggered. Hooks that print output are\n outside the supported control transport contract. "],"declarations":[{"kind":"function","text":"val set_hook :\n ?index:int ->\n ?append:bool ->\n Options.scope ->\n name:string ->\n Hook.command list ->\n unit Command.t","source":{"file":"lib/libtmux.mli","line":1202,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set a hook to a nonempty command list. Without an index, replace the whole hook array, or fill the lowest free index when appending. An explicit `@name` custom hook stores command text as a user option; it requires complete replacement and has no array indexes. `read_hook` returns its `Options.Text` value; bulk hook capture includes built-ins. Commands may cause arbitrary tmux effects when triggered. Hooks that print output are outside the supported control transport contract."},"signatures":[{"raw":"val set_hook :\n ?index:int ->\n ?append:bool ->\n Options.scope -> name:string -> Hook.command list -> unit Command.t","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg2","type":"Hook.command list"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-set_hook"},{"id":"Libtmux.Operations.set_option","publicId":"Libtmux.Operations.set_option","qualifiedName":"Libtmux.Operations.set_option","name":"set_option","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1170,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. "],"declarations":[{"kind":"function","text":"val set_option :\n ?index:int ->\n ?append:bool ->\n Options.scope ->\n name:string ->\n Options.scalar ->\n unit Command.t","source":{"file":"lib/libtmux.mli","line":1170,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Validate the scope and scalar kind before admission. Array values require an index, or `append:true`. Without an index, tmux splits appended text using the option's separator and fills the lowest unused indexes. Text is literal; tmux format expansion is disabled. Hooks use a separate operation."},"signatures":[{"raw":"val set_option :\n ?index:int ->\n ?append:bool ->\n Options.scope -> name:string -> Options.scalar -> unit Command.t","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg2","type":"Options.scalar"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-set_option"},{"id":"Libtmux.Operations.set_pane_title","publicId":"Libtmux.Operations.set_pane_title","qualifiedName":"Libtmux.Operations.set_pane_title","name":"set_pane_title","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1306,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. "],"declarations":[{"kind":"function","text":"val set_pane_title : Pane.target -> title:string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1306,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Set the pane title as literal text, without tmux format expansion. A running terminal application can subsequently replace the title."},"signatures":[{"raw":"val set_pane_title : Pane.target -> title:string -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"},{"name":"title","type":"string","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-set_pane_title"},{"id":"Libtmux.Operations.signal","publicId":"Libtmux.Operations.signal","qualifiedName":"Libtmux.Operations.signal","name":"signal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1128,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. "],"declarations":[{"kind":"function","text":"val signal : string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1128,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Signal a named tmux semaphore, releasing a waiter or retaining the signal for a later {!wait_for}. This does not signal an OS process."},"signatures":[{"raw":"val signal : string -> unit Command.t","params":[{"name":"arg1","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-signal"},{"id":"Libtmux.Operations.split_pane","publicId":"Libtmux.Operations.split_pane","qualifiedName":"Libtmux.Operations.split_pane","name":"split_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1247,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. "],"declarations":[{"kind":"function","text":"val split_pane :\n ?size:Geometry.size ->\n ?spawn:Spawn.t ->\n Pane.target ->\n direction:Geometry.direction ->\n Created.t Command.t","source":{"file":"lib/libtmux.mli","line":1247,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Create a detached pane beside the target and return the IDs reported by tmux. Omitted `size` lets tmux choose the split; tmux rejects splits when no space remains."},"signatures":[{"raw":"val split_pane :\n ?size:Geometry.size ->\n ?spawn:Spawn.t ->\n Pane.target -> direction:Geometry.direction -> Created.t Command.t","params":[{"name":"size","type":"Geometry.size","optional":true,"keywordOnly":true},{"name":"spawn","type":"Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.target"},{"name":"direction","type":"Geometry.direction","keywordOnly":true}],"returns":"Created.t Command.t"}],"slug":"libtmux-operations-split_pane"},{"id":"Libtmux.Operations.swap_panes","publicId":"Libtmux.Operations.swap_panes","qualifiedName":"Libtmux.Operations.swap_panes","name":"swap_panes","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1338,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. "],"declarations":[{"kind":"function","text":"val swap_panes : Pane.target -> Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1338,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Exchange pane positions without exchanging their identities or running processes. Both targets must belong to the same bound generation."},"signatures":[{"raw":"val swap_panes : Pane.target -> Pane.target -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"},{"name":"arg2","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-swap_panes"},{"id":"Libtmux.Operations.switch_client_at","publicId":"Libtmux.Operations.switch_client_at","qualifiedName":"Libtmux.Operations.switch_client_at","name":"switch_client_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1097,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. "],"declarations":[{"kind":"function","text":"val switch_client_at :\n ?update_environment:bool ->\n Client_name.t ->\n session:Session.target ->\n unit Command.t","source":{"file":"lib/libtmux.mli","line":1097,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Switch the client currently bearing this name to the bound session. Environment updates are disabled by default. This can move either a terminal client or a control client; it does not open a new terminal."},"signatures":[{"raw":"val switch_client_at :\n ?update_environment:bool ->\n Client_name.t -> session:Session.target -> unit Command.t","params":[{"name":"update_environment","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Client_name.t"},{"name":"session","type":"Session.target","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-switch_client_at"},{"id":"Libtmux.Operations.unlink_window_at","publicId":"Libtmux.Operations.unlink_window_at","qualifiedName":"Libtmux.Operations.unlink_window_at","name":"unlink_window_at","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1283,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Without [allow_kill], tmux rejects removal of the last link to a window.\n "],"declarations":[{"kind":"function","text":"val unlink_window_at :\n ?allow_kill:bool -> Session.target -> index:int -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1283,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Without `allow_kill`, tmux rejects removal of the last link to a window."},"signatures":[{"raw":"val unlink_window_at :\n ?allow_kill:bool -> Session.target -> index:int -> unit Command.t","params":[{"name":"allow_kill","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"unit Command.t"}],"slug":"libtmux-operations-unlink_window_at"},{"id":"Libtmux.Operations.unset_environment","publicId":"Libtmux.Operations.unset_environment","qualifiedName":"Libtmux.Operations.unset_environment","name":"unset_environment","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1145,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove the local entry, allowing a global value to apply to future panes.\n "],"declarations":[{"kind":"function","text":"val unset_environment : Environment.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1145,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Remove the local entry, allowing a global value to apply to future panes."},"signatures":[{"raw":"val unset_environment : Environment.scope -> string -> unit Command.t","params":[{"name":"arg1","type":"Environment.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-unset_environment"},{"id":"Libtmux.Operations.unset_option","publicId":"Libtmux.Operations.unset_option","qualifiedName":"Libtmux.Operations.unset_option","name":"unset_option","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1183,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. "],"declarations":[{"kind":"function","text":"val unset_option : ?index:int -> Options.scope -> string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1183,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Remove a local override or one array element. Global built-ins reset to their tmux defaults; this does not recursively unset child overrides."},"signatures":[{"raw":"val unset_option : ?index:int -> Options.scope -> string -> unit Command.t","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"Options.scope"},{"name":"arg2","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-unset_option"},{"id":"Libtmux.Operations.wait_for","publicId":"Libtmux.Operations.wait_for","qualifiedName":"Libtmux.Operations.wait_for","name":"wait_for","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1125,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Wait on a named tmux semaphore using a dedicated bound lane. "],"declarations":[{"kind":"function","text":"val wait_for : string -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1125,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Wait on a named tmux semaphore using a dedicated bound lane."},"signatures":[{"raw":"val wait_for : string -> unit Command.t","params":[{"name":"arg1","type":"string"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-wait_for"},{"id":"Libtmux.Operations.zoom_pane","publicId":"Libtmux.Operations.zoom_pane","qualifiedName":"Libtmux.Operations.zoom_pane","name":"zoom_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1346,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Toggle the window's zoom state around this pane. "],"declarations":[{"kind":"function","text":"val zoom_pane : Pane.target -> unit Command.t","source":{"file":"lib/libtmux.mli","line":1346,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Operations","doc":{"summary":"Toggle the window's zoom state around this pane."},"signatures":[{"raw":"val zoom_pane : Pane.target -> unit Command.t","params":[{"name":"arg1","type":"Pane.target"}],"returns":"unit Command.t"}],"slug":"libtmux-operations-zoom_pane"},{"id":"Libtmux.Options","publicId":"Libtmux.Options","qualifiedName":"Libtmux.Options","name":"Options","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":818,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Version-aware option descriptors and captured scoped values. Sparse array\n indexes and inherited entries retain their tmux meaning. "],"declarations":[{"kind":"module","text":"module Options : sig\n module Kind : sig\n type t = Text | Number | Flag | Choice | Key | Colour | Commands\n end\n\n type descriptor = {\n name : string;\n kind : Kind.t;\n array : bool;\n hook : bool;\n scopes : [ `Server | `Session | `Window | `Pane ] list;\n versions : string list;\n }\n (** Generated upstream descriptors. [versions] lists qualified releases; user\n options have no built-in release history. *)\n\n type scope =\n | Server\n | Global_sessions\n | Global_windows\n | Session of Session.target\n | Window of Window.target\n | Pane of Pane.target\n\n type scalar =\n | Text of string\n | Integer of int64\n | Bool of bool\n | Choice of string\n | Key of string\n | Colour of string\n | Commands of string\n\n type value = Scalar of scalar | Array of (int * scalar) Iarray.t\n type entry = { descriptor : descriptor; value : value; inherited : bool }\n\n type t = {\n source : Source.t;\n scope : scope;\n include_inherited : bool;\n entries : entry Iarray.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }\n (** Captured options in tmux order, with original array indexes. An empty\n array differs from an absent local entry. No accessor performs I/O. *)\n\n val catalog : version:string -> (descriptor Iarray.t, Error.t) result\n val describe : version:string -> string -> (descriptor, Error.t) result\n\n val lookup : t -> string -> entry option\n (** [None] means absent from this capture's selected scope and inheritance\n policy. Use [describe] to distinguish an unsupported built-in name. *)\nend","source":{"file":"lib/libtmux.mli","line":818,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Version-aware option descriptors and captured scoped values. Sparse array indexes and inherited entries retain their tmux meaning."},"slug":"libtmux-options"},{"id":"Libtmux.Options.Kind","publicId":"Libtmux.Options.Kind","qualifiedName":"Libtmux.Options.Kind","name":"Kind","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":819,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Kind : sig\n type t = Text | Number | Flag | Choice | Key | Colour | Commands\n end","source":{"file":"lib/libtmux.mli","line":819,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options","slug":"libtmux-options-kind"},{"id":"Libtmux.Options.Kind.t","publicId":"Libtmux.Options.Kind.t","qualifiedName":"Libtmux.Options.Kind.t","name":"t","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type t = Text | Number | Flag | Choice | Key | Colour | Commands","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.Kind","signatures":[{"raw":"type t =\n | Text \n | Number \n | Flag \n | Choice \n | Key \n | Colour \n | Commands ","params":[]}],"slug":"libtmux-options-kind-t"},{"id":"Libtmux.Options.Kind.t.Choice","publicId":"Libtmux.Options.Kind.t.Choice","name":"Choice","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Choice","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Choice","slug":"libtmux-options-kind-t-choice"},{"id":"Libtmux.Options.Kind.t.Colour","publicId":"Libtmux.Options.Kind.t.Colour","name":"Colour","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Colour","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Colour","slug":"libtmux-options-kind-t-colour"},{"id":"Libtmux.Options.Kind.t.Commands","publicId":"Libtmux.Options.Kind.t.Commands","name":"Commands","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Commands","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Commands","slug":"libtmux-options-kind-t-commands"},{"id":"Libtmux.Options.Kind.t.Flag","publicId":"Libtmux.Options.Kind.t.Flag","name":"Flag","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Flag","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Flag","slug":"libtmux-options-kind-t-flag"},{"id":"Libtmux.Options.Kind.t.Key","publicId":"Libtmux.Options.Kind.t.Key","name":"Key","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Key","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Key","slug":"libtmux-options-kind-t-key"},{"id":"Libtmux.Options.Kind.t.Number","publicId":"Libtmux.Options.Kind.t.Number","name":"Number","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Number","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Number","slug":"libtmux-options-kind-t-number"},{"id":"Libtmux.Options.Kind.t.Text","publicId":"Libtmux.Options.Kind.t.Text","name":"Text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":820,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Text","source":{"file":"lib/libtmux.mli","line":820,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.Kind.t","variant":"unit","qualifiedName":"Libtmux.Options.Kind.Text","slug":"libtmux-options-kind-t-text"},{"id":"Libtmux.Options.catalog","publicId":"Libtmux.Options.catalog","qualifiedName":"Libtmux.Options.catalog","name":"catalog","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":865,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val catalog : version:string -> (descriptor Iarray.t, Error.t) result","source":{"file":"lib/libtmux.mli","line":865,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"val catalog : version:string -> (descriptor Iarray.t, Error.t) result","params":[{"name":"version","type":"string","keywordOnly":true}],"returns":"(descriptor Iarray.t, Error.t) result"}],"slug":"libtmux-options-catalog"},{"id":"Libtmux.Options.describe","publicId":"Libtmux.Options.describe","qualifiedName":"Libtmux.Options.describe","name":"describe","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":866,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val describe : version:string -> string -> (descriptor, Error.t) result","source":{"file":"lib/libtmux.mli","line":866,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"val describe : version:string -> string -> (descriptor, Error.t) result","params":[{"name":"version","type":"string","keywordOnly":true},{"name":"arg1","type":"string"}],"returns":"(descriptor, Error.t) result"}],"slug":"libtmux-options-describe"},{"id":"Libtmux.Options.descriptor","publicId":"Libtmux.Options.descriptor","qualifiedName":"Libtmux.Options.descriptor","name":"descriptor","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":823,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Generated upstream descriptors. [versions] lists qualified releases; user\n options have no built-in release history. "],"declarations":[{"kind":"struct","text":"type descriptor = {\n name : string;\n kind : Kind.t;\n array : bool;\n hook : bool;\n scopes : [ `Server | `Session | `Window | `Pane ] list;\n versions : string list;\n }","source":{"file":"lib/libtmux.mli","line":823,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options","doc":{"summary":"Generated upstream descriptors. `versions` lists qualified releases; user options have no built-in release history."},"signatures":[{"raw":"type descriptor =\n {\n name: string ;\n kind: Kind.t ;\n array: bool ;\n hook: bool ;\n scopes: [ `Server | `Session | `Window | `Pane ] list ;\n versions: string list }","params":[]}],"slug":"libtmux-options-descriptor"},{"id":"Libtmux.Options.descriptor.array","publicId":"Libtmux.Options.descriptor.array","name":"array","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":826,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"array : bool;","source":{"file":"lib/libtmux.mli","line":826,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.descriptor","type":"bool","qualifiedName":"Libtmux.Options.array","slug":"libtmux-options-descriptor-array"},{"id":"Libtmux.Options.descriptor.hook","publicId":"Libtmux.Options.descriptor.hook","name":"hook","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":827,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"hook : bool;","source":{"file":"lib/libtmux.mli","line":827,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.descriptor","type":"bool","qualifiedName":"Libtmux.Options.hook","slug":"libtmux-options-descriptor-hook"},{"id":"Libtmux.Options.descriptor.kind","publicId":"Libtmux.Options.descriptor.kind","name":"kind","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":825,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"kind : Kind.t;","source":{"file":"lib/libtmux.mli","line":825,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.descriptor","type":"Kind.t","qualifiedName":"Libtmux.Options.kind","slug":"libtmux-options-descriptor-kind"},{"id":"Libtmux.Options.descriptor.name","publicId":"Libtmux.Options.descriptor.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":824,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":824,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.descriptor","type":"string","qualifiedName":"Libtmux.Options.name","slug":"libtmux-options-descriptor-name"},{"id":"Libtmux.Options.descriptor.scopes","publicId":"Libtmux.Options.descriptor.scopes","name":"scopes","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":828,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scopes : [ `Server | `Session | `Window | `Pane ] list;","source":{"file":"lib/libtmux.mli","line":828,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.descriptor","type":"[ `Pane | `Server | `Session | `Window ] list","qualifiedName":"Libtmux.Options.scopes","slug":"libtmux-options-descriptor-scopes"},{"id":"Libtmux.Options.descriptor.versions","publicId":"Libtmux.Options.descriptor.versions","name":"versions","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":829,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"versions : string list;","source":{"file":"lib/libtmux.mli","line":829,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.descriptor","type":"string list","qualifiedName":"Libtmux.Options.versions","slug":"libtmux-options-descriptor-versions"},{"id":"Libtmux.Options.entry","publicId":"Libtmux.Options.entry","qualifiedName":"Libtmux.Options.entry","name":"entry","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":852,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type entry = { descriptor : descriptor; value : value; inherited : bool }","source":{"file":"lib/libtmux.mli","line":852,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"type entry = {\n descriptor: descriptor ;\n value: value ;\n inherited: bool }","params":[]}],"slug":"libtmux-options-entry"},{"id":"Libtmux.Options.entry.descriptor","publicId":"Libtmux.Options.entry.descriptor","name":"descriptor","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":852,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"descriptor : descriptor;","source":{"file":"lib/libtmux.mli","line":852,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.entry","type":"descriptor","qualifiedName":"Libtmux.Options.descriptor","slug":"libtmux-options-entry-descriptor"},{"id":"Libtmux.Options.entry.inherited","publicId":"Libtmux.Options.entry.inherited","name":"inherited","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":852,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"inherited : bool","source":{"file":"lib/libtmux.mli","line":852,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.entry","type":"bool","qualifiedName":"Libtmux.Options.inherited","slug":"libtmux-options-entry-inherited"},{"id":"Libtmux.Options.entry.value","publicId":"Libtmux.Options.entry.value","name":"value","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":852,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"value : value;","source":{"file":"lib/libtmux.mli","line":852,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.entry","type":"value","qualifiedName":"Libtmux.Options.value","slug":"libtmux-options-entry-value"},{"id":"Libtmux.Options.lookup","publicId":"Libtmux.Options.lookup","qualifiedName":"Libtmux.Options.lookup","name":"lookup","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":868,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" [None] means absent from this capture's selected scope and inheritance\n policy. Use [describe] to distinguish an unsupported built-in name. "],"declarations":[{"kind":"function","text":"val lookup : t -> string -> entry option","source":{"file":"lib/libtmux.mli","line":868,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options","doc":{"summary":"`None` means absent from this capture's selected scope and inheritance policy. Use `describe` to distinguish an unsupported built-in name."},"signatures":[{"raw":"val lookup : t -> string -> entry option","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"entry option"}],"slug":"libtmux-options-lookup"},{"id":"Libtmux.Options.scalar","publicId":"Libtmux.Options.scalar","qualifiedName":"Libtmux.Options.scalar","name":"scalar","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":842,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type scalar =\n | Text of string\n | Integer of int64\n | Bool of bool\n | Choice of string\n | Key of string\n | Colour of string\n | Commands of string","source":{"file":"lib/libtmux.mli","line":842,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"type scalar =\n | Text of string \n | Integer of int64 \n | Bool of bool \n | Choice of string \n | Key of string \n | Colour of string \n | Commands of string ","params":[]}],"slug":"libtmux-options-scalar"},{"id":"Libtmux.Options.scalar.Bool","publicId":"Libtmux.Options.scalar.Bool","name":"Bool","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":845,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Bool of bool","source":{"file":"lib/libtmux.mli","line":845,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Bool","slug":"libtmux-options-scalar-bool"},{"id":"Libtmux.Options.scalar.Choice","publicId":"Libtmux.Options.scalar.Choice","name":"Choice","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":846,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Choice of string","source":{"file":"lib/libtmux.mli","line":846,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Choice","slug":"libtmux-options-scalar-choice"},{"id":"Libtmux.Options.scalar.Colour","publicId":"Libtmux.Options.scalar.Colour","name":"Colour","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":848,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Colour of string","source":{"file":"lib/libtmux.mli","line":848,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Colour","slug":"libtmux-options-scalar-colour"},{"id":"Libtmux.Options.scalar.Commands","publicId":"Libtmux.Options.scalar.Commands","name":"Commands","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":849,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Commands of string","source":{"file":"lib/libtmux.mli","line":849,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Commands","slug":"libtmux-options-scalar-commands"},{"id":"Libtmux.Options.scalar.Integer","publicId":"Libtmux.Options.scalar.Integer","name":"Integer","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":844,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Integer of int64","source":{"file":"lib/libtmux.mli","line":844,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Integer","slug":"libtmux-options-scalar-integer"},{"id":"Libtmux.Options.scalar.Key","publicId":"Libtmux.Options.scalar.Key","name":"Key","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":847,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Key of string","source":{"file":"lib/libtmux.mli","line":847,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Key","slug":"libtmux-options-scalar-key"},{"id":"Libtmux.Options.scalar.Text","publicId":"Libtmux.Options.scalar.Text","name":"Text","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":843,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Text of string","source":{"file":"lib/libtmux.mli","line":843,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scalar","variant":"tuple","qualifiedName":"Libtmux.Options.Text","slug":"libtmux-options-scalar-text"},{"id":"Libtmux.Options.scope","publicId":"Libtmux.Options.scope","qualifiedName":"Libtmux.Options.scope","name":"scope","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":834,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type scope =\n | Server\n | Global_sessions\n | Global_windows\n | Session of Session.target\n | Window of Window.target\n | Pane of Pane.target","source":{"file":"lib/libtmux.mli","line":834,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"type scope =\n | Server \n | Global_sessions \n | Global_windows \n | Session of Session.target \n | Window of Window.target \n | Pane of Pane.target ","params":[]}],"slug":"libtmux-options-scope"},{"id":"Libtmux.Options.scope.Global_sessions","publicId":"Libtmux.Options.scope.Global_sessions","name":"Global_sessions","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":836,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Global_sessions","source":{"file":"lib/libtmux.mli","line":836,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scope","variant":"unit","qualifiedName":"Libtmux.Options.Global_sessions","slug":"libtmux-options-scope-global_sessions"},{"id":"Libtmux.Options.scope.Global_windows","publicId":"Libtmux.Options.scope.Global_windows","name":"Global_windows","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":837,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Global_windows","source":{"file":"lib/libtmux.mli","line":837,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scope","variant":"unit","qualifiedName":"Libtmux.Options.Global_windows","slug":"libtmux-options-scope-global_windows"},{"id":"Libtmux.Options.scope.Pane","publicId":"Libtmux.Options.scope.Pane","name":"Pane","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":840,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Pane of Pane.target","source":{"file":"lib/libtmux.mli","line":840,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scope","variant":"tuple","qualifiedName":"Libtmux.Options.Pane","slug":"libtmux-options-scope-pane"},{"id":"Libtmux.Options.scope.Server","publicId":"Libtmux.Options.scope.Server","name":"Server","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":835,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Server","source":{"file":"lib/libtmux.mli","line":835,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scope","variant":"unit","qualifiedName":"Libtmux.Options.Server","slug":"libtmux-options-scope-server"},{"id":"Libtmux.Options.scope.Session","publicId":"Libtmux.Options.scope.Session","name":"Session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":838,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Session of Session.target","source":{"file":"lib/libtmux.mli","line":838,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scope","variant":"tuple","qualifiedName":"Libtmux.Options.Session","slug":"libtmux-options-scope-session"},{"id":"Libtmux.Options.scope.Window","publicId":"Libtmux.Options.scope.Window","name":"Window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":839,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window of Window.target","source":{"file":"lib/libtmux.mli","line":839,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.scope","variant":"tuple","qualifiedName":"Libtmux.Options.Window","slug":"libtmux-options-scope-window"},{"id":"Libtmux.Options.t","publicId":"Libtmux.Options.t","qualifiedName":"Libtmux.Options.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":854,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Captured options in tmux order, with original array indexes. An empty\n array differs from an absent local entry. No accessor performs I/O. "],"declarations":[{"kind":"struct","text":"type t = {\n source : Source.t;\n scope : scope;\n include_inherited : bool;\n entries : entry Iarray.t;\n started_at_ns : int64;\n finished_at_ns : int64;\n }","source":{"file":"lib/libtmux.mli","line":854,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options","doc":{"summary":"Captured options in tmux order, with original array indexes. An empty array differs from an absent local entry. No accessor performs I/O."},"signatures":[{"raw":"type t =\n {\n source: Source.t ;\n scope: scope ;\n include_inherited: bool ;\n entries: entry Iarray.t ;\n started_at_ns: int64 ;\n finished_at_ns: int64 }","params":[]}],"slug":"libtmux-options-t"},{"id":"Libtmux.Options.t.entries","publicId":"Libtmux.Options.t.entries","name":"entries","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":858,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"entries : entry Iarray.t;","source":{"file":"lib/libtmux.mli","line":858,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.t","type":"entry Iarray.t","qualifiedName":"Libtmux.Options.entries","slug":"libtmux-options-t-entries"},{"id":"Libtmux.Options.t.finished_at_ns","publicId":"Libtmux.Options.t.finished_at_ns","name":"finished_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":860,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"finished_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":860,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.t","type":"int64","qualifiedName":"Libtmux.Options.finished_at_ns","slug":"libtmux-options-t-finished_at_ns"},{"id":"Libtmux.Options.t.include_inherited","publicId":"Libtmux.Options.t.include_inherited","name":"include_inherited","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":857,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"include_inherited : bool;","source":{"file":"lib/libtmux.mli","line":857,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.t","type":"bool","qualifiedName":"Libtmux.Options.include_inherited","slug":"libtmux-options-t-include_inherited"},{"id":"Libtmux.Options.t.scope","publicId":"Libtmux.Options.t.scope","name":"scope","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":856,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"scope : scope;","source":{"file":"lib/libtmux.mli","line":856,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.t","type":"scope","qualifiedName":"Libtmux.Options.scope","slug":"libtmux-options-t-scope"},{"id":"Libtmux.Options.t.source","publicId":"Libtmux.Options.t.source","name":"source","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":855,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"source : Source.t;","source":{"file":"lib/libtmux.mli","line":855,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.t","type":"Source.t","qualifiedName":"Libtmux.Options.source","slug":"libtmux-options-t-source"},{"id":"Libtmux.Options.t.started_at_ns","publicId":"Libtmux.Options.t.started_at_ns","name":"started_at_ns","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":859,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"started_at_ns : int64;","source":{"file":"lib/libtmux.mli","line":859,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.t","type":"int64","qualifiedName":"Libtmux.Options.started_at_ns","slug":"libtmux-options-t-started_at_ns"},{"id":"Libtmux.Options.value","publicId":"Libtmux.Options.value","qualifiedName":"Libtmux.Options.value","name":"value","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":851,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type value = Scalar of scalar | Array of (int * scalar) Iarray.t","source":{"file":"lib/libtmux.mli","line":851,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options","signatures":[{"raw":"type value =\n | Scalar of scalar \n | Array of (int * scalar) Iarray.t ","params":[]}],"slug":"libtmux-options-value"},{"id":"Libtmux.Options.value.Array","publicId":"Libtmux.Options.value.Array","name":"Array","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":851,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Array of (int * scalar) Iarray.t","source":{"file":"lib/libtmux.mli","line":851,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.value","variant":"tuple","qualifiedName":"Libtmux.Options.Array","slug":"libtmux-options-value-array"},{"id":"Libtmux.Options.value.Scalar","publicId":"Libtmux.Options.value.Scalar","name":"Scalar","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":851,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Scalar of scalar","source":{"file":"lib/libtmux.mli","line":851,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Options.value","variant":"tuple","qualifiedName":"Libtmux.Options.Scalar","slug":"libtmux-options-value-scalar"},{"id":"Libtmux.Output","publicId":"Libtmux.Output","qualifiedName":"Libtmux.Output","name":"Output","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1034,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Future observed pane bytes, local cursors and explicit continuity loss.\n Output cursors are unrelated to snapshot times or server-side history. "],"declarations":[{"kind":"module","text":"module Output : sig\n type cursor = { generation : Generation.t; offset : int64 }\n (** [offset] is the number of observed bytes through the end of a Data event.\n Cursors from different subscription generations are unrelated. No cursor\n identifies a snapshot instant or a server-side historical position. *)\n\n type reason =\n | Overflow\n | Membership_changed\n | Server_paused\n | Cancelled\n | Client_closed\n | Transport_error of Error.t\n\n type event =\n | Data of { cursor : cursor; bytes : string }\n | Gap of { after : cursor option; lost_bytes : int option; reason : reason }\n | End of reason\n (** Immutable event values. [Gap.after] is the last cursor delivered to\n the caller. Unknown loss is [None]. A gap ends continuity and is\n followed by End; recover with a fresh capture and a new\n subscription. Data preserves bytes, including NUL and invalid UTF-8.\n It is future observed output, not rendered text or historical\n reconstruction. *)\n\n val reason_pp : Format.formatter -> reason -> unit\n\n type wait_error =\n | Ended of reason\n | Failure of Error.t\n (** A future-byte wait either loses its subscription's continuity or\n fails an operation. Neither result establishes that the text was\n absent earlier. *)\nend","source":{"file":"lib/libtmux.mli","line":1034,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Future observed pane bytes, local cursors and explicit continuity loss. Output cursors are unrelated to snapshot times or server-side history."},"slug":"libtmux-output"},{"id":"Libtmux.Output.cursor","publicId":"Libtmux.Output.cursor","qualifiedName":"Libtmux.Output.cursor","name":"cursor","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1035,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" [offset] is the number of observed bytes through the end of a Data event.\n Cursors from different subscription generations are unrelated. No cursor\n identifies a snapshot instant or a server-side historical position. "],"declarations":[{"kind":"struct","text":"type cursor = { generation : Generation.t; offset : int64 }","source":{"file":"lib/libtmux.mli","line":1035,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output","doc":{"summary":"`offset` is the number of observed bytes through the end of a Data event. Cursors from different subscription generations are unrelated. No cursor identifies a snapshot instant or a server-side historical position."},"signatures":[{"raw":"type cursor = {\n generation: Generation.t ;\n offset: int64 }","params":[]}],"slug":"libtmux-output-cursor"},{"id":"Libtmux.Output.cursor.generation","publicId":"Libtmux.Output.cursor.generation","name":"generation","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1035,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"generation : Generation.t;","source":{"file":"lib/libtmux.mli","line":1035,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.cursor","type":"Generation.t","qualifiedName":"Libtmux.Output.generation","slug":"libtmux-output-cursor-generation"},{"id":"Libtmux.Output.cursor.offset","publicId":"Libtmux.Output.cursor.offset","name":"offset","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1035,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"offset : int64","source":{"file":"lib/libtmux.mli","line":1035,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.cursor","type":"int64","qualifiedName":"Libtmux.Output.offset","slug":"libtmux-output-cursor-offset"},{"id":"Libtmux.Output.event","publicId":"Libtmux.Output.event","qualifiedName":"Libtmux.Output.event","name":"event","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1048,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type event =\n | Data of { cursor : cursor; bytes : string }\n | Gap of { after : cursor option; lost_bytes : int option; reason : reason }\n | End of reason","source":{"file":"lib/libtmux.mli","line":1048,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output","signatures":[{"raw":"type event =\n | Data of {\n cursor: cursor ;\n bytes: string } \n | Gap of {\n after: cursor option ;\n lost_bytes: int option ;\n reason: reason } \n | End of reason ","params":[]}],"slug":"libtmux-output-event"},{"id":"Libtmux.Output.event.Data","publicId":"Libtmux.Output.event.Data","name":"Data","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1049,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Data of { cursor : cursor; bytes : string }","source":{"file":"lib/libtmux.mli","line":1049,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.event","variant":"struct","qualifiedName":"Libtmux.Output.Data","slug":"libtmux-output-event-data"},{"id":"Libtmux.Output.event.Data.bytes","publicId":"Libtmux.Output.event.Data.bytes","name":"bytes","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1049,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"bytes : string","source":{"file":"lib/libtmux.mli","line":1049,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.event.Data","type":"string","qualifiedName":"Libtmux.Output.bytes","slug":"libtmux-output-event-data-bytes"},{"id":"Libtmux.Output.event.Data.cursor","publicId":"Libtmux.Output.event.Data.cursor","name":"cursor","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1049,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cursor : cursor;","source":{"file":"lib/libtmux.mli","line":1049,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.event.Data","type":"cursor","qualifiedName":"Libtmux.Output.cursor","slug":"libtmux-output-event-data-cursor"},{"id":"Libtmux.Output.event.End","publicId":"Libtmux.Output.event.End","name":"End","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1051,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Immutable event values. [Gap.after] is the last cursor delivered to\n the caller. Unknown loss is [None]. A gap ends continuity and is\n followed by End; recover with a fresh capture and a new\n subscription. Data preserves bytes, including NUL and invalid UTF-8.\n It is future observed output, not rendered text or historical\n reconstruction. "],"declarations":[{"kind":"constant","text":"| End of reason","source":{"file":"lib/libtmux.mli","line":1051,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.event","doc":{"summary":"Immutable event values. `Gap.after` is the last cursor delivered to the caller. Unknown loss is `None`. A gap ends continuity and is followed by End; recover with a fresh capture and a new subscription. Data preserves bytes, including NUL and invalid UTF-8. It is future observed output, not rendered text or historical reconstruction."},"variant":"tuple","qualifiedName":"Libtmux.Output.End","slug":"libtmux-output-event-end"},{"id":"Libtmux.Output.event.Gap","publicId":"Libtmux.Output.event.Gap","name":"Gap","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1050,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Gap of { after : cursor option; lost_bytes : int option; reason : reason }","source":{"file":"lib/libtmux.mli","line":1050,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.event","variant":"struct","qualifiedName":"Libtmux.Output.Gap","slug":"libtmux-output-event-gap"},{"id":"Libtmux.Output.event.Gap.after","publicId":"Libtmux.Output.event.Gap.after","name":"after","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1050,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"after : cursor option;","source":{"file":"lib/libtmux.mli","line":1050,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.event.Gap","type":"cursor option","qualifiedName":"Libtmux.Output.after","slug":"libtmux-output-event-gap-after"},{"id":"Libtmux.Output.event.Gap.lost_bytes","publicId":"Libtmux.Output.event.Gap.lost_bytes","name":"lost_bytes","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1050,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"lost_bytes : int option;","source":{"file":"lib/libtmux.mli","line":1050,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.event.Gap","type":"int option","qualifiedName":"Libtmux.Output.lost_bytes","slug":"libtmux-output-event-gap-lost_bytes"},{"id":"Libtmux.Output.event.Gap.reason","publicId":"Libtmux.Output.event.Gap.reason","name":"reason","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1050,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"reason : reason","source":{"file":"lib/libtmux.mli","line":1050,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.event.Gap","type":"reason","qualifiedName":"Libtmux.Output.reason","slug":"libtmux-output-event-gap-reason"},{"id":"Libtmux.Output.reason","publicId":"Libtmux.Output.reason","qualifiedName":"Libtmux.Output.reason","name":"reason","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1040,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type reason =\n | Overflow\n | Membership_changed\n | Server_paused\n | Cancelled\n | Client_closed\n | Transport_error of Error.t","source":{"file":"lib/libtmux.mli","line":1040,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output","signatures":[{"raw":"type reason =\n | Overflow \n | Membership_changed \n | Server_paused \n | Cancelled \n | Client_closed \n | Transport_error of Error.t ","params":[]}],"slug":"libtmux-output-reason"},{"id":"Libtmux.Output.reason.Cancelled","publicId":"Libtmux.Output.reason.Cancelled","name":"Cancelled","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1044,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Cancelled","source":{"file":"lib/libtmux.mli","line":1044,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.reason","variant":"unit","qualifiedName":"Libtmux.Output.Cancelled","slug":"libtmux-output-reason-cancelled"},{"id":"Libtmux.Output.reason.Client_closed","publicId":"Libtmux.Output.reason.Client_closed","name":"Client_closed","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1045,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Client_closed","source":{"file":"lib/libtmux.mli","line":1045,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.reason","variant":"unit","qualifiedName":"Libtmux.Output.Client_closed","slug":"libtmux-output-reason-client_closed"},{"id":"Libtmux.Output.reason.Membership_changed","publicId":"Libtmux.Output.reason.Membership_changed","name":"Membership_changed","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1042,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Membership_changed","source":{"file":"lib/libtmux.mli","line":1042,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.reason","variant":"unit","qualifiedName":"Libtmux.Output.Membership_changed","slug":"libtmux-output-reason-membership_changed"},{"id":"Libtmux.Output.reason.Overflow","publicId":"Libtmux.Output.reason.Overflow","name":"Overflow","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1041,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Overflow","source":{"file":"lib/libtmux.mli","line":1041,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.reason","variant":"unit","qualifiedName":"Libtmux.Output.Overflow","slug":"libtmux-output-reason-overflow"},{"id":"Libtmux.Output.reason.Server_paused","publicId":"Libtmux.Output.reason.Server_paused","name":"Server_paused","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1043,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Server_paused","source":{"file":"lib/libtmux.mli","line":1043,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.reason","variant":"unit","qualifiedName":"Libtmux.Output.Server_paused","slug":"libtmux-output-reason-server_paused"},{"id":"Libtmux.Output.reason.Transport_error","publicId":"Libtmux.Output.reason.Transport_error","name":"Transport_error","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1046,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Transport_error of Error.t","source":{"file":"lib/libtmux.mli","line":1046,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.reason","variant":"tuple","qualifiedName":"Libtmux.Output.Transport_error","slug":"libtmux-output-reason-transport_error"},{"id":"Libtmux.Output.reason_pp","publicId":"Libtmux.Output.reason_pp","qualifiedName":"Libtmux.Output.reason_pp","name":"reason_pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1059,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val reason_pp : Format.formatter -> reason -> unit","source":{"file":"lib/libtmux.mli","line":1059,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output","signatures":[{"raw":"val reason_pp : Format.formatter -> reason -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"reason"}],"returns":"unit"}],"slug":"libtmux-output-reason_pp"},{"id":"Libtmux.Output.wait_error","publicId":"Libtmux.Output.wait_error","qualifiedName":"Libtmux.Output.wait_error","name":"wait_error","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1061,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type wait_error =\n | Ended of reason\n | Failure of Error.t","source":{"file":"lib/libtmux.mli","line":1061,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output","signatures":[{"raw":"type wait_error =\n | Ended of reason \n | Failure of Error.t ","params":[]}],"slug":"libtmux-output-wait_error"},{"id":"Libtmux.Output.wait_error.Ended","publicId":"Libtmux.Output.wait_error.Ended","name":"Ended","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1062,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Ended of reason","source":{"file":"lib/libtmux.mli","line":1062,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.wait_error","variant":"tuple","qualifiedName":"Libtmux.Output.Ended","slug":"libtmux-output-wait_error-ended"},{"id":"Libtmux.Output.wait_error.Failure","publicId":"Libtmux.Output.wait_error.Failure","name":"Failure","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":1063,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" A future-byte wait either loses its subscription's continuity or\n fails an operation. Neither result establishes that the text was\n absent earlier. "],"declarations":[{"kind":"constant","text":"| Failure of Error.t","source":{"file":"lib/libtmux.mli","line":1063,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Output.wait_error","doc":{"summary":"A future-byte wait either loses its subscription's continuity or fails an operation. Neither result establishes that the text was absent earlier."},"variant":"tuple","qualifiedName":"Libtmux.Output.Failure","slug":"libtmux-output-wait_error-failure"},{"id":"Libtmux.Pane","publicId":"Libtmux.Pane","qualifiedName":"Libtmux.Pane","name":"Pane","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":306,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" A captured pane with local geometry, process metadata and a window\n relationship. Use {!Pane.val-target} for explicit actions; reading the\n observation never refreshes it. "],"declarations":[{"kind":"module","text":"and Pane : sig\n type t\n\n module Fields : sig\n val id : (t, string) Field.t\n val index : (t, int) Field.t\n val active : (t, bool) Field.t\n val dead : (t, bool) Field.t\n val title : (t, string) Field.t\n val current_command : (t, string) Field.t\n val current_path : (t, string) Field.t\n val width : (t, int) Field.t\n val height : (t, int) Field.t\n val left : (t, int) Field.t\n val top : (t, int) Field.t\n end\n\n module Relations : sig\n val window : (t, Window.t) Relation.One.t\n end\n\n module Id : ID\n\n module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n val source : t -> Source.t\n val id : t -> Id.t\n end\n\n type target = Target.t\n\n val id : t -> Id.t\n val index : t -> int\n val active : t -> bool\n val dead : t -> bool\n val title : t -> string\n val current_command : t -> string\n val current_path : t -> string\n\n val pid : t -> int option\n (** The captured process ID, absent when tmux reports no process. *)\n\n val width : t -> int\n val height : t -> int\n val left : t -> int\n val top : t -> int\n val window : t -> Window.t\n val source : t -> Source.t\n val target : t -> target\n\n val same_entity : t -> t -> bool\n (** Compare IDs within the same bound {!Source.t} generation. *)\n\n val same_observation : t -> t -> bool\n (** Compare entity identity and snapshot identity. *)\nend","source":{"file":"lib/libtmux.mli","line":306,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"A captured pane with local geometry, process metadata and a window relationship. Use {!Pane.val-target} for explicit actions; reading the observation never refreshes it."},"slug":"libtmux-pane"},{"id":"Libtmux.Pane.Fields","publicId":"Libtmux.Pane.Fields","qualifiedName":"Libtmux.Pane.Fields","name":"Fields","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":309,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Fields : sig\n val id : (t, string) Field.t\n val index : (t, int) Field.t\n val active : (t, bool) Field.t\n val dead : (t, bool) Field.t\n val title : (t, string) Field.t\n val current_command : (t, string) Field.t\n val current_path : (t, string) Field.t\n val width : (t, int) Field.t\n val height : (t, int) Field.t\n val left : (t, int) Field.t\n val top : (t, int) Field.t\n end","source":{"file":"lib/libtmux.mli","line":309,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","slug":"libtmux-pane-fields"},{"id":"Libtmux.Pane.Fields.active","publicId":"Libtmux.Pane.Fields.active","qualifiedName":"Libtmux.Pane.Fields.active","name":"active","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":312,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val active : (t, bool) Field.t","source":{"file":"lib/libtmux.mli","line":312,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val active : (t, bool) Field.t","params":[],"returns":"(t, bool) Field.t"}],"slug":"libtmux-pane-fields-active"},{"id":"Libtmux.Pane.Fields.current_command","publicId":"Libtmux.Pane.Fields.current_command","qualifiedName":"Libtmux.Pane.Fields.current_command","name":"current_command","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":315,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val current_command : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":315,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val current_command : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-pane-fields-current_command"},{"id":"Libtmux.Pane.Fields.current_path","publicId":"Libtmux.Pane.Fields.current_path","qualifiedName":"Libtmux.Pane.Fields.current_path","name":"current_path","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":316,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val current_path : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":316,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val current_path : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-pane-fields-current_path"},{"id":"Libtmux.Pane.Fields.dead","publicId":"Libtmux.Pane.Fields.dead","qualifiedName":"Libtmux.Pane.Fields.dead","name":"dead","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":313,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val dead : (t, bool) Field.t","source":{"file":"lib/libtmux.mli","line":313,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val dead : (t, bool) Field.t","params":[],"returns":"(t, bool) Field.t"}],"slug":"libtmux-pane-fields-dead"},{"id":"Libtmux.Pane.Fields.height","publicId":"Libtmux.Pane.Fields.height","qualifiedName":"Libtmux.Pane.Fields.height","name":"height","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":318,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val height : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":318,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val height : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-pane-fields-height"},{"id":"Libtmux.Pane.Fields.id","publicId":"Libtmux.Pane.Fields.id","qualifiedName":"Libtmux.Pane.Fields.id","name":"id","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":310,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val id : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":310,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val id : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-pane-fields-id"},{"id":"Libtmux.Pane.Fields.index","publicId":"Libtmux.Pane.Fields.index","qualifiedName":"Libtmux.Pane.Fields.index","name":"index","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":311,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val index : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":311,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val index : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-pane-fields-index"},{"id":"Libtmux.Pane.Fields.left","publicId":"Libtmux.Pane.Fields.left","qualifiedName":"Libtmux.Pane.Fields.left","name":"left","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":319,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val left : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":319,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val left : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-pane-fields-left"},{"id":"Libtmux.Pane.Fields.title","publicId":"Libtmux.Pane.Fields.title","qualifiedName":"Libtmux.Pane.Fields.title","name":"title","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":314,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val title : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":314,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val title : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-pane-fields-title"},{"id":"Libtmux.Pane.Fields.top","publicId":"Libtmux.Pane.Fields.top","qualifiedName":"Libtmux.Pane.Fields.top","name":"top","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":320,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val top : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":320,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val top : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-pane-fields-top"},{"id":"Libtmux.Pane.Fields.width","publicId":"Libtmux.Pane.Fields.width","qualifiedName":"Libtmux.Pane.Fields.width","name":"width","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":317,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val width : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":317,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Fields","signatures":[{"raw":"val width : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-pane-fields-width"},{"id":"Libtmux.Pane.Id","publicId":"Libtmux.Pane.Id","qualifiedName":"Libtmux.Pane.Id","name":"Id","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":327,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Id : ID","source":{"file":"lib/libtmux.mli","line":327,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","slug":"libtmux-pane-id-16to"},{"id":"Libtmux.Pane.Id.compare","publicId":"Libtmux.Pane.Id.compare","qualifiedName":"Libtmux.Pane.Id.compare","name":"compare","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":136,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val compare : t -> t -> int","source":{"file":"lib/libtmux.mli","line":136,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Id","signatures":[{"raw":"val compare : t -> t -> int","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-id-compare"},{"id":"Libtmux.Pane.Id.equal","publicId":"Libtmux.Pane.Id.equal","qualifiedName":"Libtmux.Pane.Id.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Id","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-pane-id-equal"},{"id":"Libtmux.Pane.Id.of_string","publicId":"Libtmux.Pane.Id.of_string","qualifiedName":"Libtmux.Pane.Id.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Accept a canonical prefixed decimal tmux ID in the uint32 range. "],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Id","doc":{"summary":"Accept a canonical prefixed decimal tmux ID in the uint32 range."},"signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-pane-id-of_string"},{"id":"Libtmux.Pane.Id.pp","publicId":"Libtmux.Pane.Id.pp","qualifiedName":"Libtmux.Pane.Id.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":137,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":137,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Id","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-pane-id-pp"},{"id":"Libtmux.Pane.Id.t","publicId":"Libtmux.Pane.Id.t","qualifiedName":"Libtmux.Pane.Id.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Id","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-pane-id-t"},{"id":"Libtmux.Pane.Id.to_string","publicId":"Libtmux.Pane.Id.to_string","qualifiedName":"Libtmux.Pane.Id.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":134,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":134,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Id","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-pane-id-to_string"},{"id":"Libtmux.Pane.Relations","publicId":"Libtmux.Pane.Relations","qualifiedName":"Libtmux.Pane.Relations","name":"Relations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":323,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Relations : sig\n val window : (t, Window.t) Relation.One.t\n end","source":{"file":"lib/libtmux.mli","line":323,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","slug":"libtmux-pane-relations"},{"id":"Libtmux.Pane.Relations.window","publicId":"Libtmux.Pane.Relations.window","qualifiedName":"Libtmux.Pane.Relations.window","name":"window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":324,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val window : (t, Window.t) Relation.One.t","source":{"file":"lib/libtmux.mli","line":324,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Relations","signatures":[{"raw":"val window : (t, Window.t) Relation.One.t","params":[],"returns":"(t, Window.t) Relation.One.t"}],"slug":"libtmux-pane-relations-window"},{"id":"Libtmux.Pane.Target","publicId":"Libtmux.Pane.Target","qualifiedName":"Libtmux.Pane.Target","name":"Target","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":329,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n val source : t -> Source.t\n val id : t -> Id.t\n end","source":{"file":"lib/libtmux.mli","line":329,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","slug":"libtmux-pane-target-nx8w"},{"id":"Libtmux.Pane.Target.id","publicId":"Libtmux.Pane.Target.id","qualifiedName":"Libtmux.Pane.Target.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":334,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":334,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Target","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-pane-target-id"},{"id":"Libtmux.Pane.Target.of_id","publicId":"Libtmux.Pane.Target.of_id","qualifiedName":"Libtmux.Pane.Target.of_id","name":"of_id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":332,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val of_id : source:Source.t -> Id.t -> t","source":{"file":"lib/libtmux.mli","line":332,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Target","signatures":[{"raw":"val of_id : source:Source.t -> Id.t -> t","params":[{"name":"source","type":"Source.t","keywordOnly":true},{"name":"arg1","type":"Id.t"}],"returns":"t"}],"slug":"libtmux-pane-target-of_id"},{"id":"Libtmux.Pane.Target.source","publicId":"Libtmux.Pane.Target.source","qualifiedName":"Libtmux.Pane.Target.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":333,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":333,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Target","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-pane-target-source"},{"id":"Libtmux.Pane.Target.t","publicId":"Libtmux.Pane.Target.t","qualifiedName":"Libtmux.Pane.Target.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":330,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":330,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane.Target","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-pane-target-t"},{"id":"Libtmux.Pane.active","publicId":"Libtmux.Pane.active","qualifiedName":"Libtmux.Pane.active","name":"active","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":341,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val active : t -> bool","source":{"file":"lib/libtmux.mli","line":341,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val active : t -> bool","params":[{"name":"arg1","type":"t"}],"returns":"bool"}],"slug":"libtmux-pane-active"},{"id":"Libtmux.Pane.current_command","publicId":"Libtmux.Pane.current_command","qualifiedName":"Libtmux.Pane.current_command","name":"current_command","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":344,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val current_command : t -> string","source":{"file":"lib/libtmux.mli","line":344,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val current_command : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-pane-current_command"},{"id":"Libtmux.Pane.current_path","publicId":"Libtmux.Pane.current_path","qualifiedName":"Libtmux.Pane.current_path","name":"current_path","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":345,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val current_path : t -> string","source":{"file":"lib/libtmux.mli","line":345,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val current_path : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-pane-current_path"},{"id":"Libtmux.Pane.dead","publicId":"Libtmux.Pane.dead","qualifiedName":"Libtmux.Pane.dead","name":"dead","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":342,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val dead : t -> bool","source":{"file":"lib/libtmux.mli","line":342,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val dead : t -> bool","params":[{"name":"arg1","type":"t"}],"returns":"bool"}],"slug":"libtmux-pane-dead"},{"id":"Libtmux.Pane.height","publicId":"Libtmux.Pane.height","qualifiedName":"Libtmux.Pane.height","name":"height","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":351,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val height : t -> int","source":{"file":"lib/libtmux.mli","line":351,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val height : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-height"},{"id":"Libtmux.Pane.id","publicId":"Libtmux.Pane.id","qualifiedName":"Libtmux.Pane.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":339,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":339,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-pane-id-19ve"},{"id":"Libtmux.Pane.index","publicId":"Libtmux.Pane.index","qualifiedName":"Libtmux.Pane.index","name":"index","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":340,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val index : t -> int","source":{"file":"lib/libtmux.mli","line":340,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val index : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-index"},{"id":"Libtmux.Pane.left","publicId":"Libtmux.Pane.left","qualifiedName":"Libtmux.Pane.left","name":"left","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":352,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val left : t -> int","source":{"file":"lib/libtmux.mli","line":352,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val left : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-left"},{"id":"Libtmux.Pane.pid","publicId":"Libtmux.Pane.pid","qualifiedName":"Libtmux.Pane.pid","name":"pid","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":347,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" The captured process ID, absent when tmux reports no process. "],"declarations":[{"kind":"function","text":"val pid : t -> int option","source":{"file":"lib/libtmux.mli","line":347,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","doc":{"summary":"The captured process ID, absent when tmux reports no process."},"signatures":[{"raw":"val pid : t -> int option","params":[{"name":"arg1","type":"t"}],"returns":"int option"}],"slug":"libtmux-pane-pid"},{"id":"Libtmux.Pane.same_entity","publicId":"Libtmux.Pane.same_entity","qualifiedName":"Libtmux.Pane.same_entity","name":"same_entity","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":358,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Compare IDs within the same bound {!Source.t} generation. "],"declarations":[{"kind":"function","text":"val same_entity : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":358,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","doc":{"summary":"Compare IDs within the same bound {!Source.t} generation."},"signatures":[{"raw":"val same_entity : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-pane-same_entity"},{"id":"Libtmux.Pane.same_observation","publicId":"Libtmux.Pane.same_observation","qualifiedName":"Libtmux.Pane.same_observation","name":"same_observation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":361,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Compare entity identity and snapshot identity. "],"declarations":[{"kind":"function","text":"val same_observation : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":361,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","doc":{"summary":"Compare entity identity and snapshot identity."},"signatures":[{"raw":"val same_observation : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-pane-same_observation"},{"id":"Libtmux.Pane.source","publicId":"Libtmux.Pane.source","qualifiedName":"Libtmux.Pane.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":355,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":355,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-pane-source"},{"id":"Libtmux.Pane.t","publicId":"Libtmux.Pane.t","qualifiedName":"Libtmux.Pane.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":307,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":307,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-pane-t"},{"id":"Libtmux.Pane.target","publicId":"Libtmux.Pane.target","qualifiedName":"Libtmux.Pane.target","name":"target","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":356,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val target : t -> target","source":{"file":"lib/libtmux.mli","line":356,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val target : t -> target","params":[{"name":"arg1","type":"t"}],"returns":"target"}],"slug":"libtmux-pane-target-t3h1"},{"id":"Libtmux.Pane.target:type","publicId":"Libtmux.Pane.target:type","qualifiedName":"Libtmux.Pane.target","name":"target","kind":"typealias","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":337,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type target = Target.t","source":{"file":"lib/libtmux.mli","line":337,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","type":"Target.t","signatures":[{"raw":"type target = Target.t","params":[]}],"slug":"libtmux-pane-target-type"},{"id":"Libtmux.Pane.title","publicId":"Libtmux.Pane.title","qualifiedName":"Libtmux.Pane.title","name":"title","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":343,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val title : t -> string","source":{"file":"lib/libtmux.mli","line":343,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val title : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-pane-title"},{"id":"Libtmux.Pane.top","publicId":"Libtmux.Pane.top","qualifiedName":"Libtmux.Pane.top","name":"top","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":353,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val top : t -> int","source":{"file":"lib/libtmux.mli","line":353,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val top : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-top"},{"id":"Libtmux.Pane.width","publicId":"Libtmux.Pane.width","qualifiedName":"Libtmux.Pane.width","name":"width","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":350,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val width : t -> int","source":{"file":"lib/libtmux.mli","line":350,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val width : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-pane-width"},{"id":"Libtmux.Pane.window","publicId":"Libtmux.Pane.window","qualifiedName":"Libtmux.Pane.window","name":"window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":354,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val window : t -> Window.t","source":{"file":"lib/libtmux.mli","line":354,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Pane","signatures":[{"raw":"val window : t -> Window.t","params":[{"name":"arg1","type":"t"}],"returns":"Window.t"}],"slug":"libtmux-pane-window"},{"id":"Libtmux.Plan","publicId":"Libtmux.Plan","qualifiedName":"Libtmux.Plan","name":"Plan","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":666,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Explicit source-filter planning for a new acquisition. A plan separates\n supported tmux predicates from residual local evaluation; it never changes\n the I/O-free contract of {!Query.matching}. Backend capture operations\n acquire a complete graph and do not consume these plans. "],"declarations":[{"kind":"module","text":"module Plan : sig\n type pushdown = Auto | Never | Require_exact\n type t\n\n val panes : ?pushdown:pushdown -> Pane.t Expr.t -> (t, Error.t) result\n (** Plan without I/O. Exact lowering covers pane active/dead flags and\n complete Boolean combinations. Unsupported children prevent lowering the\n whole expression, including under OR and NOT. Relationships always stay\n local. [Require_exact] rejects an unsupported expression before\n acquisition. *)\n\n val source_filter : t -> string option\n val residual : t -> Pane.t Expr.t\n val required_fields : t -> string list\n val required_relations : t -> string list\n val explanation : t -> string\n val pp : Format.formatter -> t -> unit\nend","source":{"file":"lib/libtmux.mli","line":666,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Explicit source-filter planning for a new acquisition. A plan separates supported tmux predicates from residual local evaluation; it never changes the I/O-free contract of {!Query.matching}. Backend capture operations acquire a complete graph and do not consume these plans."},"slug":"libtmux-plan"},{"id":"Libtmux.Plan.explanation","publicId":"Libtmux.Plan.explanation","qualifiedName":"Libtmux.Plan.explanation","name":"explanation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":681,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val explanation : t -> string","source":{"file":"lib/libtmux.mli","line":681,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val explanation : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-plan-explanation"},{"id":"Libtmux.Plan.panes","publicId":"Libtmux.Plan.panes","qualifiedName":"Libtmux.Plan.panes","name":"panes","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":670,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Plan without I/O. Exact lowering covers pane active/dead flags and\n complete Boolean combinations. Unsupported children prevent lowering the\n whole expression, including under OR and NOT. Relationships always stay\n local. [Require_exact] rejects an unsupported expression before\n acquisition. "],"declarations":[{"kind":"function","text":"val panes : ?pushdown:pushdown -> Pane.t Expr.t -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":670,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan","doc":{"summary":"Plan without I/O. Exact lowering covers pane active/dead flags and complete Boolean combinations. Unsupported children prevent lowering the whole expression, including under OR and NOT. Relationships always stay local. `Require_exact` rejects an unsupported expression before acquisition."},"signatures":[{"raw":"val panes : ?pushdown:pushdown -> Pane.t Expr.t -> (t, Error.t) result","params":[{"name":"pushdown","type":"pushdown","optional":true,"keywordOnly":true},{"name":"arg1","type":"Pane.t Expr.t"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-plan-panes"},{"id":"Libtmux.Plan.pp","publicId":"Libtmux.Plan.pp","qualifiedName":"Libtmux.Plan.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":682,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":682,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-plan-pp"},{"id":"Libtmux.Plan.pushdown","publicId":"Libtmux.Plan.pushdown","qualifiedName":"Libtmux.Plan.pushdown","name":"pushdown","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":667,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type pushdown = Auto | Never | Require_exact","source":{"file":"lib/libtmux.mli","line":667,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"type pushdown =\n | Auto \n | Never \n | Require_exact ","params":[]}],"slug":"libtmux-plan-pushdown"},{"id":"Libtmux.Plan.pushdown.Auto","publicId":"Libtmux.Plan.pushdown.Auto","name":"Auto","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":667,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Auto","source":{"file":"lib/libtmux.mli","line":667,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan.pushdown","variant":"unit","qualifiedName":"Libtmux.Plan.Auto","slug":"libtmux-plan-pushdown-auto"},{"id":"Libtmux.Plan.pushdown.Never","publicId":"Libtmux.Plan.pushdown.Never","name":"Never","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":667,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Never","source":{"file":"lib/libtmux.mli","line":667,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan.pushdown","variant":"unit","qualifiedName":"Libtmux.Plan.Never","slug":"libtmux-plan-pushdown-never"},{"id":"Libtmux.Plan.pushdown.Require_exact","publicId":"Libtmux.Plan.pushdown.Require_exact","name":"Require_exact","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":667,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Require_exact","source":{"file":"lib/libtmux.mli","line":667,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan.pushdown","variant":"unit","qualifiedName":"Libtmux.Plan.Require_exact","slug":"libtmux-plan-pushdown-require_exact"},{"id":"Libtmux.Plan.required_fields","publicId":"Libtmux.Plan.required_fields","qualifiedName":"Libtmux.Plan.required_fields","name":"required_fields","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":679,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val required_fields : t -> string list","source":{"file":"lib/libtmux.mli","line":679,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val required_fields : t -> string list","params":[{"name":"arg1","type":"t"}],"returns":"string list"}],"slug":"libtmux-plan-required_fields"},{"id":"Libtmux.Plan.required_relations","publicId":"Libtmux.Plan.required_relations","qualifiedName":"Libtmux.Plan.required_relations","name":"required_relations","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":680,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val required_relations : t -> string list","source":{"file":"lib/libtmux.mli","line":680,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val required_relations : t -> string list","params":[{"name":"arg1","type":"t"}],"returns":"string list"}],"slug":"libtmux-plan-required_relations"},{"id":"Libtmux.Plan.residual","publicId":"Libtmux.Plan.residual","qualifiedName":"Libtmux.Plan.residual","name":"residual","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":678,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val residual : t -> Pane.t Expr.t","source":{"file":"lib/libtmux.mli","line":678,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val residual : t -> Pane.t Expr.t","params":[{"name":"arg1","type":"t"}],"returns":"Pane.t Expr.t"}],"slug":"libtmux-plan-residual"},{"id":"Libtmux.Plan.source_filter","publicId":"Libtmux.Plan.source_filter","qualifiedName":"Libtmux.Plan.source_filter","name":"source_filter","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":677,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source_filter : t -> string option","source":{"file":"lib/libtmux.mli","line":677,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"val source_filter : t -> string option","params":[{"name":"arg1","type":"t"}],"returns":"string option"}],"slug":"libtmux-plan-source_filter"},{"id":"Libtmux.Plan.t","publicId":"Libtmux.Plan.t","qualifiedName":"Libtmux.Plan.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":668,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":668,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Plan","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-plan-t"},{"id":"Libtmux.Query","publicId":"Libtmux.Query","qualifiedName":"Libtmux.Query","name":"Query","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":694,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Sequence adapters and bounded cardinality checks over captured values.\n Matching preserves order and duplicates. Expected absence and ambiguity\n remain ordinary result values. "],"declarations":[{"kind":"module","text":"module Query : sig\n val matching : 'a Expr.t -> 'a Seq.t -> 'a Seq.t\n (** [matching expression] compiles once when the adapter is constructed.\n Filtering preserves order and duplicates. Snapshot-derived sequences\n replay captured values; arbitrary input sequences retain their effects,\n exceptions and replay semantics. No tmux acquisition occurs. *)\n\n val exactly_one : 'a Seq.t -> ('a, Cardinality.error) result\n (** Return the unique value. Stop when a second value is found; proving\n uniqueness requires exhausting the remaining sequence. The input's effects\n and exceptions propagate. This does not execute a mutation. *)\n\n val one_or_none : 'a Seq.t -> ('a option, Cardinality.error) result\n (** As {!exactly_one}, with [Ok None] for an empty sequence. Order and\n duplicate entries count toward cardinality; values are not deduplicated.\n *)\nend","source":{"file":"lib/libtmux.mli","line":694,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Sequence adapters and bounded cardinality checks over captured values. Matching preserves order and duplicates. Expected absence and ambiguity remain ordinary result values."},"slug":"libtmux-query"},{"id":"Libtmux.Query.exactly_one","publicId":"Libtmux.Query.exactly_one","qualifiedName":"Libtmux.Query.exactly_one","name":"exactly_one","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":701,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Return the unique value. Stop when a second value is found; proving\n uniqueness requires exhausting the remaining sequence. The input's effects\n and exceptions propagate. This does not execute a mutation. "],"declarations":[{"kind":"function","text":"val exactly_one : 'a Seq.t -> ('a, Cardinality.error) result","source":{"file":"lib/libtmux.mli","line":701,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Query","doc":{"summary":"Return the unique value. Stop when a second value is found; proving uniqueness requires exhausting the remaining sequence. The input's effects and exceptions propagate. This does not execute a mutation."},"signatures":[{"raw":"val exactly_one : 'a Seq.t -> ('a, Cardinality.error) result","params":[{"name":"arg1","type":"'a Seq.t"}],"returns":"('a, Cardinality.error) result"}],"slug":"libtmux-query-exactly_one"},{"id":"Libtmux.Query.matching","publicId":"Libtmux.Query.matching","qualifiedName":"Libtmux.Query.matching","name":"matching","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":695,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" [matching expression] compiles once when the adapter is constructed.\n Filtering preserves order and duplicates. Snapshot-derived sequences\n replay captured values; arbitrary input sequences retain their effects,\n exceptions and replay semantics. No tmux acquisition occurs. "],"declarations":[{"kind":"function","text":"val matching : 'a Expr.t -> 'a Seq.t -> 'a Seq.t","source":{"file":"lib/libtmux.mli","line":695,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Query","doc":{"summary":"`matching expression` compiles once when the adapter is constructed. Filtering preserves order and duplicates. Snapshot-derived sequences replay captured values; arbitrary input sequences retain their effects, exceptions and replay semantics. No tmux acquisition occurs."},"signatures":[{"raw":"val matching : 'a Expr.t -> 'a Seq.t -> 'a Seq.t","params":[{"name":"arg1","type":"'a Expr.t"},{"name":"arg2","type":"'a Seq.t"}],"returns":"'a Seq.t"}],"slug":"libtmux-query-matching"},{"id":"Libtmux.Query.one_or_none","publicId":"Libtmux.Query.one_or_none","qualifiedName":"Libtmux.Query.one_or_none","name":"one_or_none","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":706,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" As {!exactly_one}, with [Ok None] for an empty sequence. Order and\n duplicate entries count toward cardinality; values are not deduplicated.\n "],"declarations":[{"kind":"function","text":"val one_or_none : 'a Seq.t -> ('a option, Cardinality.error) result","source":{"file":"lib/libtmux.mli","line":706,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Query","doc":{"summary":"As {!exactly_one}, with `Ok None` for an empty sequence. Order and duplicate entries count toward cardinality; values are not deduplicated."},"signatures":[{"raw":"val one_or_none : 'a Seq.t -> ('a option, Cardinality.error) result","params":[{"name":"arg1","type":"'a Seq.t"}],"returns":"('a option, Cardinality.error) result"}],"slug":"libtmux-query-one_or_none"},{"id":"Libtmux.Relation","publicId":"Libtmux.Relation","qualifiedName":"Libtmux.Relation","name":"Relation","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":159,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Typed edges in a captured graph. Many, one and optional relations are\n distinct; an unacquired relationship is never represented as an empty one.\n"],"declarations":[{"kind":"module","text":"module Relation : sig\n module Many : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end\n\n module One : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end\n\n module Optional : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end\nend","source":{"file":"lib/libtmux.mli","line":159,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Typed edges in a captured graph. Many, one and optional relations are distinct; an unacquired relationship is never represented as an empty one."},"slug":"libtmux-relation"},{"id":"Libtmux.Relation.Many","publicId":"Libtmux.Relation.Many","qualifiedName":"Libtmux.Relation.Many","name":"Many","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":160,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Many : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end","source":{"file":"lib/libtmux.mli","line":160,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Relation","slug":"libtmux-relation-many"},{"id":"Libtmux.Relation.Many.name","publicId":"Libtmux.Relation.Many.name","qualifiedName":"Libtmux.Relation.Many.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":163,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : ('parent, 'child) t -> string","source":{"file":"lib/libtmux.mli","line":163,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Relation.Many","signatures":[{"raw":"val name : ('parent, 'child) t -> string","params":[{"name":"arg1","type":"('parent, 'child) t"}],"returns":"string"}],"slug":"libtmux-relation-many-name"},{"id":"Libtmux.Relation.Many.t","publicId":"Libtmux.Relation.Many.t","qualifiedName":"Libtmux.Relation.Many.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":161,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type ('parent, 'child) t","source":{"file":"lib/libtmux.mli","line":161,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Relation.Many","signatures":[{"raw":"type ('parent, 'child) t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-relation-many-t"},{"id":"Libtmux.Relation.One","publicId":"Libtmux.Relation.One","qualifiedName":"Libtmux.Relation.One","name":"One","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":166,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module One : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end","source":{"file":"lib/libtmux.mli","line":166,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Relation","slug":"libtmux-relation-one"},{"id":"Libtmux.Relation.One.name","publicId":"Libtmux.Relation.One.name","qualifiedName":"Libtmux.Relation.One.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":169,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : ('parent, 'child) t -> string","source":{"file":"lib/libtmux.mli","line":169,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Relation.One","signatures":[{"raw":"val name : ('parent, 'child) t -> string","params":[{"name":"arg1","type":"('parent, 'child) t"}],"returns":"string"}],"slug":"libtmux-relation-one-name"},{"id":"Libtmux.Relation.One.t","publicId":"Libtmux.Relation.One.t","qualifiedName":"Libtmux.Relation.One.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":167,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type ('parent, 'child) t","source":{"file":"lib/libtmux.mli","line":167,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Relation.One","signatures":[{"raw":"type ('parent, 'child) t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-relation-one-t"},{"id":"Libtmux.Relation.Optional","publicId":"Libtmux.Relation.Optional","qualifiedName":"Libtmux.Relation.Optional","name":"Optional","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":172,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Optional : sig\n type ('parent, 'child) t\n\n val name : ('parent, 'child) t -> string\n end","source":{"file":"lib/libtmux.mli","line":172,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Relation","slug":"libtmux-relation-optional"},{"id":"Libtmux.Relation.Optional.name","publicId":"Libtmux.Relation.Optional.name","qualifiedName":"Libtmux.Relation.Optional.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":175,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : ('parent, 'child) t -> string","source":{"file":"lib/libtmux.mli","line":175,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Relation.Optional","signatures":[{"raw":"val name : ('parent, 'child) t -> string","params":[{"name":"arg1","type":"('parent, 'child) t"}],"returns":"string"}],"slug":"libtmux-relation-optional-name"},{"id":"Libtmux.Relation.Optional.t","publicId":"Libtmux.Relation.Optional.t","qualifiedName":"Libtmux.Relation.Optional.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":173,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type ('parent, 'child) t","source":{"file":"lib/libtmux.mli","line":173,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Relation.Optional","signatures":[{"raw":"type ('parent, 'child) t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-relation-optional-t"},{"id":"Libtmux.Session","publicId":"Libtmux.Session","qualifiedName":"Libtmux.Session","name":"Session","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":181,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" A captured session and its ordered window-link contexts. A session can\n contain repeated links to the same global window. "],"declarations":[{"kind":"module","text":"module rec Session : sig\n type t\n\n module Fields : sig\n val id : (t, string) Field.t\n val name : (t, string) Field.t\n val attached : (t, int) Field.t\n end\n\n module Relations : sig\n val window_links : (t, Window_link.t) Relation.Many.t\n val windows : (t, Window.t) Relation.Many.t\n end\n\n module Id : ID\n\n module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n (** Describe a target in an existing connection generation. No I/O. *)\n\n val source : t -> Source.t\n val id : t -> Id.t\n end\n\n type target = Target.t\n\n val id : t -> Id.t\n val name : t -> string\n val attached : t -> int\n val source : t -> Source.t\n val target : t -> target\n\n val same_entity : t -> t -> bool\n (** Compare IDs within the same bound {!Source.t} generation. *)\n\n val same_observation : t -> t -> bool\n (** Compare entity identity and snapshot identity. *)\n\n val window_links : t -> Window_link.t Iarray.t\n (** All captured links, in capture order, including repeated windows. *)\n\n val windows : t -> Window.t Iarray.t\n (** Distinct windows in first-link order. All accesses are local. *)\nend","source":{"file":"lib/libtmux.mli","line":181,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"A captured session and its ordered window-link contexts. A session can contain repeated links to the same global window."},"slug":"libtmux-session"},{"id":"Libtmux.Session.Fields","publicId":"Libtmux.Session.Fields","qualifiedName":"Libtmux.Session.Fields","name":"Fields","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":184,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Fields : sig\n val id : (t, string) Field.t\n val name : (t, string) Field.t\n val attached : (t, int) Field.t\n end","source":{"file":"lib/libtmux.mli","line":184,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","slug":"libtmux-session-fields"},{"id":"Libtmux.Session.Fields.attached","publicId":"Libtmux.Session.Fields.attached","qualifiedName":"Libtmux.Session.Fields.attached","name":"attached","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":187,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val attached : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":187,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Fields","signatures":[{"raw":"val attached : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-session-fields-attached"},{"id":"Libtmux.Session.Fields.id","publicId":"Libtmux.Session.Fields.id","qualifiedName":"Libtmux.Session.Fields.id","name":"id","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":185,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val id : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":185,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Fields","signatures":[{"raw":"val id : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-session-fields-id"},{"id":"Libtmux.Session.Fields.name","publicId":"Libtmux.Session.Fields.name","qualifiedName":"Libtmux.Session.Fields.name","name":"name","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":186,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val name : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":186,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Fields","signatures":[{"raw":"val name : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-session-fields-name"},{"id":"Libtmux.Session.Id","publicId":"Libtmux.Session.Id","qualifiedName":"Libtmux.Session.Id","name":"Id","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":195,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Id : ID","source":{"file":"lib/libtmux.mli","line":195,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","slug":"libtmux-session-id-12k2"},{"id":"Libtmux.Session.Id.compare","publicId":"Libtmux.Session.Id.compare","qualifiedName":"Libtmux.Session.Id.compare","name":"compare","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":136,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val compare : t -> t -> int","source":{"file":"lib/libtmux.mli","line":136,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Id","signatures":[{"raw":"val compare : t -> t -> int","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"int"}],"slug":"libtmux-session-id-compare"},{"id":"Libtmux.Session.Id.equal","publicId":"Libtmux.Session.Id.equal","qualifiedName":"Libtmux.Session.Id.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Id","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-session-id-equal"},{"id":"Libtmux.Session.Id.of_string","publicId":"Libtmux.Session.Id.of_string","qualifiedName":"Libtmux.Session.Id.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Accept a canonical prefixed decimal tmux ID in the uint32 range. "],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Id","doc":{"summary":"Accept a canonical prefixed decimal tmux ID in the uint32 range."},"signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-session-id-of_string"},{"id":"Libtmux.Session.Id.pp","publicId":"Libtmux.Session.Id.pp","qualifiedName":"Libtmux.Session.Id.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":137,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":137,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Id","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-session-id-pp"},{"id":"Libtmux.Session.Id.t","publicId":"Libtmux.Session.Id.t","qualifiedName":"Libtmux.Session.Id.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Id","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-session-id-t"},{"id":"Libtmux.Session.Id.to_string","publicId":"Libtmux.Session.Id.to_string","qualifiedName":"Libtmux.Session.Id.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":134,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":134,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Id","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-session-id-to_string"},{"id":"Libtmux.Session.Relations","publicId":"Libtmux.Session.Relations","qualifiedName":"Libtmux.Session.Relations","name":"Relations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":190,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Relations : sig\n val window_links : (t, Window_link.t) Relation.Many.t\n val windows : (t, Window.t) Relation.Many.t\n end","source":{"file":"lib/libtmux.mli","line":190,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","slug":"libtmux-session-relations"},{"id":"Libtmux.Session.Relations.window_links","publicId":"Libtmux.Session.Relations.window_links","qualifiedName":"Libtmux.Session.Relations.window_links","name":"window_links","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":191,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val window_links : (t, Window_link.t) Relation.Many.t","source":{"file":"lib/libtmux.mli","line":191,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Relations","signatures":[{"raw":"val window_links : (t, Window_link.t) Relation.Many.t","params":[],"returns":"(t, Window_link.t) Relation.Many.t"}],"slug":"libtmux-session-relations-window_links"},{"id":"Libtmux.Session.Relations.windows","publicId":"Libtmux.Session.Relations.windows","qualifiedName":"Libtmux.Session.Relations.windows","name":"windows","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":192,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val windows : (t, Window.t) Relation.Many.t","source":{"file":"lib/libtmux.mli","line":192,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Relations","signatures":[{"raw":"val windows : (t, Window.t) Relation.Many.t","params":[],"returns":"(t, Window.t) Relation.Many.t"}],"slug":"libtmux-session-relations-windows"},{"id":"Libtmux.Session.Target","publicId":"Libtmux.Session.Target","qualifiedName":"Libtmux.Session.Target","name":"Target","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":197,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n (** Describe a target in an existing connection generation. No I/O. *)\n\n val source : t -> Source.t\n val id : t -> Id.t\n end","source":{"file":"lib/libtmux.mli","line":197,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","slug":"libtmux-session-target-5p2d"},{"id":"Libtmux.Session.Target.id","publicId":"Libtmux.Session.Target.id","qualifiedName":"Libtmux.Session.Target.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":204,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":204,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Target","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-session-target-id"},{"id":"Libtmux.Session.Target.of_id","publicId":"Libtmux.Session.Target.of_id","qualifiedName":"Libtmux.Session.Target.of_id","name":"of_id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":200,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Describe a target in an existing connection generation. No I/O. "],"declarations":[{"kind":"function","text":"val of_id : source:Source.t -> Id.t -> t","source":{"file":"lib/libtmux.mli","line":200,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Target","doc":{"summary":"Describe a target in an existing connection generation. No I/O."},"signatures":[{"raw":"val of_id : source:Source.t -> Id.t -> t","params":[{"name":"source","type":"Source.t","keywordOnly":true},{"name":"arg1","type":"Id.t"}],"returns":"t"}],"slug":"libtmux-session-target-of_id"},{"id":"Libtmux.Session.Target.source","publicId":"Libtmux.Session.Target.source","qualifiedName":"Libtmux.Session.Target.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":203,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":203,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Target","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-session-target-source"},{"id":"Libtmux.Session.Target.t","publicId":"Libtmux.Session.Target.t","qualifiedName":"Libtmux.Session.Target.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":198,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":198,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session.Target","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-session-target-t"},{"id":"Libtmux.Session.attached","publicId":"Libtmux.Session.attached","qualifiedName":"Libtmux.Session.attached","name":"attached","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":211,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val attached : t -> int","source":{"file":"lib/libtmux.mli","line":211,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"val attached : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-session-attached"},{"id":"Libtmux.Session.id","publicId":"Libtmux.Session.id","qualifiedName":"Libtmux.Session.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":209,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":209,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-session-id-12gy"},{"id":"Libtmux.Session.name","publicId":"Libtmux.Session.name","qualifiedName":"Libtmux.Session.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":210,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : t -> string","source":{"file":"lib/libtmux.mli","line":210,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"val name : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-session-name"},{"id":"Libtmux.Session.same_entity","publicId":"Libtmux.Session.same_entity","qualifiedName":"Libtmux.Session.same_entity","name":"same_entity","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":215,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Compare IDs within the same bound {!Source.t} generation. "],"declarations":[{"kind":"function","text":"val same_entity : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":215,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","doc":{"summary":"Compare IDs within the same bound {!Source.t} generation."},"signatures":[{"raw":"val same_entity : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-session-same_entity"},{"id":"Libtmux.Session.same_observation","publicId":"Libtmux.Session.same_observation","qualifiedName":"Libtmux.Session.same_observation","name":"same_observation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":218,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Compare entity identity and snapshot identity. "],"declarations":[{"kind":"function","text":"val same_observation : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":218,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","doc":{"summary":"Compare entity identity and snapshot identity."},"signatures":[{"raw":"val same_observation : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-session-same_observation"},{"id":"Libtmux.Session.source","publicId":"Libtmux.Session.source","qualifiedName":"Libtmux.Session.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":212,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":212,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-session-source"},{"id":"Libtmux.Session.t","publicId":"Libtmux.Session.t","qualifiedName":"Libtmux.Session.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":182,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":182,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-session-t"},{"id":"Libtmux.Session.target","publicId":"Libtmux.Session.target","qualifiedName":"Libtmux.Session.target","name":"target","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":213,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val target : t -> target","source":{"file":"lib/libtmux.mli","line":213,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","signatures":[{"raw":"val target : t -> target","params":[{"name":"arg1","type":"t"}],"returns":"target"}],"slug":"libtmux-session-target-iu8j"},{"id":"Libtmux.Session.target:type","publicId":"Libtmux.Session.target:type","qualifiedName":"Libtmux.Session.target","name":"target","kind":"typealias","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":207,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type target = Target.t","source":{"file":"lib/libtmux.mli","line":207,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","type":"Target.t","signatures":[{"raw":"type target = Target.t","params":[]}],"slug":"libtmux-session-target-type"},{"id":"Libtmux.Session.window_links","publicId":"Libtmux.Session.window_links","qualifiedName":"Libtmux.Session.window_links","name":"window_links","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":221,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" All captured links, in capture order, including repeated windows. "],"declarations":[{"kind":"function","text":"val window_links : t -> Window_link.t Iarray.t","source":{"file":"lib/libtmux.mli","line":221,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","doc":{"summary":"All captured links, in capture order, including repeated windows.","examples":[{"lang":"ocaml","code":"(* docs:begin capture-graph *)\nopen Libtmux\nmodule Client = Libtmux_unix.Client\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n(* docs:end capture-graph *)\n\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_graph.ml","intro":"Navigate the typed object graph. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_graph.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"graph: 2 sessions, 2 windows, 3 links, 2 panes\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val window_links : t -> Window_link.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Window_link.t Iarray.t"}],"slug":"libtmux-session-window_links"},{"id":"Libtmux.Session.windows","publicId":"Libtmux.Session.windows","qualifiedName":"Libtmux.Session.windows","name":"windows","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":224,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Distinct windows in first-link order. All accesses are local. "],"declarations":[{"kind":"function","text":"val windows : t -> Window.t Iarray.t","source":{"file":"lib/libtmux.mli","line":224,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Session","doc":{"summary":"Distinct windows in first-link order. All accesses are local."},"signatures":[{"raw":"val windows : t -> Window.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Window.t Iarray.t"}],"slug":"libtmux-session-windows"},{"id":"Libtmux.Snapshot","publicId":"Libtmux.Snapshot","qualifiedName":"Libtmux.Snapshot","name":"Snapshot","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":403,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" A complete immutable graph captured over an acquisition interval.\n Collections are replayable immutable arrays. Capturing several tmux commands\n does not establish an atomic transaction. "],"declarations":[{"kind":"module","text":"module Snapshot : sig\n type t\n\n module Id : sig\n type t\n\n val of_string : string -> (t, Error.t) result\n val to_string : t -> string\n val equal : t -> t -> bool\n end\n\n module Input : sig\n type session = { id : Session.Id.t; name : string; attached : int }\n\n type window = {\n id : Window.Id.t;\n name : string;\n width : int;\n height : int;\n layout : string;\n }\n\n type window_link = {\n session_id : Session.Id.t;\n window_id : Window.Id.t;\n index : int;\n is_current : bool;\n }\n\n type pane = {\n id : Pane.Id.t;\n window_id : Window.Id.t;\n index : int;\n active : bool;\n dead : bool;\n title : string;\n current_command : string;\n current_path : string;\n pid : int option;\n width : int;\n height : int;\n left : int;\n top : int;\n }\n\n type client = {\n name : string;\n session_id : Session.Id.t option;\n pid : int;\n width : int;\n height : int option;\n control_mode : bool;\n }\n end\n\n val create :\n source:Source.t ->\n id:Id.t ->\n started_at_ns:int64 ->\n finished_at_ns:int64 ->\n sessions:Input.session list ->\n windows:Input.window list ->\n window_links:Input.window_link list ->\n panes:Input.pane list ->\n clients:Input.client list ->\n (t, Error.t) result\n (** Validate and materialize a complete captured graph without I/O. Equal\n duplicate global rows collapse in first-occurrence order; conflicting rows\n and dangling references return {!Error.Capture_raced}. Links at different\n indexes remain distinct, including within one session. At most 10,000\n input rows are admitted. Each session needs one current link and each\n window one active pane. Capture spans an interval, not an atomic instant.\n Input strings are bytes; no Unicode normalization is performed. *)\n\n val id : t -> Id.t\n val source : t -> Source.t\n val started_at_ns : t -> int64\n val finished_at_ns : t -> int64\n val sessions : t -> Session.t Iarray.t\n val windows : t -> Window.t Iarray.t\n val window_links : t -> Window_link.t Iarray.t\n val panes : t -> Pane.t Iarray.t\n\n val clients : t -> Client_observation.t Iarray.t\n (** Collections and their contents are immutable. They retain capture order,\n are replayable and remain readable after the acquiring client closes. *)\n\n val find_session : t -> Session.Id.t -> Session.t option\n val find_window : t -> Window.Id.t -> Window.t option\n val find_pane : t -> Pane.Id.t -> Pane.t option\nend","source":{"file":"lib/libtmux.mli","line":403,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"A complete immutable graph captured over an acquisition interval. Collections are replayable immutable arrays. Capturing several tmux commands does not establish an atomic transaction."},"slug":"libtmux-snapshot"},{"id":"Libtmux.Snapshot.Id","publicId":"Libtmux.Snapshot.Id","qualifiedName":"Libtmux.Snapshot.Id","name":"Id","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":406,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Id : sig\n type t\n\n val of_string : string -> (t, Error.t) result\n val to_string : t -> string\n val equal : t -> t -> bool\n end","source":{"file":"lib/libtmux.mli","line":406,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","slug":"libtmux-snapshot-id-1y9h"},{"id":"Libtmux.Snapshot.Id.equal","publicId":"Libtmux.Snapshot.Id.equal","qualifiedName":"Libtmux.Snapshot.Id.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":411,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":411,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Id","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-snapshot-id-equal"},{"id":"Libtmux.Snapshot.Id.of_string","publicId":"Libtmux.Snapshot.Id.of_string","qualifiedName":"Libtmux.Snapshot.Id.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":409,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":409,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Id","signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-snapshot-id-of_string"},{"id":"Libtmux.Snapshot.Id.t","publicId":"Libtmux.Snapshot.Id.t","qualifiedName":"Libtmux.Snapshot.Id.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":407,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":407,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Id","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-snapshot-id-t"},{"id":"Libtmux.Snapshot.Id.to_string","publicId":"Libtmux.Snapshot.Id.to_string","qualifiedName":"Libtmux.Snapshot.Id.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":410,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":410,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Id","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-snapshot-id-to_string"},{"id":"Libtmux.Snapshot.Input","publicId":"Libtmux.Snapshot.Input","qualifiedName":"Libtmux.Snapshot.Input","name":"Input","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":414,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Input : sig\n type session = { id : Session.Id.t; name : string; attached : int }\n\n type window = {\n id : Window.Id.t;\n name : string;\n width : int;\n height : int;\n layout : string;\n }\n\n type window_link = {\n session_id : Session.Id.t;\n window_id : Window.Id.t;\n index : int;\n is_current : bool;\n }\n\n type pane = {\n id : Pane.Id.t;\n window_id : Window.Id.t;\n index : int;\n active : bool;\n dead : bool;\n title : string;\n current_command : string;\n current_path : string;\n pid : int option;\n width : int;\n height : int;\n left : int;\n top : int;\n }\n\n type client = {\n name : string;\n session_id : Session.Id.t option;\n pid : int;\n width : int;\n height : int option;\n control_mode : bool;\n }\n end","source":{"file":"lib/libtmux.mli","line":414,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","slug":"libtmux-snapshot-input"},{"id":"Libtmux.Snapshot.Input.client","publicId":"Libtmux.Snapshot.Input.client","qualifiedName":"Libtmux.Snapshot.Input.client","name":"client","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":448,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type client = {\n name : string;\n session_id : Session.Id.t option;\n pid : int;\n width : int;\n height : int option;\n control_mode : bool;\n }","source":{"file":"lib/libtmux.mli","line":448,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input","signatures":[{"raw":"type client =\n {\n name: string ;\n session_id: Session.Id.t option ;\n pid: int ;\n width: int ;\n height: int option ;\n control_mode: bool }","params":[]}],"slug":"libtmux-snapshot-input-client"},{"id":"Libtmux.Snapshot.Input.client.control_mode","publicId":"Libtmux.Snapshot.Input.client.control_mode","name":"control_mode","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":454,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"control_mode : bool;","source":{"file":"lib/libtmux.mli","line":454,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"bool","qualifiedName":"Libtmux.Snapshot.Input.control_mode","slug":"libtmux-snapshot-input-client-control_mode"},{"id":"Libtmux.Snapshot.Input.client.height","publicId":"Libtmux.Snapshot.Input.client.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":453,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int option;","source":{"file":"lib/libtmux.mli","line":453,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"int option","qualifiedName":"Libtmux.Snapshot.Input.height","slug":"libtmux-snapshot-input-client-height"},{"id":"Libtmux.Snapshot.Input.client.name","publicId":"Libtmux.Snapshot.Input.client.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":449,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":449,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"string","qualifiedName":"Libtmux.Snapshot.Input.name","slug":"libtmux-snapshot-input-client-name"},{"id":"Libtmux.Snapshot.Input.client.pid","publicId":"Libtmux.Snapshot.Input.client.pid","name":"pid","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":451,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pid : int;","source":{"file":"lib/libtmux.mli","line":451,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"int","qualifiedName":"Libtmux.Snapshot.Input.pid","slug":"libtmux-snapshot-input-client-pid"},{"id":"Libtmux.Snapshot.Input.client.session_id","publicId":"Libtmux.Snapshot.Input.client.session_id","name":"session_id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":450,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session_id : Session.Id.t option;","source":{"file":"lib/libtmux.mli","line":450,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"Session.Id.t option","qualifiedName":"Libtmux.Snapshot.Input.session_id","slug":"libtmux-snapshot-input-client-session_id"},{"id":"Libtmux.Snapshot.Input.client.width","publicId":"Libtmux.Snapshot.Input.client.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":452,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"lib/libtmux.mli","line":452,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.client","type":"int","qualifiedName":"Libtmux.Snapshot.Input.width","slug":"libtmux-snapshot-input-client-width"},{"id":"Libtmux.Snapshot.Input.pane","publicId":"Libtmux.Snapshot.Input.pane","qualifiedName":"Libtmux.Snapshot.Input.pane","name":"pane","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":432,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type pane = {\n id : Pane.Id.t;\n window_id : Window.Id.t;\n index : int;\n active : bool;\n dead : bool;\n title : string;\n current_command : string;\n current_path : string;\n pid : int option;\n width : int;\n height : int;\n left : int;\n top : int;\n }","source":{"file":"lib/libtmux.mli","line":432,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input","signatures":[{"raw":"type pane =\n {\n id: Pane.Id.t ;\n window_id: Window.Id.t ;\n index: int ;\n active: bool ;\n dead: bool ;\n title: string ;\n current_command: string ;\n current_path: string ;\n pid: int option ;\n width: int ;\n height: int ;\n left: int ;\n top: int }","params":[]}],"slug":"libtmux-snapshot-input-pane"},{"id":"Libtmux.Snapshot.Input.pane.active","publicId":"Libtmux.Snapshot.Input.pane.active","name":"active","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":436,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"active : bool;","source":{"file":"lib/libtmux.mli","line":436,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"bool","qualifiedName":"Libtmux.Snapshot.Input.active","slug":"libtmux-snapshot-input-pane-active"},{"id":"Libtmux.Snapshot.Input.pane.current_command","publicId":"Libtmux.Snapshot.Input.pane.current_command","name":"current_command","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":439,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"current_command : string;","source":{"file":"lib/libtmux.mli","line":439,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"string","qualifiedName":"Libtmux.Snapshot.Input.current_command","slug":"libtmux-snapshot-input-pane-current_command"},{"id":"Libtmux.Snapshot.Input.pane.current_path","publicId":"Libtmux.Snapshot.Input.pane.current_path","name":"current_path","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":440,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"current_path : string;","source":{"file":"lib/libtmux.mli","line":440,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"string","qualifiedName":"Libtmux.Snapshot.Input.current_path","slug":"libtmux-snapshot-input-pane-current_path"},{"id":"Libtmux.Snapshot.Input.pane.dead","publicId":"Libtmux.Snapshot.Input.pane.dead","name":"dead","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":437,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"dead : bool;","source":{"file":"lib/libtmux.mli","line":437,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"bool","qualifiedName":"Libtmux.Snapshot.Input.dead","slug":"libtmux-snapshot-input-pane-dead"},{"id":"Libtmux.Snapshot.Input.pane.height","publicId":"Libtmux.Snapshot.Input.pane.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":443,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int;","source":{"file":"lib/libtmux.mli","line":443,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int","qualifiedName":"Libtmux.Snapshot.Input.height","slug":"libtmux-snapshot-input-pane-height"},{"id":"Libtmux.Snapshot.Input.pane.id","publicId":"Libtmux.Snapshot.Input.pane.id","name":"id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":433,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"id : Pane.Id.t;","source":{"file":"lib/libtmux.mli","line":433,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"Pane.Id.t","qualifiedName":"Libtmux.Snapshot.Input.id","slug":"libtmux-snapshot-input-pane-id"},{"id":"Libtmux.Snapshot.Input.pane.index","publicId":"Libtmux.Snapshot.Input.pane.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":435,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":435,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int","qualifiedName":"Libtmux.Snapshot.Input.index","slug":"libtmux-snapshot-input-pane-index"},{"id":"Libtmux.Snapshot.Input.pane.left","publicId":"Libtmux.Snapshot.Input.pane.left","name":"left","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":444,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"left : int;","source":{"file":"lib/libtmux.mli","line":444,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int","qualifiedName":"Libtmux.Snapshot.Input.left","slug":"libtmux-snapshot-input-pane-left"},{"id":"Libtmux.Snapshot.Input.pane.pid","publicId":"Libtmux.Snapshot.Input.pane.pid","name":"pid","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":441,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pid : int option;","source":{"file":"lib/libtmux.mli","line":441,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int option","qualifiedName":"Libtmux.Snapshot.Input.pid","slug":"libtmux-snapshot-input-pane-pid"},{"id":"Libtmux.Snapshot.Input.pane.title","publicId":"Libtmux.Snapshot.Input.pane.title","name":"title","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":438,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"title : string;","source":{"file":"lib/libtmux.mli","line":438,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"string","qualifiedName":"Libtmux.Snapshot.Input.title","slug":"libtmux-snapshot-input-pane-title"},{"id":"Libtmux.Snapshot.Input.pane.top","publicId":"Libtmux.Snapshot.Input.pane.top","name":"top","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":445,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"top : int;","source":{"file":"lib/libtmux.mli","line":445,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int","qualifiedName":"Libtmux.Snapshot.Input.top","slug":"libtmux-snapshot-input-pane-top"},{"id":"Libtmux.Snapshot.Input.pane.width","publicId":"Libtmux.Snapshot.Input.pane.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":442,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"lib/libtmux.mli","line":442,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"int","qualifiedName":"Libtmux.Snapshot.Input.width","slug":"libtmux-snapshot-input-pane-width"},{"id":"Libtmux.Snapshot.Input.pane.window_id","publicId":"Libtmux.Snapshot.Input.pane.window_id","name":"window_id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":434,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_id : Window.Id.t;","source":{"file":"lib/libtmux.mli","line":434,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.pane","type":"Window.Id.t","qualifiedName":"Libtmux.Snapshot.Input.window_id","slug":"libtmux-snapshot-input-pane-window_id"},{"id":"Libtmux.Snapshot.Input.session","publicId":"Libtmux.Snapshot.Input.session","qualifiedName":"Libtmux.Snapshot.Input.session","name":"session","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":415,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type session = { id : Session.Id.t; name : string; attached : int }","source":{"file":"lib/libtmux.mli","line":415,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input","signatures":[{"raw":"type session = {\n id: Session.Id.t ;\n name: string ;\n attached: int }","params":[]}],"slug":"libtmux-snapshot-input-session"},{"id":"Libtmux.Snapshot.Input.session.attached","publicId":"Libtmux.Snapshot.Input.session.attached","name":"attached","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":415,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"attached : int","source":{"file":"lib/libtmux.mli","line":415,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.session","type":"int","qualifiedName":"Libtmux.Snapshot.Input.attached","slug":"libtmux-snapshot-input-session-attached"},{"id":"Libtmux.Snapshot.Input.session.id","publicId":"Libtmux.Snapshot.Input.session.id","name":"id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":415,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"id : Session.Id.t;","source":{"file":"lib/libtmux.mli","line":415,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.session","type":"Session.Id.t","qualifiedName":"Libtmux.Snapshot.Input.id","slug":"libtmux-snapshot-input-session-id"},{"id":"Libtmux.Snapshot.Input.session.name","publicId":"Libtmux.Snapshot.Input.session.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":415,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":415,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.session","type":"string","qualifiedName":"Libtmux.Snapshot.Input.name","slug":"libtmux-snapshot-input-session-name"},{"id":"Libtmux.Snapshot.Input.window","publicId":"Libtmux.Snapshot.Input.window","qualifiedName":"Libtmux.Snapshot.Input.window","name":"window","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":417,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type window = {\n id : Window.Id.t;\n name : string;\n width : int;\n height : int;\n layout : string;\n }","source":{"file":"lib/libtmux.mli","line":417,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input","signatures":[{"raw":"type window =\n {\n id: Window.Id.t ;\n name: string ;\n width: int ;\n height: int ;\n layout: string }","params":[]}],"slug":"libtmux-snapshot-input-window"},{"id":"Libtmux.Snapshot.Input.window.height","publicId":"Libtmux.Snapshot.Input.window.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":421,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int;","source":{"file":"lib/libtmux.mli","line":421,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.window","type":"int","qualifiedName":"Libtmux.Snapshot.Input.height","slug":"libtmux-snapshot-input-window-height"},{"id":"Libtmux.Snapshot.Input.window.id","publicId":"Libtmux.Snapshot.Input.window.id","name":"id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":418,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"id : Window.Id.t;","source":{"file":"lib/libtmux.mli","line":418,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.window","type":"Window.Id.t","qualifiedName":"Libtmux.Snapshot.Input.id","slug":"libtmux-snapshot-input-window-id"},{"id":"Libtmux.Snapshot.Input.window.layout","publicId":"Libtmux.Snapshot.Input.window.layout","name":"layout","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":422,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"layout : string;","source":{"file":"lib/libtmux.mli","line":422,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.window","type":"string","qualifiedName":"Libtmux.Snapshot.Input.layout","slug":"libtmux-snapshot-input-window-layout"},{"id":"Libtmux.Snapshot.Input.window.name","publicId":"Libtmux.Snapshot.Input.window.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":419,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"lib/libtmux.mli","line":419,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.window","type":"string","qualifiedName":"Libtmux.Snapshot.Input.name","slug":"libtmux-snapshot-input-window-name"},{"id":"Libtmux.Snapshot.Input.window.width","publicId":"Libtmux.Snapshot.Input.window.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":420,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"lib/libtmux.mli","line":420,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.window","type":"int","qualifiedName":"Libtmux.Snapshot.Input.width","slug":"libtmux-snapshot-input-window-width"},{"id":"Libtmux.Snapshot.Input.window_link","publicId":"Libtmux.Snapshot.Input.window_link","qualifiedName":"Libtmux.Snapshot.Input.window_link","name":"window_link","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":425,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type window_link = {\n session_id : Session.Id.t;\n window_id : Window.Id.t;\n index : int;\n is_current : bool;\n }","source":{"file":"lib/libtmux.mli","line":425,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input","signatures":[{"raw":"type window_link =\n {\n session_id: Session.Id.t ;\n window_id: Window.Id.t ;\n index: int ;\n is_current: bool }","params":[]}],"slug":"libtmux-snapshot-input-window_link"},{"id":"Libtmux.Snapshot.Input.window_link.index","publicId":"Libtmux.Snapshot.Input.window_link.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":428,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"lib/libtmux.mli","line":428,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.window_link","type":"int","qualifiedName":"Libtmux.Snapshot.Input.index","slug":"libtmux-snapshot-input-window_link-index"},{"id":"Libtmux.Snapshot.Input.window_link.is_current","publicId":"Libtmux.Snapshot.Input.window_link.is_current","name":"is_current","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":429,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"is_current : bool;","source":{"file":"lib/libtmux.mli","line":429,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.window_link","type":"bool","qualifiedName":"Libtmux.Snapshot.Input.is_current","slug":"libtmux-snapshot-input-window_link-is_current"},{"id":"Libtmux.Snapshot.Input.window_link.session_id","publicId":"Libtmux.Snapshot.Input.window_link.session_id","name":"session_id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":426,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session_id : Session.Id.t;","source":{"file":"lib/libtmux.mli","line":426,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.window_link","type":"Session.Id.t","qualifiedName":"Libtmux.Snapshot.Input.session_id","slug":"libtmux-snapshot-input-window_link-session_id"},{"id":"Libtmux.Snapshot.Input.window_link.window_id","publicId":"Libtmux.Snapshot.Input.window_link.window_id","name":"window_id","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":427,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_id : Window.Id.t;","source":{"file":"lib/libtmux.mli","line":427,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot.Input.window_link","type":"Window.Id.t","qualifiedName":"Libtmux.Snapshot.Input.window_id","slug":"libtmux-snapshot-input-window_link-window_id"},{"id":"Libtmux.Snapshot.clients","publicId":"Libtmux.Snapshot.clients","qualifiedName":"Libtmux.Snapshot.clients","name":"clients","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":486,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Collections and their contents are immutable. They retain capture order,\n are replayable and remain readable after the acquiring client closes. "],"declarations":[{"kind":"function","text":"val clients : t -> Client_observation.t Iarray.t","source":{"file":"lib/libtmux.mli","line":486,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","doc":{"summary":"Collections and their contents are immutable. They retain capture order, are replayable and remain readable after the acquiring client closes."},"signatures":[{"raw":"val clients : t -> Client_observation.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Client_observation.t Iarray.t"}],"slug":"libtmux-snapshot-clients"},{"id":"Libtmux.Snapshot.create","publicId":"Libtmux.Snapshot.create","qualifiedName":"Libtmux.Snapshot.create","name":"create","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":458,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Validate and materialize a complete captured graph without I/O. Equal\n duplicate global rows collapse in first-occurrence order; conflicting rows\n and dangling references return {!Error.Capture_raced}. Links at different\n indexes remain distinct, including within one session. At most 10,000\n input rows are admitted. Each session needs one current link and each\n window one active pane. Capture spans an interval, not an atomic instant.\n Input strings are bytes; no Unicode normalization is performed. "],"declarations":[{"kind":"function","text":"val create :\n source:Source.t ->\n id:Id.t ->\n started_at_ns:int64 ->\n finished_at_ns:int64 ->\n sessions:Input.session list ->\n windows:Input.window list ->\n window_links:Input.window_link list ->\n panes:Input.pane list ->\n clients:Input.client list ->\n (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":458,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","doc":{"summary":"Validate and materialize a complete captured graph without I/O. Equal duplicate global rows collapse in first-occurrence order; conflicting rows and dangling references return {!Error.Capture_raced}. Links at different indexes remain distinct, including within one session. At most 10,000 input rows are admitted. Each session needs one current link and each window one active pane. Capture spans an interval, not an atomic instant. Input strings are bytes; no Unicode normalization is performed."},"signatures":[{"raw":"val create :\n source:Source.t ->\n id:Id.t ->\n started_at_ns:int64 ->\n finished_at_ns:int64 ->\n sessions:Input.session list ->\n windows:Input.window list ->\n window_links:Input.window_link list ->\n panes:Input.pane list -> clients:Input.client list -> (t, Error.t) result","params":[{"name":"source","type":"Source.t","keywordOnly":true},{"name":"id","type":"Id.t","keywordOnly":true},{"name":"started_at_ns","type":"int64","keywordOnly":true},{"name":"finished_at_ns","type":"int64","keywordOnly":true},{"name":"sessions","type":"Input.session list","keywordOnly":true},{"name":"windows","type":"Input.window list","keywordOnly":true},{"name":"window_links","type":"Input.window_link list","keywordOnly":true},{"name":"panes","type":"Input.pane list","keywordOnly":true},{"name":"clients","type":"Input.client list","keywordOnly":true}],"returns":"(t, Error.t) result"}],"slug":"libtmux-snapshot-create"},{"id":"Libtmux.Snapshot.find_pane","publicId":"Libtmux.Snapshot.find_pane","qualifiedName":"Libtmux.Snapshot.find_pane","name":"find_pane","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":492,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val find_pane : t -> Pane.Id.t -> Pane.t option","source":{"file":"lib/libtmux.mli","line":492,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val find_pane : t -> Pane.Id.t -> Pane.t option","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Pane.Id.t"}],"returns":"Pane.t option"}],"slug":"libtmux-snapshot-find_pane"},{"id":"Libtmux.Snapshot.find_session","publicId":"Libtmux.Snapshot.find_session","qualifiedName":"Libtmux.Snapshot.find_session","name":"find_session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":490,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val find_session : t -> Session.Id.t -> Session.t option","source":{"file":"lib/libtmux.mli","line":490,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val find_session : t -> Session.Id.t -> Session.t option","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Session.Id.t"}],"returns":"Session.t option"}],"slug":"libtmux-snapshot-find_session"},{"id":"Libtmux.Snapshot.find_window","publicId":"Libtmux.Snapshot.find_window","qualifiedName":"Libtmux.Snapshot.find_window","name":"find_window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":491,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val find_window : t -> Window.Id.t -> Window.t option","source":{"file":"lib/libtmux.mli","line":491,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val find_window : t -> Window.Id.t -> Window.t option","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Window.Id.t"}],"returns":"Window.t option"}],"slug":"libtmux-snapshot-find_window"},{"id":"Libtmux.Snapshot.finished_at_ns","publicId":"Libtmux.Snapshot.finished_at_ns","qualifiedName":"Libtmux.Snapshot.finished_at_ns","name":"finished_at_ns","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":480,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val finished_at_ns : t -> int64","source":{"file":"lib/libtmux.mli","line":480,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val finished_at_ns : t -> int64","params":[{"name":"arg1","type":"t"}],"returns":"int64"}],"slug":"libtmux-snapshot-finished_at_ns"},{"id":"Libtmux.Snapshot.id","publicId":"Libtmux.Snapshot.id","qualifiedName":"Libtmux.Snapshot.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":477,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":477,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-snapshot-id-1y6d"},{"id":"Libtmux.Snapshot.panes","publicId":"Libtmux.Snapshot.panes","qualifiedName":"Libtmux.Snapshot.panes","name":"panes","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":484,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val panes : t -> Pane.t Iarray.t","source":{"file":"lib/libtmux.mli","line":484,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val panes : t -> Pane.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Pane.t Iarray.t"}],"slug":"libtmux-snapshot-panes"},{"id":"Libtmux.Snapshot.sessions","publicId":"Libtmux.Snapshot.sessions","qualifiedName":"Libtmux.Snapshot.sessions","name":"sessions","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":481,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val sessions : t -> Session.t Iarray.t","source":{"file":"lib/libtmux.mli","line":481,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val sessions : t -> Session.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Session.t Iarray.t"}],"doc":{"summary":"","examples":[{"lang":"ocaml","code":"(* docs:begin capture-graph *)\nopen Libtmux\nmodule Client = Libtmux_unix.Client\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n(* docs:end capture-graph *)\n\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_graph.ml","intro":"Navigate the typed object graph. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_graph.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"graph: 2 sessions, 2 windows, 3 links, 2 panes\n","intro":"Expected outcome line, after the temporary socket path:"}]},"slug":"libtmux-snapshot-sessions"},{"id":"Libtmux.Snapshot.source","publicId":"Libtmux.Snapshot.source","qualifiedName":"Libtmux.Snapshot.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":478,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":478,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-snapshot-source"},{"id":"Libtmux.Snapshot.started_at_ns","publicId":"Libtmux.Snapshot.started_at_ns","qualifiedName":"Libtmux.Snapshot.started_at_ns","name":"started_at_ns","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":479,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val started_at_ns : t -> int64","source":{"file":"lib/libtmux.mli","line":479,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val started_at_ns : t -> int64","params":[{"name":"arg1","type":"t"}],"returns":"int64"}],"slug":"libtmux-snapshot-started_at_ns"},{"id":"Libtmux.Snapshot.t","publicId":"Libtmux.Snapshot.t","qualifiedName":"Libtmux.Snapshot.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":404,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":404,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-snapshot-t"},{"id":"Libtmux.Snapshot.window_links","publicId":"Libtmux.Snapshot.window_links","qualifiedName":"Libtmux.Snapshot.window_links","name":"window_links","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":483,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val window_links : t -> Window_link.t Iarray.t","source":{"file":"lib/libtmux.mli","line":483,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val window_links : t -> Window_link.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Window_link.t Iarray.t"}],"slug":"libtmux-snapshot-window_links"},{"id":"Libtmux.Snapshot.windows","publicId":"Libtmux.Snapshot.windows","qualifiedName":"Libtmux.Snapshot.windows","name":"windows","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":482,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val windows : t -> Window.t Iarray.t","source":{"file":"lib/libtmux.mli","line":482,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Snapshot","signatures":[{"raw":"val windows : t -> Window.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Window.t Iarray.t"}],"slug":"libtmux-snapshot-windows"},{"id":"Libtmux.Source","publicId":"Libtmux.Source","qualifiedName":"Libtmux.Source","name":"Source","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":96,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Endpoint and observed daemon identity for one connection generation.\n Constructing metadata alone does not establish a live binding. "],"declarations":[{"kind":"module","text":"module Source : sig\n type t\n\n val create :\n endpoint:Endpoint.t ->\n generation:Generation.t ->\n server_pid:int ->\n (t, Error.t) result\n (** Pure metadata import for capture adapters. This neither establishes a\n connection nor verifies process identity. The backend must bind the\n generation to a live daemon before it admits operations. *)\n\n val endpoint : t -> Endpoint.t\n val generation : t -> Generation.t\n val server_pid : t -> int\n\n val equal : t -> t -> bool\n (** Compare endpoint, observed daemon PID and connection generation.\n Independent connections compare unequal even when they observe the same\n PID. Equality establishes neither a live binding nor fresh observations.\n *)\nend","source":{"file":"lib/libtmux.mli","line":96,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"Endpoint and observed daemon identity for one connection generation. Constructing metadata alone does not establish a live binding."},"slug":"libtmux-source"},{"id":"Libtmux.Source.create","publicId":"Libtmux.Source.create","qualifiedName":"Libtmux.Source.create","name":"create","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":99,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Pure metadata import for capture adapters. This neither establishes a\n connection nor verifies process identity. The backend must bind the\n generation to a live daemon before it admits operations. "],"declarations":[{"kind":"function","text":"val create :\n endpoint:Endpoint.t ->\n generation:Generation.t ->\n server_pid:int ->\n (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":99,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Source","doc":{"summary":"Pure metadata import for capture adapters. This neither establishes a connection nor verifies process identity. The backend must bind the generation to a live daemon before it admits operations."},"signatures":[{"raw":"val create :\n endpoint:Endpoint.t ->\n generation:Generation.t -> server_pid:int -> (t, Error.t) result","params":[{"name":"endpoint","type":"Endpoint.t","keywordOnly":true},{"name":"generation","type":"Generation.t","keywordOnly":true},{"name":"server_pid","type":"int","keywordOnly":true}],"returns":"(t, Error.t) result"}],"slug":"libtmux-source-create"},{"id":"Libtmux.Source.endpoint","publicId":"Libtmux.Source.endpoint","qualifiedName":"Libtmux.Source.endpoint","name":"endpoint","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val endpoint : t -> Endpoint.t","source":{"file":"lib/libtmux.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Source","signatures":[{"raw":"val endpoint : t -> Endpoint.t","params":[{"name":"arg1","type":"t"}],"returns":"Endpoint.t"}],"slug":"libtmux-source-endpoint"},{"id":"Libtmux.Source.equal","publicId":"Libtmux.Source.equal","qualifiedName":"Libtmux.Source.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":112,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Compare endpoint, observed daemon PID and connection generation.\n Independent connections compare unequal even when they observe the same\n PID. Equality establishes neither a live binding nor fresh observations.\n "],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":112,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Source","doc":{"summary":"Compare endpoint, observed daemon PID and connection generation. Independent connections compare unequal even when they observe the same PID. Equality establishes neither a live binding nor fresh observations."},"signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-source-equal"},{"id":"Libtmux.Source.generation","publicId":"Libtmux.Source.generation","qualifiedName":"Libtmux.Source.generation","name":"generation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":109,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val generation : t -> Generation.t","source":{"file":"lib/libtmux.mli","line":109,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Source","signatures":[{"raw":"val generation : t -> Generation.t","params":[{"name":"arg1","type":"t"}],"returns":"Generation.t"}],"slug":"libtmux-source-generation"},{"id":"Libtmux.Source.server_pid","publicId":"Libtmux.Source.server_pid","qualifiedName":"Libtmux.Source.server_pid","name":"server_pid","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":110,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val server_pid : t -> int","source":{"file":"lib/libtmux.mli","line":110,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Source","signatures":[{"raw":"val server_pid : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-source-server_pid"},{"id":"Libtmux.Source.t","publicId":"Libtmux.Source.t","qualifiedName":"Libtmux.Source.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":97,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":97,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Source","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-source-t"},{"id":"Libtmux.Spawn","publicId":"Libtmux.Spawn","qualifiedName":"Libtmux.Spawn","name":"Spawn","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":739,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" A process description with explicit argv or shell semantics, working\n directory and environment. Describing a process performs no I/O. "],"declarations":[{"kind":"module","text":"module Spawn : sig\n type command =\n | Default\n | Exec of { program : string; args : string list }\n | Shell of string\n\n type t = {\n command : command;\n cwd : string option;\n environment : (string * string) list;\n }\n\n val make : ?cwd:string -> ?environment:(string * string) list -> command -> t\n (** Describe a program without I/O. [Exec] preserves argv; [Shell] explicitly\n requests the daemon's configured shell. [cwd] must be absolute. Validation\n occurs at admission. With no arguments, [Exec] uses a fixed [/bin/sh]\n trampoline because tmux treats a single argument as shell code. [Default]\n follows tmux defaults on creation and reuses the previous command on\n respawn. *)\n\n val default : t\nend","source":{"file":"lib/libtmux.mli","line":739,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"A process description with explicit argv or shell semantics, working directory and environment. Describing a process performs no I/O."},"slug":"libtmux-spawn"},{"id":"Libtmux.Spawn.command","publicId":"Libtmux.Spawn.command","qualifiedName":"Libtmux.Spawn.command","name":"command","kind":"enum","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":740,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type command =\n | Default\n | Exec of { program : string; args : string list }\n | Shell of string","source":{"file":"lib/libtmux.mli","line":740,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn","signatures":[{"raw":"type command =\n | Default \n | Exec of {\n program: string ;\n args: string list } \n | Shell of string ","params":[]}],"slug":"libtmux-spawn-command"},{"id":"Libtmux.Spawn.command.Default","publicId":"Libtmux.Spawn.command.Default","name":"Default","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":741,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Default","source":{"file":"lib/libtmux.mli","line":741,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn.command","variant":"unit","qualifiedName":"Libtmux.Spawn.Default","slug":"libtmux-spawn-command-default"},{"id":"Libtmux.Spawn.command.Exec","publicId":"Libtmux.Spawn.command.Exec","name":"Exec","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":742,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Exec of { program : string; args : string list }","source":{"file":"lib/libtmux.mli","line":742,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn.command","variant":"struct","qualifiedName":"Libtmux.Spawn.Exec","slug":"libtmux-spawn-command-exec"},{"id":"Libtmux.Spawn.command.Exec.args","publicId":"Libtmux.Spawn.command.Exec.args","name":"args","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":742,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"args : string list","source":{"file":"lib/libtmux.mli","line":742,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn.command.Exec","type":"string list","qualifiedName":"Libtmux.Spawn.args","slug":"libtmux-spawn-command-exec-args"},{"id":"Libtmux.Spawn.command.Exec.program","publicId":"Libtmux.Spawn.command.Exec.program","name":"program","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":742,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"program : string;","source":{"file":"lib/libtmux.mli","line":742,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn.command.Exec","type":"string","qualifiedName":"Libtmux.Spawn.program","slug":"libtmux-spawn-command-exec-program"},{"id":"Libtmux.Spawn.command.Shell","publicId":"Libtmux.Spawn.command.Shell","name":"Shell","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":743,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Shell of string","source":{"file":"lib/libtmux.mli","line":743,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn.command","variant":"tuple","qualifiedName":"Libtmux.Spawn.Shell","slug":"libtmux-spawn-command-shell"},{"id":"Libtmux.Spawn.default","publicId":"Libtmux.Spawn.default","qualifiedName":"Libtmux.Spawn.default","name":"default","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":759,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val default : t","source":{"file":"lib/libtmux.mli","line":759,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn","signatures":[{"raw":"val default : t","params":[],"returns":"t"}],"slug":"libtmux-spawn-default"},{"id":"Libtmux.Spawn.make","publicId":"Libtmux.Spawn.make","qualifiedName":"Libtmux.Spawn.make","name":"make","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":751,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Describe a program without I/O. [Exec] preserves argv; [Shell] explicitly\n requests the daemon's configured shell. [cwd] must be absolute. Validation\n occurs at admission. With no arguments, [Exec] uses a fixed [/bin/sh]\n trampoline because tmux treats a single argument as shell code. [Default]\n follows tmux defaults on creation and reuses the previous command on\n respawn. "],"declarations":[{"kind":"function","text":"val make : ?cwd:string -> ?environment:(string * string) list -> command -> t","source":{"file":"lib/libtmux.mli","line":751,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn","doc":{"summary":"Describe a program without I/O. `Exec` preserves argv; `Shell` explicitly requests the daemon's configured shell. `cwd` must be absolute. Validation occurs at admission. With no arguments, `Exec` uses a fixed `/bin/sh` trampoline because tmux treats a single argument as shell code. `Default` follows tmux defaults on creation and reuses the previous command on respawn."},"signatures":[{"raw":"val make : ?cwd:string -> ?environment:(string * string) list -> command -> t","params":[{"name":"cwd","type":"string","optional":true,"keywordOnly":true},{"name":"environment","type":"(string * string) list","optional":true,"keywordOnly":true},{"name":"arg1","type":"command"}],"returns":"t"}],"slug":"libtmux-spawn-make"},{"id":"Libtmux.Spawn.t","publicId":"Libtmux.Spawn.t","qualifiedName":"Libtmux.Spawn.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":745,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type t = {\n command : command;\n cwd : string option;\n environment : (string * string) list;\n }","source":{"file":"lib/libtmux.mli","line":745,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn","signatures":[{"raw":"type t =\n {\n command: command ;\n cwd: string option ;\n environment: (string * string) list }","params":[]}],"slug":"libtmux-spawn-t"},{"id":"Libtmux.Spawn.t.command","publicId":"Libtmux.Spawn.t.command","name":"command","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":746,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"command : command;","source":{"file":"lib/libtmux.mli","line":746,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn.t","type":"command","qualifiedName":"Libtmux.Spawn.command","slug":"libtmux-spawn-t-command"},{"id":"Libtmux.Spawn.t.cwd","publicId":"Libtmux.Spawn.t.cwd","name":"cwd","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":747,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cwd : string option;","source":{"file":"lib/libtmux.mli","line":747,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn.t","type":"string option","qualifiedName":"Libtmux.Spawn.cwd","slug":"libtmux-spawn-t-cwd"},{"id":"Libtmux.Spawn.t.environment","publicId":"Libtmux.Spawn.t.environment","name":"environment","kind":"attribute","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":748,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"environment : (string * string) list;","source":{"file":"lib/libtmux.mli","line":748,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Spawn.t","type":"(string * string) list","qualifiedName":"Libtmux.Spawn.environment","slug":"libtmux-spawn-t-environment"},{"id":"Libtmux.Window","publicId":"Libtmux.Window","qualifiedName":"Libtmux.Window","name":"Window","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":230,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" A global window shared by its session links. Window index and current state\n belong to a link, while panes and geometry belong to the window. "],"declarations":[{"kind":"module","text":"and Window : sig\n type t\n\n module Fields : sig\n val id : (t, string) Field.t\n val name : (t, string) Field.t\n val width : (t, int) Field.t\n val height : (t, int) Field.t\n val layout : (t, string) Field.t\n end\n\n module Relations : sig\n val panes : (t, Pane.t) Relation.Many.t\n val links : (t, Window_link.t) Relation.Many.t\n end\n\n module Id : ID\n\n module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n val source : t -> Source.t\n val id : t -> Id.t\n end\n\n type target = Target.t\n\n val id : t -> Id.t\n val name : t -> string\n val width : t -> int\n val height : t -> int\n val layout : t -> string\n val source : t -> Source.t\n val target : t -> target\n\n val same_entity : t -> t -> bool\n (** Compare IDs within the same bound {!Source.t} generation. *)\n\n val same_observation : t -> t -> bool\n (** Compare entity identity and snapshot identity. *)\n\n val panes : t -> Pane.t Iarray.t\n val links : t -> Window_link.t Iarray.t\nend","source":{"file":"lib/libtmux.mli","line":230,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"A global window shared by its session links. Window index and current state belong to a link, while panes and geometry belong to the window."},"slug":"libtmux-window"},{"id":"Libtmux.Window.Fields","publicId":"Libtmux.Window.Fields","qualifiedName":"Libtmux.Window.Fields","name":"Fields","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":233,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Fields : sig\n val id : (t, string) Field.t\n val name : (t, string) Field.t\n val width : (t, int) Field.t\n val height : (t, int) Field.t\n val layout : (t, string) Field.t\n end","source":{"file":"lib/libtmux.mli","line":233,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","slug":"libtmux-window-fields"},{"id":"Libtmux.Window.Fields.height","publicId":"Libtmux.Window.Fields.height","qualifiedName":"Libtmux.Window.Fields.height","name":"height","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":237,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val height : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":237,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Fields","signatures":[{"raw":"val height : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-window-fields-height"},{"id":"Libtmux.Window.Fields.id","publicId":"Libtmux.Window.Fields.id","qualifiedName":"Libtmux.Window.Fields.id","name":"id","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":234,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val id : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":234,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Fields","signatures":[{"raw":"val id : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-window-fields-id"},{"id":"Libtmux.Window.Fields.layout","publicId":"Libtmux.Window.Fields.layout","qualifiedName":"Libtmux.Window.Fields.layout","name":"layout","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":238,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val layout : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":238,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Fields","signatures":[{"raw":"val layout : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-window-fields-layout"},{"id":"Libtmux.Window.Fields.name","publicId":"Libtmux.Window.Fields.name","qualifiedName":"Libtmux.Window.Fields.name","name":"name","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":235,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val name : (t, string) Field.t","source":{"file":"lib/libtmux.mli","line":235,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Fields","signatures":[{"raw":"val name : (t, string) Field.t","params":[],"returns":"(t, string) Field.t"}],"slug":"libtmux-window-fields-name"},{"id":"Libtmux.Window.Fields.width","publicId":"Libtmux.Window.Fields.width","qualifiedName":"Libtmux.Window.Fields.width","name":"width","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":236,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val width : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":236,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Fields","signatures":[{"raw":"val width : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-window-fields-width"},{"id":"Libtmux.Window.Id","publicId":"Libtmux.Window.Id","qualifiedName":"Libtmux.Window.Id","name":"Id","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":246,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Id : ID","source":{"file":"lib/libtmux.mli","line":246,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","slug":"libtmux-window-id-1sgu"},{"id":"Libtmux.Window.Id.compare","publicId":"Libtmux.Window.Id.compare","qualifiedName":"Libtmux.Window.Id.compare","name":"compare","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":136,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val compare : t -> t -> int","source":{"file":"lib/libtmux.mli","line":136,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Id","signatures":[{"raw":"val compare : t -> t -> int","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"int"}],"slug":"libtmux-window-id-compare"},{"id":"Libtmux.Window.Id.equal","publicId":"Libtmux.Window.Id.equal","qualifiedName":"Libtmux.Window.Id.equal","name":"equal","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val equal : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Id","signatures":[{"raw":"val equal : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-window-id-equal"},{"id":"Libtmux.Window.Id.of_string","publicId":"Libtmux.Window.Id.of_string","qualifiedName":"Libtmux.Window.Id.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Accept a canonical prefixed decimal tmux ID in the uint32 range. "],"declarations":[{"kind":"function","text":"val of_string : string -> (t, Error.t) result","source":{"file":"lib/libtmux.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Id","doc":{"summary":"Accept a canonical prefixed decimal tmux ID in the uint32 range."},"signatures":[{"raw":"val of_string : string -> (t, Error.t) result","params":[{"name":"arg1","type":"string"}],"returns":"(t, Error.t) result"}],"slug":"libtmux-window-id-of_string"},{"id":"Libtmux.Window.Id.pp","publicId":"Libtmux.Window.Id.pp","qualifiedName":"Libtmux.Window.Id.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":137,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"lib/libtmux.mli","line":137,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Id","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux-window-id-pp"},{"id":"Libtmux.Window.Id.t","publicId":"Libtmux.Window.Id.t","qualifiedName":"Libtmux.Window.Id.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Id","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-window-id-t"},{"id":"Libtmux.Window.Id.to_string","publicId":"Libtmux.Window.Id.to_string","qualifiedName":"Libtmux.Window.Id.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":134,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val to_string : t -> string","source":{"file":"lib/libtmux.mli","line":134,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Id","signatures":[{"raw":"val to_string : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-window-id-to_string"},{"id":"Libtmux.Window.Relations","publicId":"Libtmux.Window.Relations","qualifiedName":"Libtmux.Window.Relations","name":"Relations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":241,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Relations : sig\n val panes : (t, Pane.t) Relation.Many.t\n val links : (t, Window_link.t) Relation.Many.t\n end","source":{"file":"lib/libtmux.mli","line":241,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","slug":"libtmux-window-relations"},{"id":"Libtmux.Window.Relations.links","publicId":"Libtmux.Window.Relations.links","qualifiedName":"Libtmux.Window.Relations.links","name":"links","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":243,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val links : (t, Window_link.t) Relation.Many.t","source":{"file":"lib/libtmux.mli","line":243,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Relations","signatures":[{"raw":"val links : (t, Window_link.t) Relation.Many.t","params":[],"returns":"(t, Window_link.t) Relation.Many.t"}],"slug":"libtmux-window-relations-links"},{"id":"Libtmux.Window.Relations.panes","publicId":"Libtmux.Window.Relations.panes","qualifiedName":"Libtmux.Window.Relations.panes","name":"panes","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":242,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val panes : (t, Pane.t) Relation.Many.t","source":{"file":"lib/libtmux.mli","line":242,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Relations","signatures":[{"raw":"val panes : (t, Pane.t) Relation.Many.t","params":[],"returns":"(t, Pane.t) Relation.Many.t"}],"slug":"libtmux-window-relations-panes"},{"id":"Libtmux.Window.Target","publicId":"Libtmux.Window.Target","qualifiedName":"Libtmux.Window.Target","name":"Target","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":248,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Target : sig\n type t\n\n val of_id : source:Source.t -> Id.t -> t\n val source : t -> Source.t\n val id : t -> Id.t\n end","source":{"file":"lib/libtmux.mli","line":248,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","slug":"libtmux-window-target-6ecc"},{"id":"Libtmux.Window.Target.id","publicId":"Libtmux.Window.Target.id","qualifiedName":"Libtmux.Window.Target.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":253,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":253,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Target","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-window-target-id"},{"id":"Libtmux.Window.Target.of_id","publicId":"Libtmux.Window.Target.of_id","qualifiedName":"Libtmux.Window.Target.of_id","name":"of_id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":251,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val of_id : source:Source.t -> Id.t -> t","source":{"file":"lib/libtmux.mli","line":251,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Target","signatures":[{"raw":"val of_id : source:Source.t -> Id.t -> t","params":[{"name":"source","type":"Source.t","keywordOnly":true},{"name":"arg1","type":"Id.t"}],"returns":"t"}],"slug":"libtmux-window-target-of_id"},{"id":"Libtmux.Window.Target.source","publicId":"Libtmux.Window.Target.source","qualifiedName":"Libtmux.Window.Target.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":252,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":252,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Target","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-window-target-source"},{"id":"Libtmux.Window.Target.t","publicId":"Libtmux.Window.Target.t","qualifiedName":"Libtmux.Window.Target.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":249,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":249,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window.Target","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-window-target-t"},{"id":"Libtmux.Window.height","publicId":"Libtmux.Window.height","qualifiedName":"Libtmux.Window.height","name":"height","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":261,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val height : t -> int","source":{"file":"lib/libtmux.mli","line":261,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val height : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-window-height"},{"id":"Libtmux.Window.id","publicId":"Libtmux.Window.id","qualifiedName":"Libtmux.Window.id","name":"id","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":258,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : t -> Id.t","source":{"file":"lib/libtmux.mli","line":258,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val id : t -> Id.t","params":[{"name":"arg1","type":"t"}],"returns":"Id.t"}],"slug":"libtmux-window-id-1sjw"},{"id":"Libtmux.Window.layout","publicId":"Libtmux.Window.layout","qualifiedName":"Libtmux.Window.layout","name":"layout","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":262,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val layout : t -> string","source":{"file":"lib/libtmux.mli","line":262,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val layout : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-window-layout"},{"id":"Libtmux.Window.links","publicId":"Libtmux.Window.links","qualifiedName":"Libtmux.Window.links","name":"links","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":273,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val links : t -> Window_link.t Iarray.t","source":{"file":"lib/libtmux.mli","line":273,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val links : t -> Window_link.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Window_link.t Iarray.t"}],"slug":"libtmux-window-links"},{"id":"Libtmux.Window.name","publicId":"Libtmux.Window.name","qualifiedName":"Libtmux.Window.name","name":"name","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":259,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val name : t -> string","source":{"file":"lib/libtmux.mli","line":259,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val name : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux-window-name"},{"id":"Libtmux.Window.panes","publicId":"Libtmux.Window.panes","qualifiedName":"Libtmux.Window.panes","name":"panes","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":272,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val panes : t -> Pane.t Iarray.t","source":{"file":"lib/libtmux.mli","line":272,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val panes : t -> Pane.t Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"Pane.t Iarray.t"}],"doc":{"summary":"","examples":[{"lang":"ocaml","code":"(* docs:begin capture-graph *)\nopen Libtmux\nmodule Client = Libtmux_unix.Client\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n(* docs:end capture-graph *)\n\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_graph.ml","intro":"Navigate the typed object graph. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_graph.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"graph: 2 sessions, 2 windows, 3 links, 2 panes\n","intro":"Expected outcome line, after the temporary socket path:"}]},"slug":"libtmux-window-panes"},{"id":"Libtmux.Window.same_entity","publicId":"Libtmux.Window.same_entity","qualifiedName":"Libtmux.Window.same_entity","name":"same_entity","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":266,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Compare IDs within the same bound {!Source.t} generation. "],"declarations":[{"kind":"function","text":"val same_entity : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":266,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","doc":{"summary":"Compare IDs within the same bound {!Source.t} generation."},"signatures":[{"raw":"val same_entity : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-window-same_entity"},{"id":"Libtmux.Window.same_observation","publicId":"Libtmux.Window.same_observation","qualifiedName":"Libtmux.Window.same_observation","name":"same_observation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":269,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Compare entity identity and snapshot identity. "],"declarations":[{"kind":"function","text":"val same_observation : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":269,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","doc":{"summary":"Compare entity identity and snapshot identity."},"signatures":[{"raw":"val same_observation : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-window-same_observation"},{"id":"Libtmux.Window.source","publicId":"Libtmux.Window.source","qualifiedName":"Libtmux.Window.source","name":"source","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":263,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Source.t","source":{"file":"lib/libtmux.mli","line":263,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val source : t -> Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Source.t"}],"slug":"libtmux-window-source"},{"id":"Libtmux.Window.t","publicId":"Libtmux.Window.t","qualifiedName":"Libtmux.Window.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":231,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":231,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-window-t"},{"id":"Libtmux.Window.target","publicId":"Libtmux.Window.target","qualifiedName":"Libtmux.Window.target","name":"target","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":264,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val target : t -> target","source":{"file":"lib/libtmux.mli","line":264,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val target : t -> target","params":[{"name":"arg1","type":"t"}],"returns":"target"}],"slug":"libtmux-window-target-1sbf"},{"id":"Libtmux.Window.target:type","publicId":"Libtmux.Window.target:type","qualifiedName":"Libtmux.Window.target","name":"target","kind":"typealias","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":256,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type target = Target.t","source":{"file":"lib/libtmux.mli","line":256,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","type":"Target.t","signatures":[{"raw":"type target = Target.t","params":[]}],"slug":"libtmux-window-target-type"},{"id":"Libtmux.Window.width","publicId":"Libtmux.Window.width","qualifiedName":"Libtmux.Window.width","name":"width","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":260,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val width : t -> int","source":{"file":"lib/libtmux.mli","line":260,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window","signatures":[{"raw":"val width : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-window-width"},{"id":"Libtmux.Window_link","publicId":"Libtmux.Window_link","qualifiedName":"Libtmux.Window_link","name":"Window_link","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":278,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" One captured session/index/window context. It is not a stable link\n incarnation across unlinking, movement or reindexing. "],"declarations":[{"kind":"module","text":"and Window_link : sig\n type t\n\n module Fields : sig\n val index : (t, int) Field.t\n val is_current : (t, bool) Field.t\n end\n\n module Relations : sig\n val session : (t, Session.t) Relation.One.t\n val window : (t, Window.t) Relation.One.t\n end\n\n val index : t -> int\n val is_current : t -> bool\n val session : t -> Session.t\n val window : t -> Window.t\n\n val same_context : t -> t -> bool\n (** Compare source, session, index and window. An equal context does not\n certify a stable link incarnation across reindexing or unlink/relink. *)\n\n val same_observation : t -> t -> bool\nend","source":{"file":"lib/libtmux.mli","line":278,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux","doc":{"summary":"One captured session/index/window context. It is not a stable link incarnation across unlinking, movement or reindexing."},"slug":"libtmux-window_link"},{"id":"Libtmux.Window_link.Fields","publicId":"Libtmux.Window_link.Fields","qualifiedName":"Libtmux.Window_link.Fields","name":"Fields","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":281,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Fields : sig\n val index : (t, int) Field.t\n val is_current : (t, bool) Field.t\n end","source":{"file":"lib/libtmux.mli","line":281,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link","slug":"libtmux-window_link-fields"},{"id":"Libtmux.Window_link.Fields.index","publicId":"Libtmux.Window_link.Fields.index","qualifiedName":"Libtmux.Window_link.Fields.index","name":"index","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":282,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val index : (t, int) Field.t","source":{"file":"lib/libtmux.mli","line":282,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link.Fields","signatures":[{"raw":"val index : (t, int) Field.t","params":[],"returns":"(t, int) Field.t"}],"slug":"libtmux-window_link-fields-index"},{"id":"Libtmux.Window_link.Fields.is_current","publicId":"Libtmux.Window_link.Fields.is_current","qualifiedName":"Libtmux.Window_link.Fields.is_current","name":"is_current","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":283,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val is_current : (t, bool) Field.t","source":{"file":"lib/libtmux.mli","line":283,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link.Fields","signatures":[{"raw":"val is_current : (t, bool) Field.t","params":[],"returns":"(t, bool) Field.t"}],"slug":"libtmux-window_link-fields-is_current"},{"id":"Libtmux.Window_link.Relations","publicId":"Libtmux.Window_link.Relations","qualifiedName":"Libtmux.Window_link.Relations","name":"Relations","kind":"module","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":286,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Relations : sig\n val session : (t, Session.t) Relation.One.t\n val window : (t, Window.t) Relation.One.t\n end","source":{"file":"lib/libtmux.mli","line":286,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link","slug":"libtmux-window_link-relations"},{"id":"Libtmux.Window_link.Relations.session","publicId":"Libtmux.Window_link.Relations.session","qualifiedName":"Libtmux.Window_link.Relations.session","name":"session","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":287,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val session : (t, Session.t) Relation.One.t","source":{"file":"lib/libtmux.mli","line":287,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link.Relations","signatures":[{"raw":"val session : (t, Session.t) Relation.One.t","params":[],"returns":"(t, Session.t) Relation.One.t"}],"slug":"libtmux-window_link-relations-session"},{"id":"Libtmux.Window_link.Relations.window","publicId":"Libtmux.Window_link.Relations.window","qualifiedName":"Libtmux.Window_link.Relations.window","name":"window","kind":"constant","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":288,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"val window : (t, Window.t) Relation.One.t","source":{"file":"lib/libtmux.mli","line":288,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link.Relations","signatures":[{"raw":"val window : (t, Window.t) Relation.One.t","params":[],"returns":"(t, Window.t) Relation.One.t"}],"slug":"libtmux-window_link-relations-window"},{"id":"Libtmux.Window_link.index","publicId":"Libtmux.Window_link.index","qualifiedName":"Libtmux.Window_link.index","name":"index","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":291,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val index : t -> int","source":{"file":"lib/libtmux.mli","line":291,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"val index : t -> int","params":[{"name":"arg1","type":"t"}],"returns":"int"}],"slug":"libtmux-window_link-index"},{"id":"Libtmux.Window_link.is_current","publicId":"Libtmux.Window_link.is_current","qualifiedName":"Libtmux.Window_link.is_current","name":"is_current","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":292,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val is_current : t -> bool","source":{"file":"lib/libtmux.mli","line":292,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"val is_current : t -> bool","params":[{"name":"arg1","type":"t"}],"returns":"bool"}],"slug":"libtmux-window_link-is_current"},{"id":"Libtmux.Window_link.same_context","publicId":"Libtmux.Window_link.same_context","qualifiedName":"Libtmux.Window_link.same_context","name":"same_context","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":296,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Compare source, session, index and window. An equal context does not\n certify a stable link incarnation across reindexing or unlink/relink. "],"declarations":[{"kind":"function","text":"val same_context : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":296,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link","doc":{"summary":"Compare source, session, index and window. An equal context does not certify a stable link incarnation across reindexing or unlink/relink."},"signatures":[{"raw":"val same_context : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-window_link-same_context"},{"id":"Libtmux.Window_link.same_observation","publicId":"Libtmux.Window_link.same_observation","qualifiedName":"Libtmux.Window_link.same_observation","name":"same_observation","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":300,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val same_observation : t -> t -> bool","source":{"file":"lib/libtmux.mli","line":300,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"val same_observation : t -> t -> bool","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"t"}],"returns":"bool"}],"slug":"libtmux-window_link-same_observation"},{"id":"Libtmux.Window_link.session","publicId":"Libtmux.Window_link.session","qualifiedName":"Libtmux.Window_link.session","name":"session","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":293,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val session : t -> Session.t","source":{"file":"lib/libtmux.mli","line":293,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"val session : t -> Session.t","params":[{"name":"arg1","type":"t"}],"returns":"Session.t"}],"slug":"libtmux-window_link-session"},{"id":"Libtmux.Window_link.t","publicId":"Libtmux.Window_link.t","qualifiedName":"Libtmux.Window_link.t","name":"t","kind":"typealias","package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":279,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"lib/libtmux.mli","line":279,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux-window_link-t"},{"id":"Libtmux.Window_link.window","publicId":"Libtmux.Window_link.window","qualifiedName":"Libtmux.Window_link.window","name":"window","kind":"function","modifiers":[],"package":"libtmux","product":"core","apiScope":"exported","publicOwner":"Libtmux","source":{"file":"lib/libtmux.mli","line":294,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val window : t -> Window.t","source":{"file":"lib/libtmux.mli","line":294,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux.Window_link","signatures":[{"raw":"val window : t -> Window.t","params":[{"name":"arg1","type":"t"}],"returns":"Window.t"}],"slug":"libtmux-window_link-window"},{"id":"Libtmux_eio","publicId":"Libtmux_eio","qualifiedName":"Libtmux_eio","name":"Libtmux_eio","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":1,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Concurrent Linux tmux clients using the application's Eio scheduler.\n\n Client methods perform I/O unless documented otherwise. Captured\n {!Libtmux.Snapshot} observations and retained {!Operation.inspect} remain\n local. Clients belong to the connecting domain. Closure releases their owned\n resources; tmux applies its configured daemon lifetime.\n\n See {!Client} for acquisition and commands, {!Operation} for cancellation\n outcomes, and {!Subscription} for bounded future output. The\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md}streaming\n guide} demonstrates application-owned switches, cancellation and continuity\n gaps. "],"declarations":[{"kind":"module","text":"","source":{"file":"eio/libtmux_eio.mli","line":1,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"doc":{"summary":"Concurrent Linux tmux clients using the application's Eio scheduler.","body":"Client methods perform I/O unless documented otherwise. Captured {!Libtmux.Snapshot} observations and retained {!Operation.inspect} remain local. Clients belong to the connecting domain. Closure releases their owned resources; tmux applies its configured daemon lifetime.\n\nSee {!Client} for acquisition and commands, {!Operation} for cancellation outcomes, and {!Subscription} for bounded future output. The [streaming guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md) demonstrates application-owned switches, cancellation and continuity gaps."},"slug":"libtmux_eio"},{"id":"Libtmux_eio.Cleanup","publicId":"Libtmux_eio.Cleanup","qualifiedName":"Libtmux_eio.Cleanup","name":"Cleanup","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":14,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Domain-owned cleanup diagnostics shared with the blocking backend. Supply a\n report before setup to inspect secondary failures after native cancellation.\n No scheduler is needed to inspect a report. "],"declarations":[{"kind":"module","text":"module Cleanup = Libtmux_unix.Cleanup","source":{"file":"eio/libtmux_eio.mli","line":14,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio","doc":{"summary":"Domain-owned cleanup diagnostics shared with the blocking backend. Supply a report before setup to inspect secondary failures after native cancellation. No scheduler is needed to inspect a report."},"exportedFrom":"Libtmux_unix.Cleanup","slug":"libtmux_eio-cleanup"},{"id":"Libtmux_eio.Client","publicId":"Libtmux_eio.Client","qualifiedName":"Libtmux_eio.Client","name":"Client","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":127,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" An explicit generation-bound connection. Applications retain ownership of\n the endpoint choice and resource lifetime. "],"declarations":[{"kind":"module","text":"module Client : sig\n type t\n\n val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:_ Eio.Process.mgr ->\n mono_clock:_ Eio.Time.Mono.t ->\n Libtmux.Endpoint.t ->\n (t, Libtmux.Error.t) result\n (** Attach to an existing local Linux daemon in the same PID namespace and\n shared filesystem. Requires pidfd support. Default exchange timeout: one\n second. All client calls belong to the connecting OCaml domain. Initial\n and auxiliary attachments suppress tmux's [update-environment] behavior.\n *)\n\n val cleanup : t -> Cleanup.t\n (** Read the supplied report or the client's fresh default without I/O.\n {!Cleanup.inspect} remains available after close. *)\n\n val source : t -> Libtmux.Source.t\n (** Read the retained endpoint, daemon PID and connection generation without\n I/O. *)\n\n val version : t -> string\n (** Read the bound daemon's observed version without I/O. *)\n\n val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t ->\n Libtmux.Pane.t ->\n (Subscription.t, Libtmux.Error.t) result\n (** Acquire verified coverage through one shared lane per session; choose the\n least observed session ID unless supplied. A client-owned reader delivers\n future bytes without application callbacks. Default queue bounds are 1\n MiB/1024 events; max 16 subscribers and eight total client lanes, sharing\n the 32 MiB payload budget. Queue capacities remain reserved while empty;\n captures and reads need additional scratch space and can return\n {!Libtmux.Error.Capacity} below the subscriber-count limit. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity}shared\n capacity guide} for combined reservations and process slots.\n\n Overflow or coverage/layout changes emit Gap then End. Data starts after\n admission's marker, with no snapshot/history barrier, automatic reconnect\n or silent cursor reuse. New admission returns [Error Libtmux.Error.Closed]\n once {!close} starts. *)\n\n val wait_for_text :\n ?timeout:float ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n text:string ->\n (Rendered.t, Libtmux.Error.t) result\n (** Subscribe and capture the screen immediately, then recapture on output.\n Membership/overflow gaps establish fresh coverage in the same binding.\n Maximum pattern: 64 KiB. Return captured rendered text containing it;\n transient text may be missed. Deadlines are checked between bounded\n acquisitions, whose I/O retains the client exchange timeout. Cancellation\n propagates and releases the subscription. A cleanup failure cannot replace\n an earlier error or cancellation; inspect {!cleanup} for secondary\n failures. Otherwise cleanup failure prevents success or renewed coverage.\n No history/barrier guarantee. *)\n\n val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result\n (** Validate and reserve bounded capacity without I/O. Return\n [Error Libtmux.Error.Closed] once {!close} starts. *)\n\n val await : 'a Operation.t -> ('a, Libtmux.Error.t) result\n (** Cancellation propagates as Eio cancellation. Store the handle outside the\n cancelled fiber: the client drains written work independently, and the\n eventual result remains inspectable. *)\n\n val run : t -> 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result\n (** Submit and await an explicit command. Retain a separate submitted handle\n when the outcome must remain inspectable after caller cancellation. *)\n\n val capture : t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result\n (** Acquire a complete immutable graph over an interval. Conflicting or\n disappearing entities fail capture; they do not become empty relations.\n The returned values remain readable after client closure. *)\n\n val capture_text :\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int ->\n end_:int ->\n (Rendered.t, Libtmux.Error.t) result\n (** Inclusive ordinary screen rows, using a bounded private file transfer.\n Qualified local scratch storage must be shared with the daemon. *)\n\n (* BEGIN GENERATED OPERATIONS *)\n val rename_window :\n t -> Libtmux.Window.target -> name:string -> (unit, Libtmux.Error.t) result\n (** Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. *)\n\n val rename_session :\n t -> Libtmux.Session.target -> name:string -> (unit, Libtmux.Error.t) result\n (** Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. *)\n\n val switch_client_at :\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result\n (** Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. *)\n\n val request_detach_client_at :\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result\n (** Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. *)\n\n val refresh_client_at :\n ?status_only:bool ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result\n (** Request a redraw; no terminal-rendering completion is implied. *)\n\n val resize_control_client_at :\n t ->\n Libtmux.Client_name.t ->\n width:int ->\n height:int ->\n (unit, Libtmux.Error.t) result\n (** Set a control client's reported size. tmux rejects terminal clients. *)\n\n val send_text :\n t -> Libtmux.Pane.target -> text:string -> (unit, Libtmux.Error.t) result\n (** Literal bytes, without an implicit Enter. NUL is rejected at admission. *)\n\n val send_keys :\n t ->\n Libtmux.Pane.target ->\n Libtmux.Key.t list ->\n (unit, Libtmux.Error.t) result\n (** Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. *)\n\n val wait_for : t -> string -> (unit, Libtmux.Error.t) result\n (** Wait on a named tmux semaphore using a dedicated bound lane. *)\n\n val signal : t -> string -> (unit, Libtmux.Error.t) result\n (** Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. *)\n\n val capture_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result\n (** Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n *)\n\n val set_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. *)\n\n val unset_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result\n (** Remove the local entry, allowing a global value to apply to future panes.\n *)\n\n val remove_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result\n (** Store a removal marker, excluding the variable from future panes. *)\n\n val capture_options :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result\n (** Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Libtmux.Error.Unsupported}. *)\n\n val read_option :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result\n (** Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. *)\n\n val set_option :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Options.scalar ->\n (unit, Libtmux.Error.t) result\n (** Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. *)\n\n val unset_option :\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. *)\n\n val clear_option_array :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result\n (** Set a local empty array, masking inheritance. *)\n\n val capture_hooks :\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result\n (** Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. *)\n\n val read_hook :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result\n (** Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. *)\n\n val set_hook :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Hook.command list ->\n (unit, Libtmux.Error.t) result\n (** Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Libtmux.Options.Text] value; bulk hook capture includes built-ins.\n Commands may cause arbitrary tmux effects when triggered. Hooks that print\n output are outside the supported control transport contract. *)\n\n val remove_hook :\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. *)\n\n val run_hook :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result\n (** Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. *)\n\n val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n name:string ->\n unit ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create a detached session on the bound daemon. Name collisions fail. *)\n\n val create_window :\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Session.target ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create detached, rejecting an occupied explicit index. *)\n\n val split_pane :\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. *)\n\n val break_pane :\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. *)\n\n val kill_session :\n t -> Libtmux.Session.target -> (unit, Libtmux.Error.t) result\n (** Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. *)\n\n val kill_window : t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result\n (** Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. *)\n\n val kill_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result\n (** Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. *)\n\n val select_window_at :\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result\n (** Operate on the session's current index at execution, not an old link\n incarnation. *)\n\n val unlink_window_at :\n ?allow_kill:bool ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Without [allow_kill], tmux rejects removal of the last link to a window.\n *)\n\n val link_window :\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. *)\n\n val move_window_at :\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Move the source session's current link at [from_index]. Destination\n collisions fail. *)\n\n val select_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result\n (** Make the pane active in its containing window. This does not open or\n attach a terminal client. *)\n\n val set_pane_title :\n t -> Libtmux.Pane.target -> title:string -> (unit, Libtmux.Error.t) result\n (** Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. *)\n\n val resize_pane :\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. *)\n\n val resize_window :\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. *)\n\n val select_layout :\n t ->\n Libtmux.Window.target ->\n Libtmux.Layout.t ->\n (unit, Libtmux.Error.t) result\n (** Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. *)\n\n val cycle_layout :\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] ->\n (unit, Libtmux.Error.t) result\n (** Select the next or previous tmux preset layout for this window. *)\n\n val move_pane :\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (unit, Libtmux.Error.t) result\n (** Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. *)\n\n val swap_panes :\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. *)\n\n val rotate_panes :\n t ->\n Libtmux.Window.target ->\n [ `Forward | `Backward ] ->\n (unit, Libtmux.Error.t) result\n (** Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. *)\n\n val zoom_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result\n (** Toggle the window's zoom state around this pane. *)\n\n val respawn_pane :\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Spawn.t ->\n (unit, Libtmux.Error.t) result\n (** Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. *)\n\n val clear_history : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result\n (** Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. *)\n\n (* END GENERATED OPERATIONS *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** Retire the generation and close owned control clients and descriptors.\n Reject new {!submit} and {!subscribe} calls as soon as closing starts.\n Concurrent calls await the same teardown result. Later calls retain a\n teardown failure instead of treating the closed flag as success. Each\n helper gets 200 ms of TERM grace, followed by KILL if needed and reaping.\n Other fibers can run during that wait. The grace is per helper; it does\n not bound scheduling, filesystem or uninterruptible kernel work. No signal\n targets the daemon. tmux's [exit-unattached] and [exit-empty] policies can\n end the daemon after its clients or sessions disappear. *)\nend","source":{"file":"eio/libtmux_eio.mli","line":127,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio","doc":{"summary":"An explicit generation-bound connection. Applications retain ownership of the endpoint choice and resource lifetime."},"slug":"libtmux_eio-client"},{"id":"Libtmux_eio.Client.await","publicId":"Libtmux_eio.Client.await","qualifiedName":"Libtmux_eio.Client.await","name":"await","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":200,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Cancellation propagates as Eio cancellation. Store the handle outside the\n cancelled fiber: the client drains written work independently, and the\n eventual result remains inspectable. "],"declarations":[{"kind":"function","text":"val await : 'a Operation.t -> ('a, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":200,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Cancellation propagates as Eio cancellation. Store the handle outside the cancelled fiber: the client drains written work independently, and the eventual result remains inspectable."},"signatures":[{"raw":"val await : 'a Operation.t -> ('a, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a Operation.t"}],"returns":"('a, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-await"},{"id":"Libtmux_eio.Client.break_pane","publicId":"Libtmux_eio.Client.break_pane","qualifiedName":"Libtmux_eio.Client.break_pane","name":"break_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":443,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. "],"declarations":[{"kind":"function","text":"val break_pane :\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":443,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Move the pane into a new window at an explicit session index. An occupied destination fails. The returned IDs describe the resulting context; the pane itself already existed."},"signatures":[{"raw":"val break_pane :\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-break_pane"},{"id":"Libtmux_eio.Client.capture","publicId":"Libtmux_eio.Client.capture","qualifiedName":"Libtmux_eio.Client.capture","name":"capture","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":209,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Acquire a complete immutable graph over an interval. Conflicting or\n disappearing entities fail capture; they do not become empty relations.\n The returned values remain readable after client closure. "],"declarations":[{"kind":"function","text":"val capture : t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":209,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Acquire a complete immutable graph over an interval. Conflicting or disappearing entities fail capture; they do not become empty relations. The returned values remain readable after client closure."},"signatures":[{"raw":"val capture : t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(Libtmux.Snapshot.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-capture"},{"id":"Libtmux_eio.Client.capture_environment","publicId":"Libtmux_eio.Client.capture_environment","qualifiedName":"Libtmux_eio.Client.capture_environment","name":"capture_environment","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":285,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n "],"declarations":[{"kind":"function","text":"val capture_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":285,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Acquire a bounded table through a read-only command process. Its response must identify the bound daemon while the original pidfd remains live. Unsupported external variable names fail decoding; they are not omitted."},"signatures":[{"raw":"val capture_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result","params":[{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"}],"returns":"(Libtmux.Environment.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-capture_environment"},{"id":"Libtmux_eio.Client.capture_hooks","publicId":"Libtmux_eio.Client.capture_hooks","qualifiedName":"Libtmux_eio.Client.capture_hooks","name":"capture_hooks","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":364,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. "],"declarations":[{"kind":"function","text":"val capture_hooks :\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":364,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Capture locally configured built-in hooks. Command values are tmux's printed representation, retained as data."},"signatures":[{"raw":"val capture_hooks :\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"}],"returns":"(Libtmux.Options.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-capture_hooks"},{"id":"Libtmux_eio.Client.capture_options","publicId":"Libtmux_eio.Client.capture_options","qualifiedName":"Libtmux_eio.Client.capture_options","name":"capture_options","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":315,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Libtmux.Error.Unsupported}. "],"declarations":[{"kind":"function","text":"val capture_options :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":315,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Acquire one bounded option table, excluding hooks. The default includes only local entries. Inherited table enumeration includes built-ins; inherited user options require `read_option` with their explicit name. Built-in descriptors cover every supported release from tmux 3.3a through 3.8; other versions return {!Libtmux.Error.Unsupported}."},"signatures":[{"raw":"val capture_options :\n ?include_inherited:bool ->\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"}],"returns":"(Libtmux.Options.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-capture_options"},{"id":"Libtmux_eio.Client.capture_text","publicId":"Libtmux_eio.Client.capture_text","qualifiedName":"Libtmux_eio.Client.capture_text","name":"capture_text","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":214,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Inclusive ordinary screen rows, using a bounded private file transfer.\n Qualified local scratch storage must be shared with the daemon. "],"declarations":[{"kind":"function","text":"val capture_text :\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int ->\n end_:int ->\n (Rendered.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":214,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Inclusive ordinary screen rows, using a bounded private file transfer. Qualified local scratch storage must be shared with the daemon."},"signatures":[{"raw":"val capture_text :\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int -> end_:int -> (Rendered.t, Libtmux.Error.t) result","params":[{"name":"scratch_dir","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"},{"name":"start","type":"int","keywordOnly":true},{"name":"end_","type":"int","keywordOnly":true}],"returns":"(Rendered.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-capture_text"},{"id":"Libtmux_eio.Client.cleanup","publicId":"Libtmux_eio.Client.cleanup","qualifiedName":"Libtmux_eio.Client.cleanup","name":"cleanup","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":145,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read the supplied report or the client's fresh default without I/O.\n {!Cleanup.inspect} remains available after close. "],"declarations":[{"kind":"function","text":"val cleanup : t -> Cleanup.t","source":{"file":"eio/libtmux_eio.mli","line":145,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Read the supplied report or the client's fresh default without I/O. {!Cleanup.inspect} remains available after close."},"signatures":[{"raw":"val cleanup : t -> Cleanup.t","params":[{"name":"arg1","type":"t"}],"returns":"Cleanup.t"}],"slug":"libtmux_eio-client-cleanup"},{"id":"Libtmux_eio.Client.clear_history","publicId":"Libtmux_eio.Client.clear_history","qualifiedName":"Libtmux_eio.Client.clear_history","name":"clear_history","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":584,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. "],"declarations":[{"kind":"function","text":"val clear_history : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":584,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Clear stored scrollback for this pane. The visible screen and running process remain; later captures cannot recover discarded history."},"signatures":[{"raw":"val clear_history :\n t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-clear_history"},{"id":"Libtmux_eio.Client.clear_option_array","publicId":"Libtmux_eio.Client.clear_option_array","qualifiedName":"Libtmux_eio.Client.clear_option_array","name":"clear_option_array","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":360,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a local empty array, masking inheritance. "],"declarations":[{"kind":"function","text":"val clear_option_array :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":360,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set a local empty array, masking inheritance."},"signatures":[{"raw":"val clear_option_array :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-clear_option_array"},{"id":"Libtmux_eio.Client.close","publicId":"Libtmux_eio.Client.close","qualifiedName":"Libtmux_eio.Client.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":590,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Retire the generation and close owned control clients and descriptors.\n Reject new {!submit} and {!subscribe} calls as soon as closing starts.\n Concurrent calls await the same teardown result. Later calls retain a\n teardown failure instead of treating the closed flag as success. Each\n helper gets 200 ms of TERM grace, followed by KILL if needed and reaping.\n Other fibers can run during that wait. The grace is per helper; it does\n not bound scheduling, filesystem or uninterruptible kernel work. No signal\n targets the daemon. tmux's [exit-unattached] and [exit-empty] policies can\n end the daemon after its clients or sessions disappear. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":590,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Retire the generation and close owned control clients and descriptors. Reject new {!submit} and {!subscribe} calls as soon as closing starts. Concurrent calls await the same teardown result. Later calls retain a teardown failure instead of treating the closed flag as success. Each helper gets 200 ms of TERM grace, followed by KILL if needed and reaping. Other fibers can run during that wait. The grace is per helper; it does not bound scheduling, filesystem or uninterruptible kernel work. No signal targets the daemon. tmux's `exit-unattached` and `exit-empty` policies can end the daemon after its clients or sessions disappear."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-close"},{"id":"Libtmux_eio.Client.connect","publicId":"Libtmux_eio.Client.connect","qualifiedName":"Libtmux_eio.Client.connect","name":"connect","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":130,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Attach to an existing local Linux daemon in the same PID namespace and\n shared filesystem. Requires pidfd support. Default exchange timeout: one\n second. All client calls belong to the connecting OCaml domain. Initial\n and auxiliary attachments suppress tmux's [update-environment] behavior.\n "],"declarations":[{"kind":"function","text":"val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:_ Eio.Process.mgr ->\n mono_clock:_ Eio.Time.Mono.t ->\n Libtmux.Endpoint.t ->\n (t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":130,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Attach to an existing local Linux daemon in the same PID namespace and shared filesystem. Requires pidfd support. Default exchange timeout: one second. All client calls belong to the connecting OCaml domain. Initial and auxiliary attachments suppress tmux's `update-environment` behavior."},"signatures":[{"raw":"val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr ->\n mono_clock:[> Eio.Time.Mono.ty ] Eio.Time.Mono.t ->\n Libtmux.Endpoint.t -> (t, Libtmux.Error.t) result","params":[{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"sw","type":"Eio.Switch.t","keywordOnly":true},{"name":"process_mgr","type":"[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr","keywordOnly":true},{"name":"mono_clock","type":"[> Eio.Time.Mono.ty ] Eio.Time.Mono.t","keywordOnly":true},{"name":"arg1","type":"Libtmux.Endpoint.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-connect"},{"id":"Libtmux_eio.Client.create_session","publicId":"Libtmux_eio.Client.create_session","qualifiedName":"Libtmux_eio.Client.create_session","name":"create_session","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":412,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Create a detached session on the bound daemon. Name collisions fail. "],"declarations":[{"kind":"function","text":"val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n name:string ->\n unit ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":412,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Create a detached session on the bound daemon. Name collisions fail."},"signatures":[{"raw":"val create_session :\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t -> name:string -> unit -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"window_name","type":"string","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg2","type":"unit"}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-create_session"},{"id":"Libtmux_eio.Client.create_window","publicId":"Libtmux_eio.Client.create_window","qualifiedName":"Libtmux_eio.Client.create_window","name":"create_window","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":423,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Create detached, rejecting an occupied explicit index. "],"declarations":[{"kind":"function","text":"val create_window :\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Session.target ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":423,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Create detached, rejecting an occupied explicit index."},"signatures":[{"raw":"val create_window :\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t -> Libtmux.Session.target -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-create_window"},{"id":"Libtmux_eio.Client.cycle_layout","publicId":"Libtmux_eio.Client.cycle_layout","qualifiedName":"Libtmux_eio.Client.cycle_layout","name":"cycle_layout","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":537,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Select the next or previous tmux preset layout for this window. "],"declarations":[{"kind":"function","text":"val cycle_layout :\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":537,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Select the next or previous tmux preset layout for this window."},"signatures":[{"raw":"val cycle_layout :\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"[ `Next | `Previous ]"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-cycle_layout"},{"id":"Libtmux_eio.Client.kill_pane","publicId":"Libtmux_eio.Client.kill_pane","qualifiedName":"Libtmux_eio.Client.kill_pane","name":"kill_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":463,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. "],"declarations":[{"kind":"function","text":"val kill_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":463,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Destroy the target pane and its running process. tmux removes a window that becomes empty and may remove its now-empty sessions."},"signatures":[{"raw":"val kill_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-kill_pane"},{"id":"Libtmux_eio.Client.kill_session","publicId":"Libtmux_eio.Client.kill_session","qualifiedName":"Libtmux_eio.Client.kill_session","name":"kill_session","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":454,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. "],"declarations":[{"kind":"function","text":"val kill_session :\n t -> Libtmux.Session.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":454,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Remove the session and its window links. Windows with no other links and their panes are destroyed. Removing the last session may stop tmux."},"signatures":[{"raw":"val kill_session :\n t -> Libtmux.Session.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-kill_session"},{"id":"Libtmux_eio.Client.kill_window","publicId":"Libtmux_eio.Client.kill_window","qualifiedName":"Libtmux_eio.Client.kill_window","name":"kill_window","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":459,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. "],"declarations":[{"kind":"function","text":"val kill_window : t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":459,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Destroy the window, all its session links and every contained pane. This acts on the global window, not a single contextual link."},"signatures":[{"raw":"val kill_window :\n t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-kill_window"},{"id":"Libtmux_eio.Client.link_window","publicId":"Libtmux_eio.Client.link_window","qualifiedName":"Libtmux_eio.Client.link_window","name":"link_window","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":481,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. "],"declarations":[{"kind":"function","text":"val link_window :\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":481,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Add a session-specific link to the global window at `index`, rejecting an occupied index. The source window and its panes stay shared."},"signatures":[{"raw":"val link_window :\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-link_window"},{"id":"Libtmux_eio.Client.move_pane","publicId":"Libtmux_eio.Client.move_pane","qualifiedName":"Libtmux_eio.Client.move_pane","name":"move_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":544,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. "],"declarations":[{"kind":"function","text":"val move_pane :\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":544,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Move the source pane beside another pane, optionally setting the split size. Both targets must belong to the same bound generation. An emptied source window is removed by tmux."},"signatures":[{"raw":"val move_pane :\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction -> (unit, Libtmux.Error.t) result","params":[{"name":"size","type":"Libtmux.Geometry.size","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"beside","type":"Libtmux.Pane.target","keywordOnly":true},{"name":"direction","type":"Libtmux.Geometry.direction","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-move_pane"},{"id":"Libtmux_eio.Client.move_window_at","publicId":"Libtmux_eio.Client.move_window_at","qualifiedName":"Libtmux_eio.Client.move_window_at","name":"move_window_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":490,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Move the source session's current link at [from_index]. Destination\n collisions fail. "],"declarations":[{"kind":"function","text":"val move_window_at :\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":490,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Move the source session's current link at `from_index`. Destination collisions fail."},"signatures":[{"raw":"val move_window_at :\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"from_index","type":"int","keywordOnly":true},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-move_window_at"},{"id":"Libtmux_eio.Client.read_hook","publicId":"Libtmux_eio.Client.read_hook","qualifiedName":"Libtmux_eio.Client.read_hook","name":"read_hook","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":369,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. "],"declarations":[{"kind":"function","text":"val read_hook :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":369,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Read an exact hook name. Inheritance is included by default; `None` means no entry under the selected policy. Missing targets remain errors."},"signatures":[{"raw":"val read_hook :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string -> (Libtmux.Options.value option, Libtmux.Error.t) result","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(Libtmux.Options.value option, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-read_hook"},{"id":"Libtmux_eio.Client.read_option","publicId":"Libtmux_eio.Client.read_option","qualifiedName":"Libtmux_eio.Client.read_option","name":"read_option","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":326,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. "],"declarations":[{"kind":"function","text":"val read_option :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":326,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Read one exact name, including user-option inheritance. `None` means no entry under the selected policy. An invalid target remains an error. The default follows inheritance; this does not identify the defining parent scope."},"signatures":[{"raw":"val read_option :\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string -> (Libtmux.Options.value option, Libtmux.Error.t) result","params":[{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(Libtmux.Options.value option, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-read_option"},{"id":"Libtmux_eio.Client.refresh_client_at","publicId":"Libtmux_eio.Client.refresh_client_at","qualifiedName":"Libtmux_eio.Client.refresh_client_at","name":"refresh_client_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":251,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request a redraw; no terminal-rendering completion is implied. "],"declarations":[{"kind":"function","text":"val refresh_client_at :\n ?status_only:bool ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":251,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Request a redraw; no terminal-rendering completion is implied."},"signatures":[{"raw":"val refresh_client_at :\n ?status_only:bool ->\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result","params":[{"name":"status_only","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-refresh_client_at"},{"id":"Libtmux_eio.Client.remove_environment","publicId":"Libtmux_eio.Client.remove_environment","qualifiedName":"Libtmux_eio.Client.remove_environment","name":"remove_environment","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":311,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Store a removal marker, excluding the variable from future panes. "],"declarations":[{"kind":"function","text":"val remove_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":311,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Store a removal marker, excluding the variable from future panes."},"signatures":[{"raw":"val remove_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-remove_environment"},{"id":"Libtmux_eio.Client.remove_hook","publicId":"Libtmux_eio.Client.remove_hook","qualifiedName":"Libtmux_eio.Client.remove_hook","name":"remove_hook","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":394,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. "],"declarations":[{"kind":"function","text":"val remove_hook :\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":394,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Remove the local hook or one indexed array entry. An inherited hook may become effective again; this does not stop work it already started."},"signatures":[{"raw":"val remove_hook :\n ?index:int ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-remove_hook"},{"id":"Libtmux_eio.Client.rename_session","publicId":"Libtmux_eio.Client.rename_session","qualifiedName":"Libtmux_eio.Client.rename_session","name":"rename_session","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":230,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. "],"declarations":[{"kind":"function","text":"val rename_session :\n t -> Libtmux.Session.target -> name:string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":230,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set the session name, rejecting a conflicting existing name. Bound IDs remain usable; existing snapshots retain their captured names."},"signatures":[{"raw":"val rename_session :\n t ->\n Libtmux.Session.target -> name:string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-rename_session"},{"id":"Libtmux_eio.Client.rename_window","publicId":"Libtmux_eio.Client.rename_window","qualifiedName":"Libtmux_eio.Client.rename_window","name":"rename_window","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":225,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. "],"declarations":[{"kind":"function","text":"val rename_window :\n t -> Libtmux.Window.target -> name:string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":225,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set the global window name. Every session link observes the new name on its next capture; existing snapshots retain the old value."},"signatures":[{"raw":"val rename_window :\n t -> Libtmux.Window.target -> name:string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-rename_window"},{"id":"Libtmux_eio.Client.request_detach_client_at","publicId":"Libtmux_eio.Client.request_detach_client_at","qualifiedName":"Libtmux_eio.Client.request_detach_client_at","name":"request_detach_client_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":245,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. "],"declarations":[{"kind":"function","text":"val request_detach_client_at :\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":245,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Request detachment of the client currently bearing this name. Success confirms request processing, not peer exit. Detaching the library's own primary lane can lose the response and retire its generation."},"signatures":[{"raw":"val request_detach_client_at :\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-request_detach_client_at"},{"id":"Libtmux_eio.Client.resize_control_client_at","publicId":"Libtmux_eio.Client.resize_control_client_at","qualifiedName":"Libtmux_eio.Client.resize_control_client_at","name":"resize_control_client_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":258,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a control client's reported size. tmux rejects terminal clients. "],"declarations":[{"kind":"function","text":"val resize_control_client_at :\n t ->\n Libtmux.Client_name.t ->\n width:int ->\n height:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":258,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set a control client's reported size. tmux rejects terminal clients."},"signatures":[{"raw":"val resize_control_client_at :\n t ->\n Libtmux.Client_name.t ->\n width:int -> height:int -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"},{"name":"width","type":"int","keywordOnly":true},{"name":"height","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-resize_control_client_at"},{"id":"Libtmux_eio.Client.resize_pane","publicId":"Libtmux_eio.Client.resize_pane","qualifiedName":"Libtmux_eio.Client.resize_pane","name":"resize_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":509,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. "],"declarations":[{"kind":"function","text":"val resize_pane :\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":509,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. tmux can constrain the result to the available layout. Capture again to observe the actual dimensions."},"signatures":[{"raw":"val resize_pane :\n ?width:int ->\n ?height:int -> t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-resize_pane"},{"id":"Libtmux_eio.Client.resize_window","publicId":"Libtmux_eio.Client.resize_window","qualifiedName":"Libtmux_eio.Client.resize_window","name":"resize_window","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":519,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. "],"declarations":[{"kind":"function","text":"val resize_window :\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":519,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. Client-size and window-size policies can affect subsequent sizing."},"signatures":[{"raw":"val resize_window :\n ?width:int ->\n ?height:int -> t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result","params":[{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-resize_window"},{"id":"Libtmux_eio.Client.respawn_pane","publicId":"Libtmux_eio.Client.respawn_pane","qualifiedName":"Libtmux_eio.Client.respawn_pane","name":"respawn_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":574,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. "],"declarations":[{"kind":"function","text":"val respawn_pane :\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Spawn.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":574,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Start the supplied command in the existing pane. A running process causes failure unless `kill_running:true` explicitly replaces it. The pane ID remains unchanged."},"signatures":[{"raw":"val respawn_pane :\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target -> Libtmux.Spawn.t -> (unit, Libtmux.Error.t) result","params":[{"name":"kill_running","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Spawn.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-respawn_pane"},{"id":"Libtmux_eio.Client.rotate_panes","publicId":"Libtmux_eio.Client.rotate_panes","qualifiedName":"Libtmux_eio.Client.rotate_panes","name":"rotate_panes","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":563,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. "],"declarations":[{"kind":"function","text":"val rotate_panes :\n t ->\n Libtmux.Window.target ->\n [ `Forward | `Backward ] ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":563,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Rotate pane positions in the selected direction. Pane identities and running processes remain attached to their panes."},"signatures":[{"raw":"val rotate_panes :\n t ->\n Libtmux.Window.target ->\n [ `Backward | `Forward ] -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"[ `Backward | `Forward ]"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-rotate_panes"},{"id":"Libtmux_eio.Client.run","publicId":"Libtmux_eio.Client.run","qualifiedName":"Libtmux_eio.Client.run","name":"run","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":205,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Submit and await an explicit command. Retain a separate submitted handle\n when the outcome must remain inspectable after caller cancellation. "],"declarations":[{"kind":"function","text":"val run : t -> 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":205,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Submit and await an explicit command. Retain a separate submitted handle when the outcome must remain inspectable after caller cancellation."},"signatures":[{"raw":"val run : t -> 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"'a Libtmux.Command.t"}],"returns":"('a, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-run"},{"id":"Libtmux_eio.Client.run_hook","publicId":"Libtmux_eio.Client.run_hook","qualifiedName":"Libtmux_eio.Client.run_hook","name":"run_hook","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":403,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. "],"declarations":[{"kind":"function","text":"val run_hook :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":403,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Run the effective hook in an explicit session, window or pane context. A successful result follows completion of its synchronous command queue. Background work started by a hook has its own lifetime. A later hook failure returns an uncertain outcome; preceding effects remain. Named `@` hooks return `Unsupported` because tmux can hide their parse failures in the server log. Configuration and inspection remain available."},"signatures":[{"raw":"val run_hook :\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-run_hook"},{"id":"Libtmux_eio.Client.select_layout","publicId":"Libtmux_eio.Client.select_layout","qualifiedName":"Libtmux_eio.Client.select_layout","name":"select_layout","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":529,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. "],"declarations":[{"kind":"function","text":"val select_layout :\n t ->\n Libtmux.Window.target ->\n Libtmux.Layout.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":529,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Apply a preset or validated custom layout to the window. Pane geometry follows tmux layout rules; capture again to observe the result."},"signatures":[{"raw":"val select_layout :\n t ->\n Libtmux.Window.target -> Libtmux.Layout.t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"Libtmux.Layout.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-select_layout"},{"id":"Libtmux_eio.Client.select_pane","publicId":"Libtmux_eio.Client.select_pane","qualifiedName":"Libtmux_eio.Client.select_pane","name":"select_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":500,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Make the pane active in its containing window. This does not open or\n attach a terminal client. "],"declarations":[{"kind":"function","text":"val select_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":500,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Make the pane active in its containing window. This does not open or attach a terminal client."},"signatures":[{"raw":"val select_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-select_pane"},{"id":"Libtmux_eio.Client.select_window_at","publicId":"Libtmux_eio.Client.select_window_at","qualifiedName":"Libtmux_eio.Client.select_window_at","name":"select_window_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":467,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Operate on the session's current index at execution, not an old link\n incarnation. "],"declarations":[{"kind":"function","text":"val select_window_at :\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":467,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Operate on the session's current index at execution, not an old link incarnation."},"signatures":[{"raw":"val select_window_at :\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-select_window_at"},{"id":"Libtmux_eio.Client.send_keys","publicId":"Libtmux_eio.Client.send_keys","qualifiedName":"Libtmux_eio.Client.send_keys","name":"send_keys","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":270,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. "],"declarations":[{"kind":"function","text":"val send_keys :\n t ->\n Libtmux.Pane.target ->\n Libtmux.Key.t list ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":270,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Send named tmux keys in order, without an implicit Enter. Use {!send_text} for literal bytes rather than key interpretation."},"signatures":[{"raw":"val send_keys :\n t ->\n Libtmux.Pane.target -> Libtmux.Key.t list -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Key.t list"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-send_keys"},{"id":"Libtmux_eio.Client.send_text","publicId":"Libtmux_eio.Client.send_text","qualifiedName":"Libtmux_eio.Client.send_text","name":"send_text","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":266,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Literal bytes, without an implicit Enter. NUL is rejected at admission. "],"declarations":[{"kind":"function","text":"val send_text :\n t -> Libtmux.Pane.target -> text:string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":266,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Literal bytes, without an implicit Enter. NUL is rejected at admission."},"signatures":[{"raw":"val send_text :\n t -> Libtmux.Pane.target -> text:string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-send_text"},{"id":"Libtmux_eio.Client.set_environment","publicId":"Libtmux_eio.Client.set_environment","qualifiedName":"Libtmux_eio.Client.set_environment","name":"set_environment","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":295,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. "],"declarations":[{"kind":"function","text":"val set_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":295,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set a local environment value for future pane processes. `hidden` defaults to false; hidden values remain internal to tmux. Existing processes keep their environment."},"signatures":[{"raw":"val set_environment :\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-set_environment"},{"id":"Libtmux_eio.Client.set_hook","publicId":"Libtmux_eio.Client.set_hook","qualifiedName":"Libtmux_eio.Client.set_hook","name":"set_hook","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":378,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Libtmux.Options.Text] value; bulk hook capture includes built-ins.\n Commands may cause arbitrary tmux effects when triggered. Hooks that print\n output are outside the supported control transport contract. "],"declarations":[{"kind":"function","text":"val set_hook :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Hook.command list ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":378,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set a hook to a nonempty command list. Without an index, replace the whole hook array, or fill the lowest free index when appending. An explicit `@name` custom hook stores command text as a user option; it requires complete replacement and has no array indexes. `read_hook` returns its `Libtmux.Options.Text` value; bulk hook capture includes built-ins. Commands may cause arbitrary tmux effects when triggered. Hooks that print output are outside the supported control transport contract."},"signatures":[{"raw":"val set_hook :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string -> Libtmux.Hook.command list -> (unit, Libtmux.Error.t) result","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"Libtmux.Hook.command list"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-set_hook"},{"id":"Libtmux_eio.Client.set_option","publicId":"Libtmux_eio.Client.set_option","qualifiedName":"Libtmux_eio.Client.set_option","name":"set_option","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":337,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. "],"declarations":[{"kind":"function","text":"val set_option :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Options.scalar ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":337,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Validate the scope and scalar kind before admission. Array values require an index, or `append:true`. Without an index, tmux splits appended text using the option's separator and fills the lowest unused indexes. Text is literal; tmux format expansion is disabled. Hooks use a separate operation."},"signatures":[{"raw":"val set_option :\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string -> Libtmux.Options.scalar -> (unit, Libtmux.Error.t) result","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"Libtmux.Options.scalar"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-set_option"},{"id":"Libtmux_eio.Client.set_pane_title","publicId":"Libtmux_eio.Client.set_pane_title","qualifiedName":"Libtmux_eio.Client.set_pane_title","name":"set_pane_title","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":504,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. "],"declarations":[{"kind":"function","text":"val set_pane_title :\n t -> Libtmux.Pane.target -> title:string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":504,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Set the pane title as literal text, without tmux format expansion. A running terminal application can subsequently replace the title."},"signatures":[{"raw":"val set_pane_title :\n t -> Libtmux.Pane.target -> title:string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"title","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-set_pane_title"},{"id":"Libtmux_eio.Client.signal","publicId":"Libtmux_eio.Client.signal","qualifiedName":"Libtmux_eio.Client.signal","name":"signal","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":281,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. "],"declarations":[{"kind":"function","text":"val signal : t -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":281,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Signal a named tmux semaphore, releasing a waiter or retaining the signal for a later {!wait_for}. This does not signal an OS process."},"signatures":[{"raw":"val signal : t -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-signal"},{"id":"Libtmux_eio.Client.source","publicId":"Libtmux_eio.Client.source","qualifiedName":"Libtmux_eio.Client.source","name":"source","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":149,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read the retained endpoint, daemon PID and connection generation without\n I/O. "],"declarations":[{"kind":"function","text":"val source : t -> Libtmux.Source.t","source":{"file":"eio/libtmux_eio.mli","line":149,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Read the retained endpoint, daemon PID and connection generation without I/O."},"signatures":[{"raw":"val source : t -> Libtmux.Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Libtmux.Source.t"}],"slug":"libtmux_eio-client-source"},{"id":"Libtmux_eio.Client.split_pane","publicId":"Libtmux_eio.Client.split_pane","qualifiedName":"Libtmux_eio.Client.split_pane","name":"split_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":432,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. "],"declarations":[{"kind":"function","text":"val split_pane :\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":432,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Create a detached pane beside the target and return the IDs reported by tmux. Omitted `size` lets tmux choose the split; tmux rejects splits when no space remains."},"signatures":[{"raw":"val split_pane :\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"size","type":"Libtmux.Geometry.size","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"direction","type":"Libtmux.Geometry.direction","keywordOnly":true}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-split_pane"},{"id":"Libtmux_eio.Client.submit","publicId":"Libtmux_eio.Client.submit","qualifiedName":"Libtmux_eio.Client.submit","name":"submit","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":195,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Validate and reserve bounded capacity without I/O. Return\n [Error Libtmux.Error.Closed] once {!close} starts. "],"declarations":[{"kind":"function","text":"val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":195,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Validate and reserve bounded capacity without I/O. Return `Error Libtmux.Error.Closed` once {!close} starts."},"signatures":[{"raw":"val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"'a Libtmux.Command.t"}],"returns":"('a Operation.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-submit"},{"id":"Libtmux_eio.Client.subscribe","publicId":"Libtmux_eio.Client.subscribe","qualifiedName":"Libtmux_eio.Client.subscribe","name":"subscribe","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":156,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Acquire verified coverage through one shared lane per session; choose the\n least observed session ID unless supplied. A client-owned reader delivers\n future bytes without application callbacks. Default queue bounds are 1\n MiB/1024 events; max 16 subscribers and eight total client lanes, sharing\n the 32 MiB payload budget. Queue capacities remain reserved while empty;\n captures and reads need additional scratch space and can return\n {!Libtmux.Error.Capacity} below the subscriber-count limit. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity}shared\n capacity guide} for combined reservations and process slots.\n\n Overflow or coverage/layout changes emit Gap then End. Data starts after\n admission's marker, with no snapshot/history barrier, automatic reconnect\n or silent cursor reuse. New admission returns [Error Libtmux.Error.Closed]\n once {!close} starts. "],"declarations":[{"kind":"function","text":"val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t ->\n Libtmux.Pane.t ->\n (Subscription.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":156,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Acquire verified coverage through one shared lane per session; choose the least observed session ID unless supplied. A client-owned reader delivers future bytes without application callbacks. Default queue bounds are 1 MiB/1024 events; max 16 subscribers and eight total client lanes, sharing the 32 MiB payload budget. Queue capacities remain reserved while empty; captures and reads need additional scratch space and can return {!Libtmux.Error.Capacity} below the subscriber-count limit. See the [shared capacity guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity) for combined reservations and process slots.","body":"Overflow or coverage/layout changes emit Gap then End. Data starts after admission's marker, with no snapshot/history barrier, automatic reconnect or silent cursor reuse. New admission returns `Error Libtmux.Error.Closed` once {!close} starts.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet watch_output binary blocking (initial : Created.t) _spawn =\n Eio_main.run @@ fun env ->\n Eio.Switch.run @@ fun sw ->\n let module Client = Libtmux_eio.Client in\n let module Subscription = Libtmux_eio.Subscription in\n let client =\n get\n (Client.connect ~sw ~binary\n ~process_mgr:(Eio.Stdenv.process_mgr env)\n ~mono_clock:(Eio.Stdenv.mono_clock env)\n (Source.endpoint (Libtmux_unix.Client.source blocking)))\n in\n Fun.protect\n ~finally:(fun () ->\n Eio.Cancel.protect (fun () -> get (Client.close client)))\n (fun () ->\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n let subscription =\n get (Client.subscribe ~capacity_bytes:4096 client pane)\n in\n Fun.protect\n ~finally:(fun () ->\n Eio.Cancel.protect (fun () -> get (Subscription.close subscription)))\n (fun () ->\n let cursor, () =\n Eio.Fiber.pair\n (fun () ->\n match\n Subscription.wait_for_bytes ~timeout:0.5 subscription\n ~text:\"changed\"\n with\n | Ok cursor -> cursor\n | Error (Output.Failure error) ->\n failwith (Format.asprintf \"%a\" Error.pp error)\n | Error (Output.Ended reason) ->\n failwith (Format.asprintf \"%a\" Output.reason_pp reason))\n (fun () ->\n get (Client.send_text client (Pane.target pane) ~text:\"changed\");\n get (Client.send_keys client (Pane.target pane) [ Key.Enter ]))\n in\n assert (cursor.offset >= 7L);\n print_endline \"observed: changed\"))\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary (watch_output binary)\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_watch.ml","intro":"Observe future output with Eio. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_watch.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"observed: changed\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t -> Libtmux.Pane.t -> (Subscription.t, Libtmux.Error.t) result","params":[{"name":"session","type":"Libtmux.Session.target","optional":true,"keywordOnly":true},{"name":"capacity_bytes","type":"int","optional":true,"keywordOnly":true},{"name":"capacity_events","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"}],"returns":"(Subscription.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-subscribe"},{"id":"Libtmux_eio.Client.swap_panes","publicId":"Libtmux_eio.Client.swap_panes","qualifiedName":"Libtmux_eio.Client.swap_panes","name":"swap_panes","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":555,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. "],"declarations":[{"kind":"function","text":"val swap_panes :\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":555,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Exchange pane positions without exchanging their identities or running processes. Both targets must belong to the same bound generation."},"signatures":[{"raw":"val swap_panes :\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-swap_panes"},{"id":"Libtmux_eio.Client.switch_client_at","publicId":"Libtmux_eio.Client.switch_client_at","qualifiedName":"Libtmux_eio.Client.switch_client_at","name":"switch_client_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":235,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. "],"declarations":[{"kind":"function","text":"val switch_client_at :\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":235,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Switch the client currently bearing this name to the bound session. Environment updates are disabled by default. This can move either a terminal client or a control client; it does not open a new terminal."},"signatures":[{"raw":"val switch_client_at :\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target -> (unit, Libtmux.Error.t) result","params":[{"name":"update_environment","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-switch_client_at"},{"id":"Libtmux_eio.Client.t","publicId":"Libtmux_eio.Client.t","qualifiedName":"Libtmux_eio.Client.t","name":"t","kind":"typealias","package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":128,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"eio/libtmux_eio.mli","line":128,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_eio-client-t"},{"id":"Libtmux_eio.Client.unlink_window_at","publicId":"Libtmux_eio.Client.unlink_window_at","qualifiedName":"Libtmux_eio.Client.unlink_window_at","name":"unlink_window_at","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":472,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Without [allow_kill], tmux rejects removal of the last link to a window.\n "],"declarations":[{"kind":"function","text":"val unlink_window_at :\n ?allow_kill:bool ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":472,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Without `allow_kill`, tmux rejects removal of the last link to a window."},"signatures":[{"raw":"val unlink_window_at :\n ?allow_kill:bool ->\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"allow_kill","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-unlink_window_at"},{"id":"Libtmux_eio.Client.unset_environment","publicId":"Libtmux_eio.Client.unset_environment","qualifiedName":"Libtmux_eio.Client.unset_environment","name":"unset_environment","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":306,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove the local entry, allowing a global value to apply to future panes.\n "],"declarations":[{"kind":"function","text":"val unset_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":306,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Remove the local entry, allowing a global value to apply to future panes."},"signatures":[{"raw":"val unset_environment :\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-unset_environment"},{"id":"Libtmux_eio.Client.unset_option","publicId":"Libtmux_eio.Client.unset_option","qualifiedName":"Libtmux_eio.Client.unset_option","name":"unset_option","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":351,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. "],"declarations":[{"kind":"function","text":"val unset_option :\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":351,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Remove a local override or one array element. Global built-ins reset to their tmux defaults; this does not recursively unset child overrides."},"signatures":[{"raw":"val unset_option :\n ?index:int ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-unset_option"},{"id":"Libtmux_eio.Client.version","publicId":"Libtmux_eio.Client.version","qualifiedName":"Libtmux_eio.Client.version","name":"version","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":153,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read the bound daemon's observed version without I/O. "],"declarations":[{"kind":"function","text":"val version : t -> string","source":{"file":"eio/libtmux_eio.mli","line":153,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Read the bound daemon's observed version without I/O."},"signatures":[{"raw":"val version : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux_eio-client-version"},{"id":"Libtmux_eio.Client.wait_for","publicId":"Libtmux_eio.Client.wait_for","qualifiedName":"Libtmux_eio.Client.wait_for","name":"wait_for","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":278,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Wait on a named tmux semaphore using a dedicated bound lane. "],"declarations":[{"kind":"function","text":"val wait_for : t -> string -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":278,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Wait on a named tmux semaphore using a dedicated bound lane."},"signatures":[{"raw":"val wait_for : t -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-wait_for"},{"id":"Libtmux_eio.Client.wait_for_text","publicId":"Libtmux_eio.Client.wait_for_text","qualifiedName":"Libtmux_eio.Client.wait_for_text","name":"wait_for_text","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":178,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Subscribe and capture the screen immediately, then recapture on output.\n Membership/overflow gaps establish fresh coverage in the same binding.\n Maximum pattern: 64 KiB. Return captured rendered text containing it;\n transient text may be missed. Deadlines are checked between bounded\n acquisitions, whose I/O retains the client exchange timeout. Cancellation\n propagates and releases the subscription. A cleanup failure cannot replace\n an earlier error or cancellation; inspect {!cleanup} for secondary\n failures. Otherwise cleanup failure prevents success or renewed coverage.\n No history/barrier guarantee. "],"declarations":[{"kind":"function","text":"val wait_for_text :\n ?timeout:float ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n text:string ->\n (Rendered.t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":178,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Subscribe and capture the screen immediately, then recapture on output. Membership/overflow gaps establish fresh coverage in the same binding. Maximum pattern: 64 KiB. Return captured rendered text containing it; transient text may be missed. Deadlines are checked between bounded acquisitions, whose I/O retains the client exchange timeout. Cancellation propagates and releases the subscription. A cleanup failure cannot replace an earlier error or cancellation; inspect {!cleanup} for secondary failures. Otherwise cleanup failure prevents success or renewed coverage. No history/barrier guarantee."},"signatures":[{"raw":"val wait_for_text :\n ?timeout:float ->\n ?scratch_dir:string ->\n t -> Libtmux.Pane.t -> text:string -> (Rendered.t, Libtmux.Error.t) result","params":[{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"scratch_dir","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(Rendered.t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-wait_for_text"},{"id":"Libtmux_eio.Client.zoom_pane","publicId":"Libtmux_eio.Client.zoom_pane","qualifiedName":"Libtmux_eio.Client.zoom_pane","name":"zoom_pane","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":571,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Toggle the window's zoom state around this pane. "],"declarations":[{"kind":"function","text":"val zoom_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":571,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Client","doc":{"summary":"Toggle the window's zoom state around this pane."},"signatures":[{"raw":"val zoom_pane : t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-client-zoom_pane"},{"id":"Libtmux_eio.Operation","publicId":"Libtmux_eio.Operation","qualifiedName":"Libtmux_eio.Operation","name":"Operation","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":55,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" A retained admitted command. A cancelled waiter does not erase its eventual\n success, failure or uncertainty. "],"declarations":[{"kind":"module","text":"module Operation : sig\n type 'a t\n\n type cleanup_receipt = {\n cause : Libtmux.Error.t;\n owned_buffers : string list;\n created : Libtmux.Created.t list;\n }\n (** [created] retains IDs reported before a later hook or completion failure.\n It does not prove those resources still exist or authorize retry. When the\n daemon watcher retires an in-flight operation, [cause] retains\n {!Libtmux.Error.Disconnected}. Idle-reader failures also retain their\n library cause instead of becoming an explicit client-close reason. *)\n\n type 'a state =\n | Queued\n | Not_started\n | Written\n | Acknowledged\n | Finished of ('a, Libtmux.Error.t) result\n | Outcome_unknown of cleanup_receipt\n\n val id : 'a t -> string\n\n val inspect : 'a t -> ('a state, Libtmux.Error.t) result\n (** Read without I/O, including after client closure. Owning domain only. *)\n\n val cancel : 'a t -> (unit, Libtmux.Error.t) result\n (** Remove unsent work. A written request remains owned and drained by the\n client. *)\n\n val await_stage :\n 'a t -> [ `Written | `Acknowledged ] -> ('a state, Libtmux.Error.t) result\n (** Wait for the named stage or a terminal state. Acknowledgement does not\n establish completion. Cancelling this observer leaves the operation alone.\n *)\nend","source":{"file":"eio/libtmux_eio.mli","line":55,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio","doc":{"summary":"A retained admitted command. A cancelled waiter does not erase its eventual success, failure or uncertainty."},"slug":"libtmux_eio-operation"},{"id":"Libtmux_eio.Operation.await_stage","publicId":"Libtmux_eio.Operation.await_stage","qualifiedName":"Libtmux_eio.Operation.await_stage","name":"await_stage","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":86,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Wait for the named stage or a terminal state. Acknowledgement does not\n establish completion. Cancelling this observer leaves the operation alone.\n "],"declarations":[{"kind":"function","text":"val await_stage :\n 'a t -> [ `Written | `Acknowledged ] -> ('a state, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":86,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation","doc":{"summary":"Wait for the named stage or a terminal state. Acknowledgement does not establish completion. Cancelling this observer leaves the operation alone."},"signatures":[{"raw":"val await_stage :\n 'a t -> [ `Acknowledged | `Written ] -> ('a state, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a t"},{"name":"arg2","type":"[ `Acknowledged | `Written ]"}],"returns":"('a state, Libtmux.Error.t) result"}],"slug":"libtmux_eio-operation-await_stage"},{"id":"Libtmux_eio.Operation.cancel","publicId":"Libtmux_eio.Operation.cancel","qualifiedName":"Libtmux_eio.Operation.cancel","name":"cancel","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":82,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove unsent work. A written request remains owned and drained by the\n client. "],"declarations":[{"kind":"function","text":"val cancel : 'a t -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":82,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation","doc":{"summary":"Remove unsent work. A written request remains owned and drained by the client."},"signatures":[{"raw":"val cancel : 'a t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-operation-cancel"},{"id":"Libtmux_eio.Operation.cleanup_receipt","publicId":"Libtmux_eio.Operation.cleanup_receipt","qualifiedName":"Libtmux_eio.Operation.cleanup_receipt","name":"cleanup_receipt","kind":"struct","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":58,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" [created] retains IDs reported before a later hook or completion failure.\n It does not prove those resources still exist or authorize retry. When the\n daemon watcher retires an in-flight operation, [cause] retains\n {!Libtmux.Error.Disconnected}. Idle-reader failures also retain their\n library cause instead of becoming an explicit client-close reason. "],"declarations":[{"kind":"struct","text":"type cleanup_receipt = {\n cause : Libtmux.Error.t;\n owned_buffers : string list;\n created : Libtmux.Created.t list;\n }","source":{"file":"eio/libtmux_eio.mli","line":58,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation","doc":{"summary":"`created` retains IDs reported before a later hook or completion failure. It does not prove those resources still exist or authorize retry. When the daemon watcher retires an in-flight operation, `cause` retains {!Libtmux.Error.Disconnected}. Idle-reader failures also retain their library cause instead of becoming an explicit client-close reason."},"signatures":[{"raw":"type cleanup_receipt =\n {\n cause: Libtmux.Error.t ;\n owned_buffers: string list ;\n created: Libtmux.Created.t list }","params":[]}],"slug":"libtmux_eio-operation-cleanup_receipt"},{"id":"Libtmux_eio.Operation.cleanup_receipt.cause","publicId":"Libtmux_eio.Operation.cleanup_receipt.cause","name":"cause","kind":"attribute","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":59,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cause : Libtmux.Error.t;","source":{"file":"eio/libtmux_eio.mli","line":59,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation.cleanup_receipt","type":"Libtmux.Error.t","qualifiedName":"Libtmux_eio.Operation.cause","slug":"libtmux_eio-operation-cleanup_receipt-cause"},{"id":"Libtmux_eio.Operation.cleanup_receipt.created","publicId":"Libtmux_eio.Operation.cleanup_receipt.created","name":"created","kind":"attribute","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":61,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"created : Libtmux.Created.t list;","source":{"file":"eio/libtmux_eio.mli","line":61,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation.cleanup_receipt","type":"Libtmux.Created.t list","qualifiedName":"Libtmux_eio.Operation.created","slug":"libtmux_eio-operation-cleanup_receipt-created"},{"id":"Libtmux_eio.Operation.cleanup_receipt.owned_buffers","publicId":"Libtmux_eio.Operation.cleanup_receipt.owned_buffers","name":"owned_buffers","kind":"attribute","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":60,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"owned_buffers : string list;","source":{"file":"eio/libtmux_eio.mli","line":60,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation.cleanup_receipt","type":"string list","qualifiedName":"Libtmux_eio.Operation.owned_buffers","slug":"libtmux_eio-operation-cleanup_receipt-owned_buffers"},{"id":"Libtmux_eio.Operation.id","publicId":"Libtmux_eio.Operation.id","qualifiedName":"Libtmux_eio.Operation.id","name":"id","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":77,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : 'a t -> string","source":{"file":"eio/libtmux_eio.mli","line":77,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation","signatures":[{"raw":"val id : 'a t -> string","params":[{"name":"arg1","type":"'a t"}],"returns":"string"}],"slug":"libtmux_eio-operation-id"},{"id":"Libtmux_eio.Operation.inspect","publicId":"Libtmux_eio.Operation.inspect","qualifiedName":"Libtmux_eio.Operation.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":79,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read without I/O, including after client closure. Owning domain only. "],"declarations":[{"kind":"function","text":"val inspect : 'a t -> ('a state, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":79,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation","doc":{"summary":"Read without I/O, including after client closure. Owning domain only."},"signatures":[{"raw":"val inspect : 'a t -> ('a state, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a t"}],"returns":"('a state, Libtmux.Error.t) result"}],"slug":"libtmux_eio-operation-inspect"},{"id":"Libtmux_eio.Operation.state","publicId":"Libtmux_eio.Operation.state","qualifiedName":"Libtmux_eio.Operation.state","name":"state","kind":"enum","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":69,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type 'a state =\n | Queued\n | Not_started\n | Written\n | Acknowledged\n | Finished of ('a, Libtmux.Error.t) result\n | Outcome_unknown of cleanup_receipt","source":{"file":"eio/libtmux_eio.mli","line":69,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation","signatures":[{"raw":"type 'a state =\n | Queued \n | Not_started \n | Written \n | Acknowledged \n | Finished of ('a, Libtmux.Error.t) result \n | Outcome_unknown of cleanup_receipt ","params":[]}],"slug":"libtmux_eio-operation-state"},{"id":"Libtmux_eio.Operation.state.Acknowledged","publicId":"Libtmux_eio.Operation.state.Acknowledged","name":"Acknowledged","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Acknowledged","source":{"file":"eio/libtmux_eio.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation.state","variant":"unit","qualifiedName":"Libtmux_eio.Operation.Acknowledged","slug":"libtmux_eio-operation-state-acknowledged"},{"id":"Libtmux_eio.Operation.state.Finished","publicId":"Libtmux_eio.Operation.state.Finished","name":"Finished","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":74,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Finished of ('a, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":74,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation.state","variant":"tuple","qualifiedName":"Libtmux_eio.Operation.Finished","slug":"libtmux_eio-operation-state-finished"},{"id":"Libtmux_eio.Operation.state.Not_started","publicId":"Libtmux_eio.Operation.state.Not_started","name":"Not_started","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":71,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Not_started","source":{"file":"eio/libtmux_eio.mli","line":71,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation.state","variant":"unit","qualifiedName":"Libtmux_eio.Operation.Not_started","slug":"libtmux_eio-operation-state-not_started"},{"id":"Libtmux_eio.Operation.state.Outcome_unknown","publicId":"Libtmux_eio.Operation.state.Outcome_unknown","name":"Outcome_unknown","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":75,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Outcome_unknown of cleanup_receipt","source":{"file":"eio/libtmux_eio.mli","line":75,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation.state","variant":"tuple","qualifiedName":"Libtmux_eio.Operation.Outcome_unknown","slug":"libtmux_eio-operation-state-outcome_unknown"},{"id":"Libtmux_eio.Operation.state.Queued","publicId":"Libtmux_eio.Operation.state.Queued","name":"Queued","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":70,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Queued","source":{"file":"eio/libtmux_eio.mli","line":70,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation.state","variant":"unit","qualifiedName":"Libtmux_eio.Operation.Queued","slug":"libtmux_eio-operation-state-queued"},{"id":"Libtmux_eio.Operation.state.Written","publicId":"Libtmux_eio.Operation.state.Written","name":"Written","kind":"constant","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":72,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Written","source":{"file":"eio/libtmux_eio.mli","line":72,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation.state","variant":"unit","qualifiedName":"Libtmux_eio.Operation.Written","slug":"libtmux_eio-operation-state-written"},{"id":"Libtmux_eio.Operation.t","publicId":"Libtmux_eio.Operation.t","qualifiedName":"Libtmux_eio.Operation.t","name":"t","kind":"typealias","package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":56,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type 'a t","source":{"file":"eio/libtmux_eio.mli","line":56,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Operation","signatures":[{"raw":"type 'a t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_eio-operation-t"},{"id":"Libtmux_eio.Rendered","publicId":"Libtmux_eio.Rendered","qualifiedName":"Libtmux_eio.Rendered","name":"Rendered","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":19,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Rendered = Libtmux.Captured_text","source":{"file":"eio/libtmux_eio.mli","line":19,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio","exportedFrom":"Libtmux.Captured_text","slug":"libtmux_eio-rendered"},{"id":"Libtmux_eio.Subscription","publicId":"Libtmux_eio.Subscription","qualifiedName":"Libtmux_eio.Subscription","name":"Subscription","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":95,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Bounded future-byte observation with Data/Gap/End and local cursors. Polling\n is local; waiting and admission belong to the backend. "],"declarations":[{"kind":"module","text":"module Subscription : sig\n type t\n\n val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result\n (** Remove a queued event without I/O, on the owning domain. *)\n\n val next :\n ?timeout:float -> t -> (Libtmux.Output.event option, Libtmux.Error.t) result\n (** Await one event, defaulting to a one-second deadline. [None] follows a\n consumed End. A deadline keeps the subscription active. Eio cancellation\n closes it, releases its lane when unused, and propagates. *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** End an active subscription with Cancelled and discard pending data.\n Preserve an already ended subscription's terminal reason. Concurrent calls\n join the same cleanup, including reaping a lane when it becomes unused;\n later calls retain cleanup failures. Borrowed clients and the daemon\n remain alive. {!poll} can still read the terminal event. *)\n\n val wait_for_bytes :\n ?timeout:float ->\n t ->\n text:string ->\n (Libtmux.Output.cursor, Libtmux.Output.wait_error) result\n (** Consume future observed bytes through a match, with a maximum 64 KiB\n nonempty pattern. Match across Data boundaries and return its end cursor.\n Gaps end matching. This searches neither rendered text nor history. A\n deadline leaves the subscription active; cancellation closes it. *)\nend","source":{"file":"eio/libtmux_eio.mli","line":95,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio","doc":{"summary":"Bounded future-byte observation with Data/Gap/End and local cursors. Polling is local; waiting and admission belong to the backend."},"slug":"libtmux_eio-subscription"},{"id":"Libtmux_eio.Subscription.close","publicId":"Libtmux_eio.Subscription.close","qualifiedName":"Libtmux_eio.Subscription.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":107,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" End an active subscription with Cancelled and discard pending data.\n Preserve an already ended subscription's terminal reason. Concurrent calls\n join the same cleanup, including reaping a lane when it becomes unused;\n later calls retain cleanup failures. Borrowed clients and the daemon\n remain alive. {!poll} can still read the terminal event. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":107,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Subscription","doc":{"summary":"End an active subscription with Cancelled and discard pending data. Preserve an already ended subscription's terminal reason. Concurrent calls join the same cleanup, including reaping a lane when it becomes unused; later calls retain cleanup failures. Borrowed clients and the daemon remain alive. {!poll} can still read the terminal event."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-subscription-close"},{"id":"Libtmux_eio.Subscription.next","publicId":"Libtmux_eio.Subscription.next","qualifiedName":"Libtmux_eio.Subscription.next","name":"next","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":101,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Await one event, defaulting to a one-second deadline. [None] follows a\n consumed End. A deadline keeps the subscription active. Eio cancellation\n closes it, releases its lane when unused, and propagates. "],"declarations":[{"kind":"function","text":"val next :\n ?timeout:float -> t -> (Libtmux.Output.event option, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":101,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Subscription","doc":{"summary":"Await one event, defaulting to a one-second deadline. `None` follows a consumed End. A deadline keeps the subscription active. Eio cancellation closes it, releases its lane when unused, and propagates."},"signatures":[{"raw":"val next :\n ?timeout:float ->\n t -> (Libtmux.Output.event option, Libtmux.Error.t) result","params":[{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"(Libtmux.Output.event option, Libtmux.Error.t) result"}],"slug":"libtmux_eio-subscription-next"},{"id":"Libtmux_eio.Subscription.poll","publicId":"Libtmux_eio.Subscription.poll","qualifiedName":"Libtmux_eio.Subscription.poll","name":"poll","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":98,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove a queued event without I/O, on the owning domain. "],"declarations":[{"kind":"function","text":"val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":98,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Subscription","doc":{"summary":"Remove a queued event without I/O, on the owning domain."},"signatures":[{"raw":"val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(Libtmux.Output.event option, Libtmux.Error.t) result"}],"slug":"libtmux_eio-subscription-poll"},{"id":"Libtmux_eio.Subscription.t","publicId":"Libtmux_eio.Subscription.t","qualifiedName":"Libtmux_eio.Subscription.t","name":"t","kind":"typealias","package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":96,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"eio/libtmux_eio.mli","line":96,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Subscription","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_eio-subscription-t"},{"id":"Libtmux_eio.Subscription.wait_for_bytes","publicId":"Libtmux_eio.Subscription.wait_for_bytes","qualifiedName":"Libtmux_eio.Subscription.wait_for_bytes","name":"wait_for_bytes","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":114,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Consume future observed bytes through a match, with a maximum 64 KiB\n nonempty pattern. Match across Data boundaries and return its end cursor.\n Gaps end matching. This searches neither rendered text nor history. A\n deadline leaves the subscription active; cancellation closes it. "],"declarations":[{"kind":"function","text":"val wait_for_bytes :\n ?timeout:float ->\n t ->\n text:string ->\n (Libtmux.Output.cursor, Libtmux.Output.wait_error) result","source":{"file":"eio/libtmux_eio.mli","line":114,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Subscription","doc":{"summary":"Consume future observed bytes through a match, with a maximum 64 KiB nonempty pattern. Match across Data boundaries and return its end cursor. Gaps end matching. This searches neither rendered text nor history. A deadline leaves the subscription active; cancellation closes it.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet watch_output binary blocking (initial : Created.t) _spawn =\n Eio_main.run @@ fun env ->\n Eio.Switch.run @@ fun sw ->\n let module Client = Libtmux_eio.Client in\n let module Subscription = Libtmux_eio.Subscription in\n let client =\n get\n (Client.connect ~sw ~binary\n ~process_mgr:(Eio.Stdenv.process_mgr env)\n ~mono_clock:(Eio.Stdenv.mono_clock env)\n (Source.endpoint (Libtmux_unix.Client.source blocking)))\n in\n Fun.protect\n ~finally:(fun () ->\n Eio.Cancel.protect (fun () -> get (Client.close client)))\n (fun () ->\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n let subscription =\n get (Client.subscribe ~capacity_bytes:4096 client pane)\n in\n Fun.protect\n ~finally:(fun () ->\n Eio.Cancel.protect (fun () -> get (Subscription.close subscription)))\n (fun () ->\n let cursor, () =\n Eio.Fiber.pair\n (fun () ->\n match\n Subscription.wait_for_bytes ~timeout:0.5 subscription\n ~text:\"changed\"\n with\n | Ok cursor -> cursor\n | Error (Output.Failure error) ->\n failwith (Format.asprintf \"%a\" Error.pp error)\n | Error (Output.Ended reason) ->\n failwith (Format.asprintf \"%a\" Output.reason_pp reason))\n (fun () ->\n get (Client.send_text client (Pane.target pane) ~text:\"changed\");\n get (Client.send_keys client (Pane.target pane) [ Key.Enter ]))\n in\n assert (cursor.offset >= 7L);\n print_endline \"observed: changed\"))\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary (watch_output binary)\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_watch.ml","intro":"Observe future output with Eio. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_watch.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"observed: changed\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val wait_for_bytes :\n ?timeout:float ->\n t ->\n text:string -> (Libtmux.Output.cursor, Libtmux.Output.wait_error) result","params":[{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(Libtmux.Output.cursor, Libtmux.Output.wait_error) result"}],"slug":"libtmux_eio-subscription-wait_for_bytes"},{"id":"Libtmux_eio.Terminal","publicId":"Libtmux_eio.Terminal","qualifiedName":"Libtmux_eio.Terminal","name":"Terminal","kind":"module","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":24,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Interactive attachment using borrowed application streams. This utility\n addresses the current daemon explicitly and does not reuse captured targets.\n"],"declarations":[{"kind":"module","text":"module Terminal : sig\n val attach_current :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:_ Eio.Flow.source ->\n ?stdout:_ Eio.Flow.sink ->\n ?stderr:_ Eio.Flow.sink ->\n process_mgr:_ Eio.Process.mgr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t ->\n (unit, Libtmux.Error.t) result\n (** Run an interactive terminal client until exit, using the application's\n process manager and standard streams unless explicit flows are supplied.\n [stdin] must be backed by a terminal descriptor; a pipe-backed flow is\n rejected by tmux. Select the exact ID on the daemon currently listening at\n [endpoint], without a captured target, binding, retry or daemon startup.\n\n Environment updates and read-only mode default to false. Clear inherited\n [TMUX] and [TMUX_PANE]. Cancellation propagates after terminating and\n reaping this client; it does not stop the daemon. Cooperative TERM gets\n 200 ms of grace before forced termination, while other fibers can run.\n Scheduling and kernel completion can add time. Success proves terminal\n client exit. Diagnostics go to [stderr]; borrowed flows stay open. Supply\n [cleanup] before the call to retain secondary failures after cancellation.\n *)\nend","source":{"file":"eio/libtmux_eio.mli","line":24,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio","doc":{"summary":"Interactive attachment using borrowed application streams. This utility addresses the current daemon explicitly and does not reuse captured targets."},"slug":"libtmux_eio-terminal"},{"id":"Libtmux_eio.Terminal.attach_current","publicId":"Libtmux_eio.Terminal.attach_current","qualifiedName":"Libtmux_eio.Terminal.attach_current","name":"attach_current","kind":"function","modifiers":[],"package":"libtmux-eio","product":"core","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":25,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Run an interactive terminal client until exit, using the application's\n process manager and standard streams unless explicit flows are supplied.\n [stdin] must be backed by a terminal descriptor; a pipe-backed flow is\n rejected by tmux. Select the exact ID on the daemon currently listening at\n [endpoint], without a captured target, binding, retry or daemon startup.\n\n Environment updates and read-only mode default to false. Clear inherited\n [TMUX] and [TMUX_PANE]. Cancellation propagates after terminating and\n reaping this client; it does not stop the daemon. Cooperative TERM gets\n 200 ms of grace before forced termination, while other fibers can run.\n Scheduling and kernel completion can add time. Success proves terminal\n client exit. Diagnostics go to [stderr]; borrowed flows stay open. Supply\n [cleanup] before the call to retain secondary failures after cancellation.\n "],"declarations":[{"kind":"function","text":"val attach_current :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:_ Eio.Flow.source ->\n ?stdout:_ Eio.Flow.sink ->\n ?stderr:_ Eio.Flow.sink ->\n process_mgr:_ Eio.Process.mgr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":25,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Terminal","doc":{"summary":"Run an interactive terminal client until exit, using the application's process manager and standard streams unless explicit flows are supplied. `stdin` must be backed by a terminal descriptor; a pipe-backed flow is rejected by tmux. Select the exact ID on the daemon currently listening at `endpoint`, without a captured target, binding, retry or daemon startup.","body":"Environment updates and read-only mode default to false. Clear inherited `TMUX` and `TMUX_PANE`. Cancellation propagates after terminating and reaping this client; it does not stop the daemon. Cooperative TERM gets 200 ms of grace before forced termination, while other fibers can run. Scheduling and kernel completion can add time. Success proves terminal client exit. Diagnostics go to `stderr`; borrowed flows stay open. Supply `cleanup` before the call to retain secondary failures after cancellation."},"signatures":[{"raw":"val attach_current :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:[> Eio.Flow.source_ty ] Eio.Flow.source ->\n ?stdout:[> Eio.Flow.sink_ty ] Eio.Flow.sink ->\n ?stderr:[> Eio.Flow.sink_ty ] Eio.Flow.sink ->\n process_mgr:[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"read_only","type":"bool","optional":true,"keywordOnly":true},{"name":"update_environment","type":"bool","optional":true,"keywordOnly":true},{"name":"stdin","type":"[> Eio.Flow.source_ty ] Eio.Flow.source","optional":true,"keywordOnly":true},{"name":"stdout","type":"[> Eio.Flow.sink_ty ] Eio.Flow.sink","optional":true,"keywordOnly":true},{"name":"stderr","type":"[> Eio.Flow.sink_ty ] Eio.Flow.sink","optional":true,"keywordOnly":true},{"name":"process_mgr","type":"[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr","keywordOnly":true},{"name":"arg1","type":"Libtmux.Endpoint.t"},{"name":"session","type":"Libtmux.Session.Id.t","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-terminal-attach_current"},{"id":"Libtmux_eio.Workspace","publicId":"Libtmux_eio.Workspace","qualifiedName":"Libtmux_eio.Workspace","name":"Workspace","kind":"module","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":605,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Apply workspace plans through Eio while retaining journals across caller\n cancellation. Handles belong to the creating domain; the application owns\n the scheduler and switch. "],"declarations":[{"kind":"module","text":"module Workspace : sig\n type t\n\n val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result\n (** Allocate a generation-bound handle without I/O. The supplied client is\n borrowed; closing the handle leaves it open. *)\n\n val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:_ Eio.Process.mgr ->\n mono_clock:_ Eio.Time.Mono.t ->\n Libtmux_workspace.Plan.t ->\n (t, Libtmux.Error.t) result\n (** Allocate a missing-endpoint execution without I/O. Await starts control\n new-session and binds that same connection. The handle owns its new client\n within [sw]; it never owns the daemon. *)\n\n val await :\n ?compensate_on_failure:bool ->\n t ->\n (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result\n (** Apply steps at most once per execution handle. Expected failures return a\n retained journal. On initial application, [compensate_on_failure] defaults\n to [true], attempting removal of proven newly created panes after failure\n or cancellation. Passing [false] skips that compensation. Eio cancellation\n propagates after progress is recorded and at most 500 ms of protected\n compensation. Admitted commands can still complete under client ownership;\n use {!inspect} before manual recovery. *)\n\n val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result\n (** Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O,\n on the owning domain, including after execution or client closure. Pending\n steps can settle as the client progresses; earlier receipts keep their own\n step and cleanup arrays. *)\n\n val client : t -> Client.t option\n (** Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent\n actions or recovery. {!close} releases a client owned by this workspace\n execution handle. *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** Release an owned client through {!Client.close}. Active await returns\n Busy. Closing is idempotent; completed journals remain readable. *)\nend","source":{"file":"eio/libtmux_eio.mli","line":605,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio","doc":{"summary":"Apply workspace plans through Eio while retaining journals across caller cancellation. Handles belong to the creating domain; the application owns the scheduler and switch."},"slug":"libtmux_eio-workspace"},{"id":"Libtmux_eio.Workspace.await","publicId":"Libtmux_eio.Workspace.await","qualifiedName":"Libtmux_eio.Workspace.await","name":"await","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":626,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Apply steps at most once per execution handle. Expected failures return a\n retained journal. On initial application, [compensate_on_failure] defaults\n to [true], attempting removal of proven newly created panes after failure\n or cancellation. Passing [false] skips that compensation. Eio cancellation\n propagates after progress is recorded and at most 500 ms of protected\n compensation. Admitted commands can still complete under client ownership;\n use {!inspect} before manual recovery. "],"declarations":[{"kind":"function","text":"val await :\n ?compensate_on_failure:bool ->\n t ->\n (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":626,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Apply steps at most once per execution handle. Expected failures return a retained journal. On initial application, `compensate_on_failure` defaults to `true`, attempting removal of proven newly created panes after failure or cancellation. Passing `false` skips that compensation. Eio cancellation propagates after progress is recorded and at most 500 ms of protected compensation. Admitted commands can still complete under client ownership; use {!inspect} before manual recovery."},"signatures":[{"raw":"val await :\n ?compensate_on_failure:bool ->\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","params":[{"name":"compensate_on_failure","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"(Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result"}],"slug":"libtmux_eio-workspace-await"},{"id":"Libtmux_eio.Workspace.client","publicId":"Libtmux_eio.Workspace.client","qualifiedName":"Libtmux_eio.Workspace.client","name":"client","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":645,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent\n actions or recovery. {!close} releases a client owned by this workspace\n execution handle. "],"declarations":[{"kind":"function","text":"val client : t -> Client.t option","source":{"file":"eio/libtmux_eio.mli","line":645,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent actions or recovery. {!close} releases a client owned by this workspace execution handle."},"signatures":[{"raw":"val client : t -> Client.t option","params":[{"name":"arg1","type":"t"}],"returns":"Client.t option"}],"slug":"libtmux_eio-workspace-client"},{"id":"Libtmux_eio.Workspace.close","publicId":"Libtmux_eio.Workspace.close","qualifiedName":"Libtmux_eio.Workspace.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":650,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Release an owned client through {!Client.close}. Active await returns\n Busy. Closing is idempotent; completed journals remain readable. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":650,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Release an owned client through {!Client.close}. Active await returns Busy. Closing is idempotent; completed journals remain readable."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_eio-workspace-close"},{"id":"Libtmux_eio.Workspace.inspect","publicId":"Libtmux_eio.Workspace.inspect","qualifiedName":"Libtmux_eio.Workspace.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":638,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O,\n on the owning domain, including after execution or client closure. Pending\n steps can settle as the client progresses; earlier receipts keep their own\n step and cleanup arrays. "],"declarations":[{"kind":"function","text":"val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":638,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O, on the owning domain, including after execution or client closure. Pending steps can settle as the client progresses; earlier receipts keep their own step and cleanup arrays."},"signatures":[{"raw":"val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result"}],"slug":"libtmux_eio-workspace-inspect"},{"id":"Libtmux_eio.Workspace.submit","publicId":"Libtmux_eio.Workspace.submit","qualifiedName":"Libtmux_eio.Workspace.submit","name":"submit","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":608,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Allocate a generation-bound handle without I/O. The supplied client is\n borrowed; closing the handle leaves it open. "],"declarations":[{"kind":"function","text":"val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":608,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Allocate a generation-bound handle without I/O. The supplied client is borrowed; closing the handle leaves it open."},"signatures":[{"raw":"val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"Client.t"},{"name":"arg2","type":"Libtmux_workspace.Plan.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-workspace-submit"},{"id":"Libtmux_eio.Workspace.submit_bootstrap","publicId":"Libtmux_eio.Workspace.submit_bootstrap","qualifiedName":"Libtmux_eio.Workspace.submit_bootstrap","name":"submit_bootstrap","kind":"function","modifiers":[],"package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":613,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Allocate a missing-endpoint execution without I/O. Await starts control\n new-session and binds that same connection. The handle owns its new client\n within [sw]; it never owns the daemon. "],"declarations":[{"kind":"function","text":"val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:_ Eio.Process.mgr ->\n mono_clock:_ Eio.Time.Mono.t ->\n Libtmux_workspace.Plan.t ->\n (t, Libtmux.Error.t) result","source":{"file":"eio/libtmux_eio.mli","line":613,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Workspace","doc":{"summary":"Allocate a missing-endpoint execution without I/O. Await starts control new-session and binds that same connection. The handle owns its new client within `sw`; it never owns the daemon."},"signatures":[{"raw":"val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n sw:Eio.Switch.t ->\n process_mgr:[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr ->\n mono_clock:[> Eio.Time.Mono.ty ] Eio.Time.Mono.t ->\n Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","params":[{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"sw","type":"Eio.Switch.t","keywordOnly":true},{"name":"process_mgr","type":"[> [> `Generic ] Eio.Process.mgr_ty ] Eio.Process.mgr","keywordOnly":true},{"name":"mono_clock","type":"[> Eio.Time.Mono.ty ] Eio.Time.Mono.t","keywordOnly":true},{"name":"arg1","type":"Libtmux_workspace.Plan.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_eio-workspace-submit_bootstrap"},{"id":"Libtmux_eio.Workspace.t","publicId":"Libtmux_eio.Workspace.t","qualifiedName":"Libtmux_eio.Workspace.t","name":"t","kind":"typealias","package":"libtmux-eio","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_eio","source":{"file":"eio/libtmux_eio.mli","line":606,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"eio/libtmux_eio.mli","line":606,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_eio.Workspace","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_eio-workspace-t"},{"id":"Libtmux_json","publicId":"Libtmux_json","qualifiedName":"Libtmux_json","name":"Libtmux_json","kind":"module","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":1,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Pure, bounded query and workspace JSON interchange.\n\n {!Expr} validates portable queries and {!Workspace} decodes configurations\n and encodes plans and receipts. Both return {!Decode_error.t} on invalid\n data. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/queries.md}query\n guide} and\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/workspaces.md}workspace\n guide} for complete programs. "],"declarations":[{"kind":"module","text":"","source":{"file":"json/libtmux_json.mli","line":1,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"doc":{"summary":"Pure, bounded query and workspace JSON interchange.","body":"{!Expr} validates portable queries and {!Workspace} decodes configurations and encodes plans and receipts. Both return {!Decode_error.t} on invalid data. See the [query guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/queries.md) and [workspace guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/workspaces.md) for complete programs."},"slug":"libtmux_json"},{"id":"Libtmux_json.Decode_error","publicId":"Libtmux_json.Decode_error","qualifiedName":"Libtmux_json.Decode_error","name":"Decode_error","kind":"module","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":11,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Decode_error : sig\n type category =\n | Syntax\n | Limit\n | Unknown\n | Wrong_type\n | Out_of_range\n | Unsupported\n\n type t = { pointer : string; category : category; message : string }\n\n val pp : Format.formatter -> t -> unit\nend","source":{"file":"json/libtmux_json.mli","line":11,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json","slug":"libtmux_json-decode_error"},{"id":"Libtmux_json.Decode_error.category","publicId":"Libtmux_json.Decode_error.category","qualifiedName":"Libtmux_json.Decode_error.category","name":"category","kind":"enum","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":12,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type category =\n | Syntax\n | Limit\n | Unknown\n | Wrong_type\n | Out_of_range\n | Unsupported","source":{"file":"json/libtmux_json.mli","line":12,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error","signatures":[{"raw":"type category =\n | Syntax \n | Limit \n | Unknown \n | Wrong_type \n | Out_of_range \n | Unsupported ","params":[]}],"slug":"libtmux_json-decode_error-category"},{"id":"Libtmux_json.Decode_error.category.Limit","publicId":"Libtmux_json.Decode_error.category.Limit","name":"Limit","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":14,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Limit","source":{"file":"json/libtmux_json.mli","line":14,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Limit","slug":"libtmux_json-decode_error-category-limit"},{"id":"Libtmux_json.Decode_error.category.Out_of_range","publicId":"Libtmux_json.Decode_error.category.Out_of_range","name":"Out_of_range","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":17,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Out_of_range","source":{"file":"json/libtmux_json.mli","line":17,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Out_of_range","slug":"libtmux_json-decode_error-category-out_of_range"},{"id":"Libtmux_json.Decode_error.category.Syntax","publicId":"Libtmux_json.Decode_error.category.Syntax","name":"Syntax","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":13,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Syntax","source":{"file":"json/libtmux_json.mli","line":13,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Syntax","slug":"libtmux_json-decode_error-category-syntax"},{"id":"Libtmux_json.Decode_error.category.Unknown","publicId":"Libtmux_json.Decode_error.category.Unknown","name":"Unknown","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":15,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unknown","source":{"file":"json/libtmux_json.mli","line":15,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Unknown","slug":"libtmux_json-decode_error-category-unknown"},{"id":"Libtmux_json.Decode_error.category.Unsupported","publicId":"Libtmux_json.Decode_error.category.Unsupported","name":"Unsupported","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":18,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported","source":{"file":"json/libtmux_json.mli","line":18,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Unsupported","slug":"libtmux_json-decode_error-category-unsupported"},{"id":"Libtmux_json.Decode_error.category.Wrong_type","publicId":"Libtmux_json.Decode_error.category.Wrong_type","name":"Wrong_type","kind":"constant","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":16,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Wrong_type","source":{"file":"json/libtmux_json.mli","line":16,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error.category","variant":"unit","qualifiedName":"Libtmux_json.Decode_error.Wrong_type","slug":"libtmux_json-decode_error-category-wrong_type"},{"id":"Libtmux_json.Decode_error.pp","publicId":"Libtmux_json.Decode_error.pp","qualifiedName":"Libtmux_json.Decode_error.pp","name":"pp","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":22,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp : Format.formatter -> t -> unit","source":{"file":"json/libtmux_json.mli","line":22,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error","signatures":[{"raw":"val pp : Format.formatter -> t -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"t"}],"returns":"unit"}],"slug":"libtmux_json-decode_error-pp"},{"id":"Libtmux_json.Decode_error.t","publicId":"Libtmux_json.Decode_error.t","qualifiedName":"Libtmux_json.Decode_error.t","name":"t","kind":"struct","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":20,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type t = { pointer : string; category : category; message : string }","source":{"file":"json/libtmux_json.mli","line":20,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error","signatures":[{"raw":"type t = {\n pointer: string ;\n category: category ;\n message: string }","params":[]}],"slug":"libtmux_json-decode_error-t"},{"id":"Libtmux_json.Decode_error.t.category","publicId":"Libtmux_json.Decode_error.t.category","name":"category","kind":"attribute","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":20,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"category : category;","source":{"file":"json/libtmux_json.mli","line":20,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error.t","type":"category","qualifiedName":"Libtmux_json.Decode_error.category","slug":"libtmux_json-decode_error-t-category"},{"id":"Libtmux_json.Decode_error.t.message","publicId":"Libtmux_json.Decode_error.t.message","name":"message","kind":"attribute","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":20,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"message : string","source":{"file":"json/libtmux_json.mli","line":20,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error.t","type":"string","qualifiedName":"Libtmux_json.Decode_error.message","slug":"libtmux_json-decode_error-t-message"},{"id":"Libtmux_json.Decode_error.t.pointer","publicId":"Libtmux_json.Decode_error.t.pointer","name":"pointer","kind":"attribute","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":20,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pointer : string;","source":{"file":"json/libtmux_json.mli","line":20,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Decode_error.t","type":"string","qualifiedName":"Libtmux_json.Decode_error.pointer","slug":"libtmux_json-decode_error-t-pointer"},{"id":"Libtmux_json.Error","publicId":"Libtmux_json.Error","qualifiedName":"Libtmux_json.Error","name":"Error","kind":"module","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":26,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Structured native failures for JSON consumers. "],"declarations":[{"kind":"module","text":"module Error : sig\n val encode : Libtmux.Error.t -> Yojson.Safe.t\n (** Return a stable [code], bounded [message], [message_truncated] flag and\n relevant operation, resource or target metadata. Messages and text\n attributes retain at most 4096 bytes; invalid UTF-8 uses the tagged hex\n representation described by {!Workspace.encode_receipt}. No I/O. *)\nend","source":{"file":"json/libtmux_json.mli","line":26,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json","doc":{"summary":"Structured native failures for JSON consumers."},"slug":"libtmux_json-error"},{"id":"Libtmux_json.Error.encode","publicId":"Libtmux_json.Error.encode","qualifiedName":"Libtmux_json.Error.encode","name":"encode","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":27,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Return a stable [code], bounded [message], [message_truncated] flag and\n relevant operation, resource or target metadata. Messages and text\n attributes retain at most 4096 bytes; invalid UTF-8 uses the tagged hex\n representation described by {!Workspace.encode_receipt}. No I/O. "],"declarations":[{"kind":"function","text":"val encode : Libtmux.Error.t -> Yojson.Safe.t","source":{"file":"json/libtmux_json.mli","line":27,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Error","doc":{"summary":"Return a stable `code`, bounded `message`, `message_truncated` flag and relevant operation, resource or target metadata. Messages and text attributes retain at most 4096 bytes; invalid UTF-8 uses the tagged hex representation described by {!Workspace.encode_receipt}. No I/O."},"signatures":[{"raw":"val encode : Libtmux.Error.t -> Yojson.Safe.t","params":[{"name":"arg1","type":"Libtmux.Error.t"}],"returns":"Yojson.Safe.t"}],"slug":"libtmux_json-error-encode"},{"id":"Libtmux_json.Expr","publicId":"Libtmux_json.Expr","qualifiedName":"Libtmux_json.Expr","name":"Expr","kind":"module","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Portable scalar pane expressions. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/query-interchange.md}wire\n subset} for canonical fields, operators and bounds. "],"declarations":[{"kind":"module","text":"module Expr : sig\n val decode :\n 'a Libtmux.Model.t ->\n Yojson.Safe.t ->\n ('a Libtmux.Expr.t, Decode_error.t) result\n (** Validate the supplied tree, including duplicate properties, before typed\n construction. Only the shared scalar pane registry and Boolean composition\n are accepted. Java regex, relationships and native extension fields return\n [Unsupported]. Numbers must fit signed 32-bit integers. *)\n\n val of_string :\n 'a Libtmux.Model.t -> string -> ('a Libtmux.Expr.t, Decode_error.t) result\n (** Enforce 64 KiB and 32 JSON nesting levels before parsing; require valid\n UTF-8 JSON. Expressions have at most 1,024 nodes and membership lists at\n most 256 values. Errors include a JSON pointer, never the whole input. *)\n\n val encode :\n 'a Libtmux.Model.t ->\n 'a Libtmux.Expr.t ->\n (Yojson.Safe.t, Decode_error.t) result\n\n val to_string :\n 'a Libtmux.Model.t -> 'a Libtmux.Expr.t -> (string, Decode_error.t) result\n (** Apply the same bounds and subset when encoding. Text with invalid UTF-8\n has no representation in this schema. These functions perform no I/O. *)\nend","source":{"file":"json/libtmux_json.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json","doc":{"summary":"Portable scalar pane expressions. See the [wire subset](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/query-interchange.md) for canonical fields, operators and bounds."},"slug":"libtmux_json-expr"},{"id":"Libtmux_json.Expr.decode","publicId":"Libtmux_json.Expr.decode","qualifiedName":"Libtmux_json.Expr.decode","name":"decode","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":74,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Validate the supplied tree, including duplicate properties, before typed\n construction. Only the shared scalar pane registry and Boolean composition\n are accepted. Java regex, relationships and native extension fields return\n [Unsupported]. Numbers must fit signed 32-bit integers. "],"declarations":[{"kind":"function","text":"val decode :\n 'a Libtmux.Model.t ->\n Yojson.Safe.t ->\n ('a Libtmux.Expr.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":74,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Expr","doc":{"summary":"Validate the supplied tree, including duplicate properties, before typed construction. Only the shared scalar pane registry and Boolean composition are accepted. Java regex, relationships and native extension fields return `Unsupported`. Numbers must fit signed 32-bit integers."},"signatures":[{"raw":"val decode :\n 'a Libtmux.Model.t ->\n Yojson.Safe.t -> ('a Libtmux.Expr.t, Decode_error.t) result","params":[{"name":"arg1","type":"'a Libtmux.Model.t"},{"name":"arg2","type":"Yojson.Safe.t"}],"returns":"('a Libtmux.Expr.t, Decode_error.t) result"}],"slug":"libtmux_json-expr-decode"},{"id":"Libtmux_json.Expr.encode","publicId":"Libtmux_json.Expr.encode","qualifiedName":"Libtmux_json.Expr.encode","name":"encode","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":89,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val encode :\n 'a Libtmux.Model.t ->\n 'a Libtmux.Expr.t ->\n (Yojson.Safe.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":89,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Expr","signatures":[{"raw":"val encode :\n 'a Libtmux.Model.t ->\n 'a Libtmux.Expr.t -> (Yojson.Safe.t, Decode_error.t) result","params":[{"name":"arg1","type":"'a Libtmux.Model.t"},{"name":"arg2","type":"'a Libtmux.Expr.t"}],"returns":"(Yojson.Safe.t, Decode_error.t) result"}],"slug":"libtmux_json-expr-encode"},{"id":"Libtmux_json.Expr.of_string","publicId":"Libtmux_json.Expr.of_string","qualifiedName":"Libtmux_json.Expr.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":83,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Enforce 64 KiB and 32 JSON nesting levels before parsing; require valid\n UTF-8 JSON. Expressions have at most 1,024 nodes and membership lists at\n most 256 values. Errors include a JSON pointer, never the whole input. "],"declarations":[{"kind":"function","text":"val of_string :\n 'a Libtmux.Model.t -> string -> ('a Libtmux.Expr.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":83,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Expr","doc":{"summary":"Enforce 64 KiB and 32 JSON nesting levels before parsing; require valid UTF-8 JSON. Expressions have at most 1,024 nodes and membership lists at most 256 values. Errors include a JSON pointer, never the whole input."},"signatures":[{"raw":"val of_string :\n 'a Libtmux.Model.t -> string -> ('a Libtmux.Expr.t, Decode_error.t) result","params":[{"name":"arg1","type":"'a Libtmux.Model.t"},{"name":"arg2","type":"string"}],"returns":"('a Libtmux.Expr.t, Decode_error.t) result"}],"slug":"libtmux_json-expr-of_string"},{"id":"Libtmux_json.Expr.to_string","publicId":"Libtmux_json.Expr.to_string","qualifiedName":"Libtmux_json.Expr.to_string","name":"to_string","kind":"function","modifiers":[],"package":"libtmux-json","product":"core","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":94,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Apply the same bounds and subset when encoding. Text with invalid UTF-8\n has no representation in this schema. These functions perform no I/O. "],"declarations":[{"kind":"function","text":"val to_string :\n 'a Libtmux.Model.t -> 'a Libtmux.Expr.t -> (string, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":94,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Expr","doc":{"summary":"Apply the same bounds and subset when encoding. Text with invalid UTF-8 has no representation in this schema. These functions perform no I/O."},"signatures":[{"raw":"val to_string :\n 'a Libtmux.Model.t -> 'a Libtmux.Expr.t -> (string, Decode_error.t) result","params":[{"name":"arg1","type":"'a Libtmux.Model.t"},{"name":"arg2","type":"'a Libtmux.Expr.t"}],"returns":"(string, Decode_error.t) result"}],"slug":"libtmux_json-expr-to_string"},{"id":"Libtmux_json.Workspace","publicId":"Libtmux_json.Workspace","qualifiedName":"Libtmux_json.Workspace","name":"Workspace","kind":"module","modifiers":[],"package":"libtmux-json","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":36,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Validate workspace documents and describe plans and retained execution.\n Preview output never supplies executable targets. "],"declarations":[{"kind":"module","text":"module Workspace : sig\n val decode :\n directory:string ->\n Yojson.Safe.t ->\n (Libtmux_workspace.Config.t, Decode_error.t) result\n\n val of_string :\n directory:string ->\n string ->\n (Libtmux_workspace.Config.t, Decode_error.t) result\n (** Decode [libtmux.workspace/1] with the query codec's 64 KiB, UTF-8 and\n 32-level JSON bounds. Reject duplicate and unknown properties, invalid\n argv/shell combinations and configuration errors. [directory] is the\n absolute document directory; these functions perform no filesystem I/O. *)\n\n val encode_plan :\n Libtmux_workspace.Plan.t -> (Yojson.Safe.t, Decode_error.t) result\n (** Describe [libtmux.workspace-plan/1] without I/O. The advisory preview\n contains command argv, cwd and environment names, excluding environment\n values, option values and startup text. It is not an execution script. *)\n\n val encode_receipt :\n Libtmux_workspace.Execution.receipt ->\n (Yojson.Safe.t, Decode_error.t) result\n (** Describe [libtmux.workspace-receipt/1] with ordered steps, outcome index\n lists, creation IDs, unbound hints and per-pane cleanup. Diagnostic\n messages are limited to 4096 bytes with an explicit truncation flag;\n command payloads are omitted.\n\n Both output schemas have a 4 MiB bound. Invalid UTF-8 values use\n [{\"encoding\":\"hex\",\"bytes\":\"...\"}] instead of losing bytes. Imported IDs\n and hints never establish a connection binding. *)\nend","source":{"file":"json/libtmux_json.mli","line":36,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json","doc":{"summary":"Validate workspace documents and describe plans and retained execution. Preview output never supplies executable targets."},"slug":"libtmux_json-workspace"},{"id":"Libtmux_json.Workspace.decode","publicId":"Libtmux_json.Workspace.decode","qualifiedName":"Libtmux_json.Workspace.decode","name":"decode","kind":"function","modifiers":[],"package":"libtmux-json","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":37,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val decode :\n directory:string ->\n Yojson.Safe.t ->\n (Libtmux_workspace.Config.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":37,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Workspace","signatures":[{"raw":"val decode :\n directory:string ->\n Yojson.Safe.t -> (Libtmux_workspace.Config.t, Decode_error.t) result","params":[{"name":"directory","type":"string","keywordOnly":true},{"name":"arg1","type":"Yojson.Safe.t"}],"returns":"(Libtmux_workspace.Config.t, Decode_error.t) result"}],"slug":"libtmux_json-workspace-decode"},{"id":"Libtmux_json.Workspace.encode_plan","publicId":"Libtmux_json.Workspace.encode_plan","qualifiedName":"Libtmux_json.Workspace.encode_plan","name":"encode_plan","kind":"function","modifiers":[],"package":"libtmux-json","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":51,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Describe [libtmux.workspace-plan/1] without I/O. The advisory preview\n contains command argv, cwd and environment names, excluding environment\n values, option values and startup text. It is not an execution script. "],"declarations":[{"kind":"function","text":"val encode_plan :\n Libtmux_workspace.Plan.t -> (Yojson.Safe.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":51,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Workspace","doc":{"summary":"Describe `libtmux.workspace-plan/1` without I/O. The advisory preview contains command argv, cwd and environment names, excluding environment values, option values and startup text. It is not an execution script."},"signatures":[{"raw":"val encode_plan :\n Libtmux_workspace.Plan.t -> (Yojson.Safe.t, Decode_error.t) result","params":[{"name":"arg1","type":"Libtmux_workspace.Plan.t"}],"returns":"(Yojson.Safe.t, Decode_error.t) result"}],"slug":"libtmux_json-workspace-encode_plan"},{"id":"Libtmux_json.Workspace.encode_receipt","publicId":"Libtmux_json.Workspace.encode_receipt","qualifiedName":"Libtmux_json.Workspace.encode_receipt","name":"encode_receipt","kind":"function","modifiers":[],"package":"libtmux-json","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":57,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Describe [libtmux.workspace-receipt/1] with ordered steps, outcome index\n lists, creation IDs, unbound hints and per-pane cleanup. Diagnostic\n messages are limited to 4096 bytes with an explicit truncation flag;\n command payloads are omitted.\n\n Both output schemas have a 4 MiB bound. Invalid UTF-8 values use\n [{\"encoding\":\"hex\",\"bytes\":\"...\"}] instead of losing bytes. Imported IDs\n and hints never establish a connection binding. "],"declarations":[{"kind":"function","text":"val encode_receipt :\n Libtmux_workspace.Execution.receipt ->\n (Yojson.Safe.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":57,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Workspace","doc":{"summary":"Describe `libtmux.workspace-receipt/1` with ordered steps, outcome index lists, creation IDs, unbound hints and per-pane cleanup. Diagnostic messages are limited to 4096 bytes with an explicit truncation flag; command payloads are omitted.","body":"Both output schemas have a 4 MiB bound. Invalid UTF-8 values use `{\"encoding\":\"hex\",\"bytes\":\"...\"}` instead of losing bytes. Imported IDs and hints never establish a connection binding."},"signatures":[{"raw":"val encode_receipt :\n Libtmux_workspace.Execution.receipt ->\n (Yojson.Safe.t, Decode_error.t) result","params":[{"name":"arg1","type":"Libtmux_workspace.Execution.receipt"}],"returns":"(Yojson.Safe.t, Decode_error.t) result"}],"slug":"libtmux_json-workspace-encode_receipt"},{"id":"Libtmux_json.Workspace.of_string","publicId":"Libtmux_json.Workspace.of_string","qualifiedName":"Libtmux_json.Workspace.of_string","name":"of_string","kind":"function","modifiers":[],"package":"libtmux-json","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_json","source":{"file":"json/libtmux_json.mli","line":42,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Decode [libtmux.workspace/1] with the query codec's 64 KiB, UTF-8 and\n 32-level JSON bounds. Reject duplicate and unknown properties, invalid\n argv/shell combinations and configuration errors. [directory] is the\n absolute document directory; these functions perform no filesystem I/O. "],"declarations":[{"kind":"function","text":"val of_string :\n directory:string ->\n string ->\n (Libtmux_workspace.Config.t, Decode_error.t) result","source":{"file":"json/libtmux_json.mli","line":42,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_json.Workspace","doc":{"summary":"Decode `libtmux.workspace/1` with the query codec's 64 KiB, UTF-8 and 32-level JSON bounds. Reject duplicate and unknown properties, invalid argv/shell combinations and configuration errors. `directory` is the absolute document directory; these functions perform no filesystem I/O."},"signatures":[{"raw":"val of_string :\n directory:string ->\n string -> (Libtmux_workspace.Config.t, Decode_error.t) result","params":[{"name":"directory","type":"string","keywordOnly":true},{"name":"arg1","type":"string"}],"returns":"(Libtmux_workspace.Config.t, Decode_error.t) result"}],"slug":"libtmux_json-workspace-of_string"},{"id":"Libtmux_unix","publicId":"Libtmux_unix","qualifiedName":"Libtmux_unix","name":"Libtmux_unix","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":1,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Blocking Linux tmux clients with explicit scoped cancellation.\n\n Client methods perform I/O unless documented otherwise. Captured\n {!Libtmux.Snapshot} observations and retained {!Operation.inspect} remain\n local. Clients belong to the connecting domain. Closure releases their owned\n resources; tmux applies its configured daemon lifetime.\n\n See {!Client} for acquisition and commands, {!Operation} for cancellation\n outcomes, and {!Subscription} for bounded future output. The\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/control.md}control\n guide} explains binding, completion and recovery. "],"declarations":[{"kind":"module","text":"","source":{"file":"unix/libtmux_unix.mli","line":1,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"doc":{"summary":"Blocking Linux tmux clients with explicit scoped cancellation.","body":"Client methods perform I/O unless documented otherwise. Captured {!Libtmux.Snapshot} observations and retained {!Operation.inspect} remain local. Clients belong to the connecting domain. Closure releases their owned resources; tmux applies its configured daemon lifetime.\n\nSee {!Client} for acquisition and commands, {!Operation} for cancellation outcomes, and {!Subscription} for bounded future output. The [control guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/control.md) explains binding, completion and recovery."},"slug":"libtmux_unix"},{"id":"Libtmux_unix.Cancellation","publicId":"Libtmux_unix.Cancellation","qualifiedName":"Libtmux_unix.Cancellation","name":"Cancellation","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":63,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"module","text":"module Cancellation : sig\n type t\n\n exception Cancelled\n\n val with_ : (t -> 'a) -> 'a\n (** Own a cancellation token for the callback's lifetime. Leaving the scope\n cancels outstanding waiters and releases its descriptors after they\n finish. An escaped token is cancelled and cannot be reused. *)\n\n val cancel : t -> unit\n (** Wake waiters. Safe from another domain or systhread, but not from a signal\n handler. Repeated calls and calls after scope exit have no effect. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":63,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix","slug":"libtmux_unix-cancellation"},{"id":"Libtmux_unix.Cancellation.Cancelled","publicId":"Libtmux_unix.Cancellation.Cancelled","qualifiedName":"Libtmux_unix.Cancellation.Cancelled","name":"Cancelled","kind":"exception","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":66,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"exception","text":"exception Cancelled","source":{"file":"unix/libtmux_unix.mli","line":66,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cancellation","signatures":[{"raw":"type exn += Cancelled","params":[]}],"slug":"libtmux_unix-cancellation-cancelled"},{"id":"Libtmux_unix.Cancellation.cancel","publicId":"Libtmux_unix.Cancellation.cancel","qualifiedName":"Libtmux_unix.Cancellation.cancel","name":"cancel","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":73,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Wake waiters. Safe from another domain or systhread, but not from a signal\n handler. Repeated calls and calls after scope exit have no effect. "],"declarations":[{"kind":"function","text":"val cancel : t -> unit","source":{"file":"unix/libtmux_unix.mli","line":73,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cancellation","doc":{"summary":"Wake waiters. Safe from another domain or systhread, but not from a signal handler. Repeated calls and calls after scope exit have no effect."},"signatures":[{"raw":"val cancel : t -> unit","params":[{"name":"arg1","type":"t"}],"returns":"unit"}],"slug":"libtmux_unix-cancellation-cancel"},{"id":"Libtmux_unix.Cancellation.t","publicId":"Libtmux_unix.Cancellation.t","qualifiedName":"Libtmux_unix.Cancellation.t","name":"t","kind":"typealias","package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":64,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"unix/libtmux_unix.mli","line":64,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cancellation","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_unix-cancellation-t"},{"id":"Libtmux_unix.Cancellation.with_","publicId":"Libtmux_unix.Cancellation.with_","qualifiedName":"Libtmux_unix.Cancellation.with_","name":"with_","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":68,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Own a cancellation token for the callback's lifetime. Leaving the scope\n cancels outstanding waiters and releases its descriptors after they\n finish. An escaped token is cancelled and cannot be reused. "],"declarations":[{"kind":"function","text":"val with_ : (t -> 'a) -> 'a","source":{"file":"unix/libtmux_unix.mli","line":68,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cancellation","doc":{"summary":"Own a cancellation token for the callback's lifetime. Leaving the scope cancels outstanding waiters and releases its descriptors after they finish. An escaped token is cancelled and cannot be reused."},"signatures":[{"raw":"val with_ : (t -> 'a) -> 'a","params":[{"name":"arg1","type":"t -> 'a"}],"returns":"'a"}],"slug":"libtmux_unix-cancellation-with_"},{"id":"Libtmux_unix.Cleanup","publicId":"Libtmux_unix.Cleanup","qualifiedName":"Libtmux_unix.Cleanup","name":"Cleanup","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":17,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Retained failures from releasing processes and descriptors. Reports belong\n to their creating domain and remain readable after client closure. They\n preserve secondary failures without replacing a primary exception or\n cancellation. "],"declarations":[{"kind":"module","text":"module Cleanup : sig\n type t = Cleanup.t\n\n type phase = Cleanup.phase =\n | Close_pipe\n | Open_pidfd\n | Close_pidfd\n | Terminate\n | Grace\n | Kill\n | Reap\n | Unreaped_child\n | Cancel_workers\n | Release_hook\n | Notify_waiters\n\n type issue = Cleanup.issue = {\n phase : phase;\n error : Libtmux.Error.t option;\n exception_ : exn;\n backtrace : Printexc.raw_backtrace;\n }\n (** One failed cleanup action. [error] retains a typed library cause when\n available; [exception_] and [backtrace] retain the original exception.\n [Unreaped_child] means exit was not established after a failed signal. It\n does not release ownership or authorize signalling a reused PID. *)\n\n type snapshot = Cleanup.snapshot = { issues : issue Iarray.t; omitted : int }\n (** Issues in occurrence order, with a count of additional omitted issues. A\n report retains at most 64 entries. This bounds entry count, not heap\n retention: exception payloads and backtraces may retain other values.\n These diagnostics are not immutable graph observations. *)\n\n val create : unit -> t\n (** Create an empty report without I/O. Supply it before {!Client.connect},\n {!Workspace.submit_bootstrap} or {!Terminal.attach_current} to retain\n cleanup evidence even when setup fails or cancellation raises. *)\n\n val inspect : t -> (snapshot, Libtmux.Error.t) result\n (** Copy the current diagnostics without I/O. Returns\n {!Libtmux.Error.Wrong_domain} outside the creating domain. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":17,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix","doc":{"summary":"Retained failures from releasing processes and descriptors. Reports belong to their creating domain and remain readable after client closure. They preserve secondary failures without replacing a primary exception or cancellation."},"slug":"libtmux_unix-cleanup"},{"id":"Libtmux_unix.Cleanup.create","publicId":"Libtmux_unix.Cleanup.create","qualifiedName":"Libtmux_unix.Cleanup.create","name":"create","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":50,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Create an empty report without I/O. Supply it before {!Client.connect},\n {!Workspace.submit_bootstrap} or {!Terminal.attach_current} to retain\n cleanup evidence even when setup fails or cancellation raises. "],"declarations":[{"kind":"function","text":"val create : unit -> t","source":{"file":"unix/libtmux_unix.mli","line":50,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup","doc":{"summary":"Create an empty report without I/O. Supply it before {!Client.connect}, {!Workspace.submit_bootstrap} or {!Terminal.attach_current} to retain cleanup evidence even when setup fails or cancellation raises."},"signatures":[{"raw":"val create : unit -> t","params":[{"name":"arg1","type":"unit"}],"returns":"t"}],"slug":"libtmux_unix-cleanup-create"},{"id":"Libtmux_unix.Cleanup.inspect","publicId":"Libtmux_unix.Cleanup.inspect","qualifiedName":"Libtmux_unix.Cleanup.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":55,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Copy the current diagnostics without I/O. Returns\n {!Libtmux.Error.Wrong_domain} outside the creating domain. "],"declarations":[{"kind":"function","text":"val inspect : t -> (snapshot, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":55,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup","doc":{"summary":"Copy the current diagnostics without I/O. Returns {!Libtmux.Error.Wrong_domain} outside the creating domain."},"signatures":[{"raw":"val inspect : t -> (snapshot, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(snapshot, Libtmux.Error.t) result"}],"slug":"libtmux_unix-cleanup-inspect"},{"id":"Libtmux_unix.Cleanup.issue","publicId":"Libtmux_unix.Cleanup.issue","qualifiedName":"Libtmux_unix.Cleanup.issue","name":"issue","kind":"struct","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":33,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" One failed cleanup action. [error] retains a typed library cause when\n available; [exception_] and [backtrace] retain the original exception.\n [Unreaped_child] means exit was not established after a failed signal. It\n does not release ownership or authorize signalling a reused PID. "],"declarations":[{"kind":"struct","text":"type issue = Cleanup.issue = {\n phase : phase;\n error : Libtmux.Error.t option;\n exception_ : exn;\n backtrace : Printexc.raw_backtrace;\n }","source":{"file":"unix/libtmux_unix.mli","line":33,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup","doc":{"summary":"One failed cleanup action. `error` retains a typed library cause when available; `exception_` and `backtrace` retain the original exception. `Unreaped_child` means exit was not established after a failed signal. It does not release ownership or authorize signalling a reused PID."},"type":"Cleanup.issue","signatures":[{"raw":"type issue = Cleanup.issue =\n {\n phase: phase ;\n error: Libtmux.Error.t option ;\n exception_: exn ;\n backtrace: Printexc.raw_backtrace }","params":[]}],"slug":"libtmux_unix-cleanup-issue"},{"id":"Libtmux_unix.Cleanup.issue.backtrace","publicId":"Libtmux_unix.Cleanup.issue.backtrace","name":"backtrace","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":37,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"backtrace : Printexc.raw_backtrace;","source":{"file":"unix/libtmux_unix.mli","line":37,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.issue","type":"Printexc.raw_backtrace","qualifiedName":"Libtmux_unix.Cleanup.backtrace","slug":"libtmux_unix-cleanup-issue-backtrace"},{"id":"Libtmux_unix.Cleanup.issue.error","publicId":"Libtmux_unix.Cleanup.issue.error","name":"error","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":35,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"error : Libtmux.Error.t option;","source":{"file":"unix/libtmux_unix.mli","line":35,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.issue","type":"Libtmux.Error.t option","qualifiedName":"Libtmux_unix.Cleanup.error","slug":"libtmux_unix-cleanup-issue-error"},{"id":"Libtmux_unix.Cleanup.issue.exception_","publicId":"Libtmux_unix.Cleanup.issue.exception_","name":"exception_","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":36,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"exception_ : exn;","source":{"file":"unix/libtmux_unix.mli","line":36,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.issue","type":"exn","qualifiedName":"Libtmux_unix.Cleanup.exception_","slug":"libtmux_unix-cleanup-issue-exception_"},{"id":"Libtmux_unix.Cleanup.issue.phase","publicId":"Libtmux_unix.Cleanup.issue.phase","name":"phase","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":34,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"phase : phase;","source":{"file":"unix/libtmux_unix.mli","line":34,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.issue","type":"phase","qualifiedName":"Libtmux_unix.Cleanup.phase","slug":"libtmux_unix-cleanup-issue-phase"},{"id":"Libtmux_unix.Cleanup.phase","publicId":"Libtmux_unix.Cleanup.phase","qualifiedName":"Libtmux_unix.Cleanup.phase","name":"phase","kind":"enum","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":20,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type phase = Cleanup.phase =\n | Close_pipe\n | Open_pidfd\n | Close_pidfd\n | Terminate\n | Grace\n | Kill\n | Reap\n | Unreaped_child\n | Cancel_workers\n | Release_hook\n | Notify_waiters","source":{"file":"unix/libtmux_unix.mli","line":20,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup","type":"Cleanup.phase","signatures":[{"raw":"type phase = Cleanup.phase =\n | Close_pipe \n | Open_pidfd \n | Close_pidfd \n | Terminate \n | Grace \n | Kill \n | Reap \n | Unreaped_child \n | Cancel_workers \n | Release_hook \n | Notify_waiters ","params":[]}],"slug":"libtmux_unix-cleanup-phase"},{"id":"Libtmux_unix.Cleanup.phase.Cancel_workers","publicId":"Libtmux_unix.Cleanup.phase.Cancel_workers","name":"Cancel_workers","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":29,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Cancel_workers","source":{"file":"unix/libtmux_unix.mli","line":29,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Cancel_workers","slug":"libtmux_unix-cleanup-phase-cancel_workers"},{"id":"Libtmux_unix.Cleanup.phase.Close_pidfd","publicId":"Libtmux_unix.Cleanup.phase.Close_pidfd","name":"Close_pidfd","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":23,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Close_pidfd","source":{"file":"unix/libtmux_unix.mli","line":23,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Close_pidfd","slug":"libtmux_unix-cleanup-phase-close_pidfd"},{"id":"Libtmux_unix.Cleanup.phase.Close_pipe","publicId":"Libtmux_unix.Cleanup.phase.Close_pipe","name":"Close_pipe","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":21,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Close_pipe","source":{"file":"unix/libtmux_unix.mli","line":21,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Close_pipe","slug":"libtmux_unix-cleanup-phase-close_pipe"},{"id":"Libtmux_unix.Cleanup.phase.Grace","publicId":"Libtmux_unix.Cleanup.phase.Grace","name":"Grace","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":25,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Grace","source":{"file":"unix/libtmux_unix.mli","line":25,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Grace","slug":"libtmux_unix-cleanup-phase-grace"},{"id":"Libtmux_unix.Cleanup.phase.Kill","publicId":"Libtmux_unix.Cleanup.phase.Kill","name":"Kill","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":26,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Kill","source":{"file":"unix/libtmux_unix.mli","line":26,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Kill","slug":"libtmux_unix-cleanup-phase-kill"},{"id":"Libtmux_unix.Cleanup.phase.Notify_waiters","publicId":"Libtmux_unix.Cleanup.phase.Notify_waiters","name":"Notify_waiters","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":31,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Notify_waiters","source":{"file":"unix/libtmux_unix.mli","line":31,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Notify_waiters","slug":"libtmux_unix-cleanup-phase-notify_waiters"},{"id":"Libtmux_unix.Cleanup.phase.Open_pidfd","publicId":"Libtmux_unix.Cleanup.phase.Open_pidfd","name":"Open_pidfd","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":22,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Open_pidfd","source":{"file":"unix/libtmux_unix.mli","line":22,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Open_pidfd","slug":"libtmux_unix-cleanup-phase-open_pidfd"},{"id":"Libtmux_unix.Cleanup.phase.Reap","publicId":"Libtmux_unix.Cleanup.phase.Reap","name":"Reap","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":27,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Reap","source":{"file":"unix/libtmux_unix.mli","line":27,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Reap","slug":"libtmux_unix-cleanup-phase-reap"},{"id":"Libtmux_unix.Cleanup.phase.Release_hook","publicId":"Libtmux_unix.Cleanup.phase.Release_hook","name":"Release_hook","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":30,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Release_hook","source":{"file":"unix/libtmux_unix.mli","line":30,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Release_hook","slug":"libtmux_unix-cleanup-phase-release_hook"},{"id":"Libtmux_unix.Cleanup.phase.Terminate","publicId":"Libtmux_unix.Cleanup.phase.Terminate","name":"Terminate","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":24,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Terminate","source":{"file":"unix/libtmux_unix.mli","line":24,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Terminate","slug":"libtmux_unix-cleanup-phase-terminate"},{"id":"Libtmux_unix.Cleanup.phase.Unreaped_child","publicId":"Libtmux_unix.Cleanup.phase.Unreaped_child","name":"Unreaped_child","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":28,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unreaped_child","source":{"file":"unix/libtmux_unix.mli","line":28,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.phase","variant":"unit","qualifiedName":"Libtmux_unix.Cleanup.Unreaped_child","slug":"libtmux_unix-cleanup-phase-unreaped_child"},{"id":"Libtmux_unix.Cleanup.snapshot","publicId":"Libtmux_unix.Cleanup.snapshot","qualifiedName":"Libtmux_unix.Cleanup.snapshot","name":"snapshot","kind":"struct","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Issues in occurrence order, with a count of additional omitted issues. A\n report retains at most 64 entries. This bounds entry count, not heap\n retention: exception payloads and backtraces may retain other values.\n These diagnostics are not immutable graph observations. "],"declarations":[{"kind":"struct","text":"type snapshot = Cleanup.snapshot = { issues : issue Iarray.t; omitted : int }","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup","doc":{"summary":"Issues in occurrence order, with a count of additional omitted issues. A report retains at most 64 entries. This bounds entry count, not heap retention: exception payloads and backtraces may retain other values. These diagnostics are not immutable graph observations."},"type":"Cleanup.snapshot","signatures":[{"raw":"type snapshot = Cleanup.snapshot = {\n issues: issue Iarray.t ;\n omitted: int }","params":[]}],"slug":"libtmux_unix-cleanup-snapshot"},{"id":"Libtmux_unix.Cleanup.snapshot.issues","publicId":"Libtmux_unix.Cleanup.snapshot.issues","name":"issues","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"issues : issue Iarray.t;","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.snapshot","type":"issue Iarray.t","qualifiedName":"Libtmux_unix.Cleanup.issues","slug":"libtmux_unix-cleanup-snapshot-issues"},{"id":"Libtmux_unix.Cleanup.snapshot.omitted","publicId":"Libtmux_unix.Cleanup.snapshot.omitted","name":"omitted","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"omitted : int","source":{"file":"unix/libtmux_unix.mli","line":44,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup.snapshot","type":"int","qualifiedName":"Libtmux_unix.Cleanup.omitted","slug":"libtmux_unix-cleanup-snapshot-omitted"},{"id":"Libtmux_unix.Cleanup.t","publicId":"Libtmux_unix.Cleanup.t","qualifiedName":"Libtmux_unix.Cleanup.t","name":"t","kind":"typealias","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":18,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t = Cleanup.t","source":{"file":"unix/libtmux_unix.mli","line":18,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Cleanup","type":"Cleanup.t","signatures":[{"raw":"type t = Cleanup.t","params":[]}],"slug":"libtmux_unix-cleanup-t"},{"id":"Libtmux_unix.Client","publicId":"Libtmux_unix.Client","qualifiedName":"Libtmux_unix.Client","name":"Client","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":297,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" An explicit generation-bound connection. Applications retain ownership of\n the endpoint choice and resource lifetime.\n\n {1 What is on here}\n\n A client does a great many things, so this module has a great many\n functions. They fall into a few groups:\n\n {b Connecting and closing.} {!Client.connect} attaches to a daemon that is\n already running, given a {!Libtmux.Endpoint.t}; the daemon needs at least\n one session and must share the caller's PID namespace and filesystem.\n {!Client.close} releases the control clients and descriptors the client owns\n and sends no signal to the daemon. {!Client.source} and {!Client.version}\n read what the client is bound to without I/O, and {!Client.cleanup} returns\n the {!Cleanup.t} report that retains failed releases.\n\n {!Client.connect}, {!Client.close}, {!Client.source}, {!Client.version} and\n {!Client.cleanup}\n\n {b Listing everything.} {!Client.capture} lists sessions, windows, window\n links, panes and clients with a fixed number of listing commands and returns\n a {!Libtmux.Snapshot}. The listings span an interval rather than one\n instant, and a race between them fails validation. Reading the snapshot,\n even after {!Client.close}, performs no I/O: filter its collections with\n {!Libtmux.Expr} and {!Libtmux.Query.matching}, or look an entity up with\n {!Libtmux.Snapshot.find_pane}.\n\n {!Client.capture}, {!Libtmux.Snapshot}, {!Libtmux.Expr},\n {!Libtmux.Query.matching} and {!Libtmux.Snapshot.find_pane}\n\n {b Reading a pane.} {!Client.capture_text} returns the rendered rows of a\n pane's ordinary screen, from [start] to [end_] inclusive, as a\n {!Libtmux.Captured_text}; it works through a private file in a scratch\n directory the daemon can also read. {!Client.wait_for_text} captures again\n after output until the screen contains the text or the deadline passes.\n {!Client.subscribe} returns a {!Subscription.t} of the bytes the pane prints\n once it is admitted, read with {!Subscription.next}; overflow and layout or\n membership changes end it with an explicit gap.\n\n {!Client.capture_text}, {!Client.wait_for_text}, {!Client.subscribe} and\n {!Subscription.next}\n\n {b Sending input and synchronizing.} {!Client.send_text} writes literal\n bytes to a pane and {!Client.send_keys} sends a list of {!Libtmux.Key.t} in\n order; neither adds an Enter. {!Client.wait_for} waits on a named tmux\n semaphore using a dedicated lane, and {!Client.signal} releases a waiter or\n keeps the signal for a later wait. {!Client.signal} does not signal an OS\n process.\n\n {!Client.send_text}, {!Client.send_keys}, {!Client.wait_for} and\n {!Client.signal}\n\n {b Creating things.} {!Client.create_session} creates a detached session and\n fails on a name collision. {!Client.create_window} adds a detached window to\n a session and rejects an occupied explicit index, and {!Client.split_pane}\n adds a detached pane beside a target. {!Client.break_pane} moves an existing\n pane into a new window at an explicit index. Each returns a\n {!Libtmux.Created.t} with the IDs tmux reports.\n\n {!Client.create_session}, {!Client.create_window}, {!Client.split_pane} and\n {!Client.break_pane}\n\n {b Changing things.} A function ending in [_at] addresses the window at an\n index, or the client bearing a name, as it is when the command runs rather\n than when a snapshot was captured. {!Client.kill_window} destroys the\n window, all its session links and every pane in it, while\n {!Client.unlink_window_at} removes one link and tmux rejects removing a\n window's last link unless [allow_kill] is true. Resize and layout functions\n request a geometry: tmux can constrain the result, so capture again to\n observe it.\n\n - Sessions: {!Client.rename_session} and {!Client.kill_session}\n - Windows: {!Client.rename_window}, {!Client.select_window_at},\n {!Client.link_window}, {!Client.unlink_window_at},\n {!Client.move_window_at}, {!Client.resize_window},\n {!Client.select_layout}, {!Client.cycle_layout} and {!Client.kill_window}\n - Panes: {!Client.select_pane}, {!Client.set_pane_title},\n {!Client.resize_pane}, {!Client.move_pane}, {!Client.swap_panes},\n {!Client.rotate_panes}, {!Client.zoom_pane}, {!Client.respawn_pane},\n {!Client.clear_history} and {!Client.kill_pane}\n - Clients: {!Client.switch_client_at}, {!Client.request_detach_client_at},\n {!Client.refresh_client_at} and {!Client.resize_control_client_at}\n\n {b Options, hooks and environment.} Every option and hook function takes a\n {!Libtmux.Options.type-scope}, so one function serves the server, the global\n session and window tables, and a session, window or pane.\n {!Client.capture_options}, {!Client.capture_hooks} and\n {!Client.capture_environment} return a whole table, while\n {!Client.read_option} and {!Client.read_hook} read one exact name and return\n [None] when there is no entry. Option text is literal, with tmux format\n expansion disabled, and {!Client.set_hook} encodes {!Libtmux.Hook.command}\n values as command data, not shell code. {!Client.unset_environment} removes\n the local entry so a global value applies again, while\n {!Client.remove_environment} stores a removal marker that excludes the\n variable from future panes.\n\n - Options: {!Client.capture_options}, {!Client.read_option},\n {!Client.set_option}, {!Client.unset_option} and\n {!Client.clear_option_array}\n - Hooks: {!Client.capture_hooks}, {!Client.read_hook}, {!Client.set_hook},\n {!Client.remove_hook} and {!Client.run_hook}\n - Environment: {!Client.capture_environment}, {!Client.set_environment},\n {!Client.unset_environment} and {!Client.remove_environment}\n\n {b Running a command.} {!Client.submit} validates a {!Libtmux.Command.t} and\n reserves queue capacity without I/O, returning an {!Operation.t}.\n {!Client.await} pumps admitted work until that operation finishes; only one\n blocking caller may own the client at a time. {!Client.run} does both in one\n call, as most functions above do for the command {!Libtmux.Operations}\n builds. Keep the handle from {!Client.submit} to read {!Operation.inspect}\n after a failure or cancellation.\n\n {!Client.submit}, {!Client.await} and {!Client.run} "],"declarations":[{"kind":"module","text":"module Client : sig\n type t\n\n val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n Libtmux.Endpoint.t ->\n (t, Libtmux.Error.t) result\n (** Attach to an existing local daemon with at least one session. The caller\n and daemon must share the PID namespace and filesystem. A local socket\n pathname alone does not establish these preconditions. [timeout] is the\n maximum seconds per control exchange, defaulting to one second. Requires\n Linux pidfd support. The client belongs to the current domain. Initial and\n auxiliary attachments suppress tmux's [update-environment] behavior. *)\n\n val cleanup : t -> Cleanup.t\n (** Read the report supplied at connection time, or its fresh default.\n {!Cleanup.inspect} remains available after close. *)\n\n val source : t -> Libtmux.Source.t\n (** Read the retained endpoint, daemon PID and connection generation without\n I/O. *)\n\n val version : t -> string\n (** Read the bound daemon's observed version without I/O. *)\n\n val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t ->\n Libtmux.Pane.t ->\n (Subscription.t, Libtmux.Error.t) result\n (** Acquire verified coverage of the pane's observed session/window. Choose\n the least session ID unless explicitly supplied. Reuse one lane per\n session. Defaults: 1 MiB and 1024 queued events per subscriber; at most 16\n subscribers and eight client lanes including commands. Reserve payload\n against the shared 32 MiB budget before admission.\n\n Queue capacities remain reserved while empty. Captures and reads need\n additional scratch space; their admission can return\n {!Libtmux.Error.Capacity} below the subscriber-count limit. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity}shared\n capacity guide} for the combined reservations and process slots.\n\n Data starts after admission's marker. Layout/membership changes end\n continuity conservatively. Overflow emits Gap then End, without blocking\n another subscriber. Blocking delivery advances during Subscription.next.\n There is no snapshot/history barrier or automatic recovery. *)\n\n val wait_for_text :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n text:string ->\n (Rendered.t, Libtmux.Error.t) result\n (** Subscribe, capture the ordinary screen immediately, and recapture after\n output. Membership/overflow gaps trigger explicit fresh capture and new\n coverage in the same binding. Maximum pattern: 64 KiB. Success returns a\n capture that contains the text. Transient text between captures may be\n missed. Check the deadline between bounded acquisitions; in-flight I/O\n retains the client's exchange timeout. Release the temporary subscription\n without replacing an earlier error or cancellation; inspect {!cleanup} for\n secondary failures. Otherwise cleanup failure prevents success or renewed\n coverage. No capture/stream barrier exists. *)\n\n val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result\n (** Validate and reserve queue capacity without I/O. *)\n\n val await :\n ?cancel:Cancellation.t -> 'a Operation.t -> ('a, Libtmux.Error.t) result\n (** Pump admitted work until this operation is finished. Only one blocking\n caller may own the client at a time. Cancellation removes queued work or\n drains admitted work before raising [Cancellation.Cancelled]. The handle\n retains its outcome. Draining has at most one exchange timeout from\n detection; local scratch filesystem I/O and owned-child cleanup must also\n finish. Each owned child gets 200 ms of TERM grace before forced\n termination and reaping; scheduling and kernel completion can add time. No\n background scheduler or worker is started. *)\n\n val run :\n ?cancel:Cancellation.t ->\n t ->\n 'a Libtmux.Command.t ->\n ('a, Libtmux.Error.t) result\n (** Submit and await. Use the two calls separately to retain an operation\n handle. *)\n\n val capture :\n ?cancel:Cancellation.t -> t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result\n (** Acquire a complete graph over a recorded interval, with a fixed number of\n listing commands. Races fail validation. Access to returned values\n performs no I/O, including after closing the client. *)\n\n val capture_text :\n ?cancel:Cancellation.t ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int ->\n end_:int ->\n (Rendered.t, Libtmux.Error.t) result\n (** Capture ordinary rendered screen rows, inclusively, via an owned paste\n buffer and private file. Reject applicable capture/save hooks. The scratch\n directory defaults to [/tmp] and must be local storage shared with the\n daemon. Pending and alternate-screen byte modes are unsupported. This\n observes an interval and establishes no stream continuity barrier. *)\n\n (* BEGIN GENERATED OPERATIONS *)\n val rename_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n name:string ->\n (unit, Libtmux.Error.t) result\n (** Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. *)\n\n val rename_session :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n name:string ->\n (unit, Libtmux.Error.t) result\n (** Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. *)\n\n val switch_client_at :\n ?cancel:Cancellation.t ->\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result\n (** Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. *)\n\n val request_detach_client_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result\n (** Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. *)\n\n val refresh_client_at :\n ?cancel:Cancellation.t ->\n ?status_only:bool ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result\n (** Request a redraw; no terminal-rendering completion is implied. *)\n\n val resize_control_client_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Client_name.t ->\n width:int ->\n height:int ->\n (unit, Libtmux.Error.t) result\n (** Set a control client's reported size. tmux rejects terminal clients. *)\n\n val send_text :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n text:string ->\n (unit, Libtmux.Error.t) result\n (** Literal bytes, without an implicit Enter. NUL is rejected at admission. *)\n\n val send_keys :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Key.t list ->\n (unit, Libtmux.Error.t) result\n (** Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. *)\n\n val wait_for :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result\n (** Wait on a named tmux semaphore using a dedicated bound lane. *)\n\n val signal :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result\n (** Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. *)\n\n val capture_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result\n (** Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n *)\n\n val set_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. *)\n\n val unset_environment :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Environment.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Remove the local entry, allowing a global value to apply to future panes.\n *)\n\n val remove_environment :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Environment.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Store a removal marker, excluding the variable from future panes. *)\n\n val capture_options :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result\n (** Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Libtmux.Error.Unsupported}. *)\n\n val read_option :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result\n (** Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. *)\n\n val set_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Options.scalar ->\n (unit, Libtmux.Error.t) result\n (** Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. *)\n\n val unset_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. *)\n\n val clear_option_array :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Set a local empty array, masking inheritance. *)\n\n val capture_hooks :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result\n (** Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. *)\n\n val read_hook :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result\n (** Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. *)\n\n val set_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Hook.command list ->\n (unit, Libtmux.Error.t) result\n (** Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Libtmux.Options.Text] value; bulk hook capture includes built-ins.\n Commands may cause arbitrary tmux effects when triggered. Hooks that print\n output are outside the supported control transport contract. *)\n\n val remove_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. *)\n\n val run_hook :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result\n (** Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. *)\n\n val create_session :\n ?cancel:Cancellation.t ->\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n name:string ->\n unit ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create a detached session on the bound daemon. Name collisions fail. *)\n\n val create_window :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Session.target ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create detached, rejecting an occupied explicit index. *)\n\n val split_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. *)\n\n val break_pane :\n ?cancel:Cancellation.t ->\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (Libtmux.Created.t, Libtmux.Error.t) result\n (** Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. *)\n\n val kill_session :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result\n (** Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. *)\n\n val kill_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result\n (** Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. *)\n\n val kill_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. *)\n\n val select_window_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Operate on the session's current index at execution, not an old link\n incarnation. *)\n\n val unlink_window_at :\n ?cancel:Cancellation.t ->\n ?allow_kill:bool ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Without [allow_kill], tmux rejects removal of the last link to a window.\n *)\n\n val link_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. *)\n\n val move_window_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result\n (** Move the source session's current link at [from_index]. Destination\n collisions fail. *)\n\n val select_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Make the pane active in its containing window. This does not open or\n attach a terminal client. *)\n\n val set_pane_title :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n title:string ->\n (unit, Libtmux.Error.t) result\n (** Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. *)\n\n val resize_pane :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. *)\n\n val resize_window :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result\n (** Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. *)\n\n val select_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n Libtmux.Layout.t ->\n (unit, Libtmux.Error.t) result\n (** Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. *)\n\n val cycle_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] ->\n (unit, Libtmux.Error.t) result\n (** Select the next or previous tmux preset layout for this window. *)\n\n val move_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (unit, Libtmux.Error.t) result\n (** Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. *)\n\n val swap_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. *)\n\n val rotate_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Forward | `Backward ] ->\n (unit, Libtmux.Error.t) result\n (** Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. *)\n\n val zoom_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Toggle the window's zoom state around this pane. *)\n\n val respawn_pane :\n ?cancel:Cancellation.t ->\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Spawn.t ->\n (unit, Libtmux.Error.t) result\n (** Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. *)\n\n val clear_history :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result\n (** Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. *)\n\n (* END GENERATED OPERATIONS *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** Close owned control clients and descriptors on the owning domain. Later\n calls retain the original cleanup result, including failure. Each owned\n helper gets 200 ms of TERM grace, followed by KILL if needed and reaping.\n This is not a whole-client deadline or a bound on uninterruptible kernel\n work. No signal targets the daemon. tmux's [exit-unattached] and\n [exit-empty] policies can end the daemon after its clients or sessions\n disappear. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":297,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix","doc":{"summary":"An explicit generation-bound connection. Applications retain ownership of the endpoint choice and resource lifetime.","body":"## What is on here\n\nA client does a great many things, so this module has a great many functions. They fall into a few groups:\n\n**Connecting and closing.** {!Client.connect} attaches to a daemon that is already running, given a {!Libtmux.Endpoint.t}; the daemon needs at least one session and must share the caller's PID namespace and filesystem. {!Client.close} releases the control clients and descriptors the client owns and sends no signal to the daemon. {!Client.source} and {!Client.version} read what the client is bound to without I/O, and {!Client.cleanup} returns the {!Cleanup.t} report that retains failed releases.\n\n{!Client.connect}, {!Client.close}, {!Client.source}, {!Client.version} and {!Client.cleanup}\n\n**Listing everything.** {!Client.capture} lists sessions, windows, window links, panes and clients with a fixed number of listing commands and returns a {!Libtmux.Snapshot}. The listings span an interval rather than one instant, and a race between them fails validation. Reading the snapshot, even after {!Client.close}, performs no I/O: filter its collections with {!Libtmux.Expr} and {!Libtmux.Query.matching}, or look an entity up with {!Libtmux.Snapshot.find_pane}.\n\n{!Client.capture}, {!Libtmux.Snapshot}, {!Libtmux.Expr}, {!Libtmux.Query.matching} and {!Libtmux.Snapshot.find_pane}\n\n**Reading a pane.** {!Client.capture_text} returns the rendered rows of a pane's ordinary screen, from `start` to `end_` inclusive, as a {!Libtmux.Captured_text}; it works through a private file in a scratch directory the daemon can also read. {!Client.wait_for_text} captures again after output until the screen contains the text or the deadline passes. {!Client.subscribe} returns a {!Subscription.t} of the bytes the pane prints once it is admitted, read with {!Subscription.next}; overflow and layout or membership changes end it with an explicit gap.\n\n{!Client.capture_text}, {!Client.wait_for_text}, {!Client.subscribe} and {!Subscription.next}\n\n**Sending input and synchronizing.** {!Client.send_text} writes literal bytes to a pane and {!Client.send_keys} sends a list of {!Libtmux.Key.t} in order; neither adds an Enter. {!Client.wait_for} waits on a named tmux semaphore using a dedicated lane, and {!Client.signal} releases a waiter or keeps the signal for a later wait. {!Client.signal} does not signal an OS process.\n\n{!Client.send_text}, {!Client.send_keys}, {!Client.wait_for} and {!Client.signal}\n\n**Creating things.** {!Client.create_session} creates a detached session and fails on a name collision. {!Client.create_window} adds a detached window to a session and rejects an occupied explicit index, and {!Client.split_pane} adds a detached pane beside a target. {!Client.break_pane} moves an existing pane into a new window at an explicit index. Each returns a {!Libtmux.Created.t} with the IDs tmux reports.\n\n{!Client.create_session}, {!Client.create_window}, {!Client.split_pane} and {!Client.break_pane}\n\n**Changing things.** A function ending in `_at` addresses the window at an index, or the client bearing a name, as it is when the command runs rather than when a snapshot was captured. {!Client.kill_window} destroys the window, all its session links and every pane in it, while {!Client.unlink_window_at} removes one link and tmux rejects removing a window's last link unless `allow_kill` is true. Resize and layout functions request a geometry: tmux can constrain the result, so capture again to observe it.\n\n- Sessions: {!Client.rename_session} and {!Client.kill_session}\n- Windows: {!Client.rename_window}, {!Client.select_window_at}, {!Client.link_window}, {!Client.unlink_window_at}, {!Client.move_window_at}, {!Client.resize_window}, {!Client.select_layout}, {!Client.cycle_layout} and {!Client.kill_window}\n- Panes: {!Client.select_pane}, {!Client.set_pane_title}, {!Client.resize_pane}, {!Client.move_pane}, {!Client.swap_panes}, {!Client.rotate_panes}, {!Client.zoom_pane}, {!Client.respawn_pane}, {!Client.clear_history} and {!Client.kill_pane}\n- Clients: {!Client.switch_client_at}, {!Client.request_detach_client_at}, {!Client.refresh_client_at} and {!Client.resize_control_client_at}\n\n**Options, hooks and environment.** Every option and hook function takes a {!Libtmux.Options.type-scope}, so one function serves the server, the global session and window tables, and a session, window or pane. {!Client.capture_options}, {!Client.capture_hooks} and {!Client.capture_environment} return a whole table, while {!Client.read_option} and {!Client.read_hook} read one exact name and return `None` when there is no entry. Option text is literal, with tmux format expansion disabled, and {!Client.set_hook} encodes {!Libtmux.Hook.command} values as command data, not shell code. {!Client.unset_environment} removes the local entry so a global value applies again, while {!Client.remove_environment} stores a removal marker that excludes the variable from future panes.\n\n- Options: {!Client.capture_options}, {!Client.read_option}, {!Client.set_option}, {!Client.unset_option} and {!Client.clear_option_array}\n- Hooks: {!Client.capture_hooks}, {!Client.read_hook}, {!Client.set_hook}, {!Client.remove_hook} and {!Client.run_hook}\n- Environment: {!Client.capture_environment}, {!Client.set_environment}, {!Client.unset_environment} and {!Client.remove_environment}\n\n**Running a command.** {!Client.submit} validates a {!Libtmux.Command.t} and reserves queue capacity without I/O, returning an {!Operation.t}. {!Client.await} pumps admitted work until that operation finishes; only one blocking caller may own the client at a time. {!Client.run} does both in one call, as most functions above do for the command {!Libtmux.Operations} builds. Keep the handle from {!Client.submit} to read {!Operation.inspect} after a failure or cancellation.\n\n{!Client.submit}, {!Client.await} and {!Client.run}"},"slug":"libtmux_unix-client"},{"id":"Libtmux_unix.Client.await","publicId":"Libtmux_unix.Client.await","qualifiedName":"Libtmux_unix.Client.await","name":"await","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":370,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Pump admitted work until this operation is finished. Only one blocking\n caller may own the client at a time. Cancellation removes queued work or\n drains admitted work before raising [Cancellation.Cancelled]. The handle\n retains its outcome. Draining has at most one exchange timeout from\n detection; local scratch filesystem I/O and owned-child cleanup must also\n finish. Each owned child gets 200 ms of TERM grace before forced\n termination and reaping; scheduling and kernel completion can add time. No\n background scheduler or worker is started. "],"declarations":[{"kind":"function","text":"val await :\n ?cancel:Cancellation.t -> 'a Operation.t -> ('a, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":370,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Pump admitted work until this operation is finished. Only one blocking caller may own the client at a time. Cancellation removes queued work or drains admitted work before raising `Cancellation.Cancelled`. The handle retains its outcome. Draining has at most one exchange timeout from detection; local scratch filesystem I/O and owned-child cleanup must also finish. Each owned child gets 200 ms of TERM grace before forced termination and reaping; scheduling and kernel completion can add time. No background scheduler or worker is started."},"signatures":[{"raw":"val await :\n ?cancel:Cancellation.t -> 'a Operation.t -> ('a, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"'a Operation.t"}],"returns":"('a, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-await"},{"id":"Libtmux_unix.Client.break_pane","publicId":"Libtmux_unix.Client.break_pane","qualifiedName":"Libtmux_unix.Client.break_pane","name":"break_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":680,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Move the pane into a new window at an explicit session index. An occupied\n destination fails. The returned IDs describe the resulting context; the\n pane itself already existed. "],"declarations":[{"kind":"function","text":"val break_pane :\n ?cancel:Cancellation.t ->\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":680,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Move the pane into a new window at an explicit session index. An occupied destination fails. The returned IDs describe the resulting context; the pane itself already existed."},"signatures":[{"raw":"val break_pane :\n ?cancel:Cancellation.t ->\n ?name:string ->\n t ->\n Libtmux.Pane.target ->\n session:Libtmux.Session.target ->\n index:int -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-break_pane"},{"id":"Libtmux_unix.Client.capture","publicId":"Libtmux_unix.Client.capture","qualifiedName":"Libtmux_unix.Client.capture","name":"capture","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":389,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Acquire a complete graph over a recorded interval, with a fixed number of\n listing commands. Races fail validation. Access to returned values\n performs no I/O, including after closing the client. "],"declarations":[{"kind":"function","text":"val capture :\n ?cancel:Cancellation.t -> t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":389,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Acquire a complete graph over a recorded interval, with a fixed number of listing commands. Races fail validation. Access to returned values performs no I/O, including after closing the client.","examples":[{"lang":"ocaml","code":"(* docs:begin capture-graph *)\nopen Libtmux\nmodule Client = Libtmux_unix.Client\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n(* docs:end capture-graph *)\n\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_graph.ml","intro":"Navigate the typed object graph. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_graph.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"graph: 2 sessions, 2 windows, 3 links, 2 panes\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val capture :\n ?cancel:Cancellation.t -> t -> (Libtmux.Snapshot.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"(Libtmux.Snapshot.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-capture"},{"id":"Libtmux_unix.Client.capture_environment","publicId":"Libtmux_unix.Client.capture_environment","qualifiedName":"Libtmux_unix.Client.capture_environment","name":"capture_environment","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":491,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Acquire a bounded table through a read-only command process. Its response\n must identify the bound daemon while the original pidfd remains live.\n Unsupported external variable names fail decoding; they are not omitted.\n "],"declarations":[{"kind":"function","text":"val capture_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":491,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Acquire a bounded table through a read-only command process. Its response must identify the bound daemon while the original pidfd remains live. Unsupported external variable names fail decoding; they are not omitted."},"signatures":[{"raw":"val capture_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n (Libtmux.Environment.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"}],"returns":"(Libtmux.Environment.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-capture_environment"},{"id":"Libtmux_unix.Client.capture_hooks","publicId":"Libtmux_unix.Client.capture_hooks","qualifiedName":"Libtmux_unix.Client.capture_hooks","name":"capture_hooks","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":588,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Capture locally configured built-in hooks. Command values are tmux's\n printed representation, retained as data. "],"declarations":[{"kind":"function","text":"val capture_hooks :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":588,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Capture locally configured built-in hooks. Command values are tmux's printed representation, retained as data."},"signatures":[{"raw":"val capture_hooks :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"}],"returns":"(Libtmux.Options.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-capture_hooks"},{"id":"Libtmux_unix.Client.capture_options","publicId":"Libtmux_unix.Client.capture_options","qualifiedName":"Libtmux_unix.Client.capture_options","name":"capture_options","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":531,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Acquire one bounded option table, excluding hooks. The default includes\n only local entries. Inherited table enumeration includes built-ins;\n inherited user options require [read_option] with their explicit name.\n Built-in descriptors cover every supported release from tmux 3.3a through\n 3.8; other versions return {!Libtmux.Error.Unsupported}. "],"declarations":[{"kind":"function","text":"val capture_options :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n (Libtmux.Options.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":531,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Acquire one bounded option table, excluding hooks. The default includes only local entries. Inherited table enumeration includes built-ins; inherited user options require `read_option` with their explicit name. Built-in descriptors cover every supported release from tmux 3.3a through 3.8; other versions return {!Libtmux.Error.Unsupported}."},"signatures":[{"raw":"val capture_options :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t -> Libtmux.Options.scope -> (Libtmux.Options.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"}],"returns":"(Libtmux.Options.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-capture_options"},{"id":"Libtmux_unix.Client.capture_text","publicId":"Libtmux_unix.Client.capture_text","qualifiedName":"Libtmux_unix.Client.capture_text","name":"capture_text","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":395,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Capture ordinary rendered screen rows, inclusively, via an owned paste\n buffer and private file. Reject applicable capture/save hooks. The scratch\n directory defaults to [/tmp] and must be local storage shared with the\n daemon. Pending and alternate-screen byte modes are unsupported. This\n observes an interval and establishes no stream continuity barrier. "],"declarations":[{"kind":"function","text":"val capture_text :\n ?cancel:Cancellation.t ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int ->\n end_:int ->\n (Rendered.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":395,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Capture ordinary rendered screen rows, inclusively, via an owned paste buffer and private file. Reject applicable capture/save hooks. The scratch directory defaults to `/tmp` and must be local storage shared with the daemon. Pending and alternate-screen byte modes are unsupported. This observes an interval and establishes no stream continuity barrier."},"signatures":[{"raw":"val capture_text :\n ?cancel:Cancellation.t ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n start:int -> end_:int -> (Rendered.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"scratch_dir","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"},{"name":"start","type":"int","keywordOnly":true},{"name":"end_","type":"int","keywordOnly":true}],"returns":"(Rendered.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-capture_text"},{"id":"Libtmux_unix.Client.cleanup","publicId":"Libtmux_unix.Client.cleanup","qualifiedName":"Libtmux_unix.Client.cleanup","name":"cleanup","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":313,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read the report supplied at connection time, or its fresh default.\n {!Cleanup.inspect} remains available after close. "],"declarations":[{"kind":"function","text":"val cleanup : t -> Cleanup.t","source":{"file":"unix/libtmux_unix.mli","line":313,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Read the report supplied at connection time, or its fresh default. {!Cleanup.inspect} remains available after close."},"signatures":[{"raw":"val cleanup : t -> Cleanup.t","params":[{"name":"arg1","type":"t"}],"returns":"Cleanup.t"}],"slug":"libtmux_unix-client-cleanup"},{"id":"Libtmux_unix.Client.clear_history","publicId":"Libtmux_unix.Client.clear_history","qualifiedName":"Libtmux_unix.Client.clear_history","name":"clear_history","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":860,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Clear stored scrollback for this pane. The visible screen and running\n process remain; later captures cannot recover discarded history. "],"declarations":[{"kind":"function","text":"val clear_history :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":860,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Clear stored scrollback for this pane. The visible screen and running process remain; later captures cannot recover discarded history."},"signatures":[{"raw":"val clear_history :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-clear_history"},{"id":"Libtmux_unix.Client.clear_option_array","publicId":"Libtmux_unix.Client.clear_option_array","qualifiedName":"Libtmux_unix.Client.clear_option_array","name":"clear_option_array","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":580,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a local empty array, masking inheritance. "],"declarations":[{"kind":"function","text":"val clear_option_array :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":580,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set a local empty array, masking inheritance."},"signatures":[{"raw":"val clear_option_array :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-clear_option_array"},{"id":"Libtmux_unix.Client.close","publicId":"Libtmux_unix.Client.close","qualifiedName":"Libtmux_unix.Client.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":870,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Close owned control clients and descriptors on the owning domain. Later\n calls retain the original cleanup result, including failure. Each owned\n helper gets 200 ms of TERM grace, followed by KILL if needed and reaping.\n This is not a whole-client deadline or a bound on uninterruptible kernel\n work. No signal targets the daemon. tmux's [exit-unattached] and\n [exit-empty] policies can end the daemon after its clients or sessions\n disappear. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":870,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Close owned control clients and descriptors on the owning domain. Later calls retain the original cleanup result, including failure. Each owned helper gets 200 ms of TERM grace, followed by KILL if needed and reaping. This is not a whole-client deadline or a bound on uninterruptible kernel work. No signal targets the daemon. tmux's `exit-unattached` and `exit-empty` policies can end the daemon after its clients or sessions disappear."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-close"},{"id":"Libtmux_unix.Client.connect","publicId":"Libtmux_unix.Client.connect","qualifiedName":"Libtmux_unix.Client.connect","name":"connect","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":300,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Attach to an existing local daemon with at least one session. The caller\n and daemon must share the PID namespace and filesystem. A local socket\n pathname alone does not establish these preconditions. [timeout] is the\n maximum seconds per control exchange, defaulting to one second. Requires\n Linux pidfd support. The client belongs to the current domain. Initial and\n auxiliary attachments suppress tmux's [update-environment] behavior. "],"declarations":[{"kind":"function","text":"val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n Libtmux.Endpoint.t ->\n (t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":300,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Attach to an existing local daemon with at least one session. The caller and daemon must share the PID namespace and filesystem. A local socket pathname alone does not establish these preconditions. `timeout` is the maximum seconds per control exchange, defaulting to one second. Requires Linux pidfd support. The client belongs to the current domain. Initial and auxiliary attachments suppress tmux's `update-environment` behavior."},"signatures":[{"raw":"val connect :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float -> Libtmux.Endpoint.t -> (t, Libtmux.Error.t) result","params":[{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"Libtmux.Endpoint.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-connect"},{"id":"Libtmux_unix.Client.create_session","publicId":"Libtmux_unix.Client.create_session","qualifiedName":"Libtmux_unix.Client.create_session","name":"create_session","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":646,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Create a detached session on the bound daemon. Name collisions fail. "],"declarations":[{"kind":"function","text":"val create_session :\n ?cancel:Cancellation.t ->\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n name:string ->\n unit ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":646,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Create a detached session on the bound daemon. Name collisions fail."},"signatures":[{"raw":"val create_session :\n ?cancel:Cancellation.t ->\n ?window_name:string ->\n ?width:int ->\n ?height:int ->\n ?spawn:Libtmux.Spawn.t ->\n t -> name:string -> unit -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"window_name","type":"string","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg2","type":"unit"}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-create_session"},{"id":"Libtmux_unix.Client.create_window","publicId":"Libtmux_unix.Client.create_window","qualifiedName":"Libtmux_unix.Client.create_window","name":"create_window","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":658,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Create detached, rejecting an occupied explicit index. "],"declarations":[{"kind":"function","text":"val create_window :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Session.target ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":658,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Create detached, rejecting an occupied explicit index.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet create_window client (initial : Created.t) spawn =\n let created =\n get (Client.create_window client initial.session ~name:\"logs\" ~spawn)\n in\n let window =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id created.window)\n |> Option.get\n in\n assert (Window.name window = \"logs\");\n Printf.printf \"created: %s\\n\" (Window.name window)\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary create_window\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_create_window.ml","intro":"Create a window. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_create_window.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"created: logs\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val create_window :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?name:string ->\n ?spawn:Libtmux.Spawn.t ->\n t -> Libtmux.Session.target -> (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"name","type":"string","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-create_window"},{"id":"Libtmux_unix.Client.cycle_layout","publicId":"Libtmux_unix.Client.cycle_layout","qualifiedName":"Libtmux_unix.Client.cycle_layout","name":"cycle_layout","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":804,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Select the next or previous tmux preset layout for this window. "],"declarations":[{"kind":"function","text":"val cycle_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":804,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Select the next or previous tmux preset layout for this window."},"signatures":[{"raw":"val cycle_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Next | `Previous ] -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"[ `Next | `Previous ]"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-cycle_layout"},{"id":"Libtmux_unix.Client.kill_pane","publicId":"Libtmux_unix.Client.kill_pane","qualifiedName":"Libtmux_unix.Client.kill_pane","name":"kill_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":708,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Destroy the target pane and its running process. tmux removes a window\n that becomes empty and may remove its now-empty sessions. "],"declarations":[{"kind":"function","text":"val kill_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":708,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Destroy the target pane and its running process. tmux removes a window that becomes empty and may remove its now-empty sessions."},"signatures":[{"raw":"val kill_pane :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-kill_pane"},{"id":"Libtmux_unix.Client.kill_session","publicId":"Libtmux_unix.Client.kill_session","qualifiedName":"Libtmux_unix.Client.kill_session","name":"kill_session","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":692,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove the session and its window links. Windows with no other links and\n their panes are destroyed. Removing the last session may stop tmux. "],"declarations":[{"kind":"function","text":"val kill_session :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":692,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Remove the session and its window links. Windows with no other links and their panes are destroyed. Removing the last session may stop tmux."},"signatures":[{"raw":"val kill_session :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Session.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-kill_session"},{"id":"Libtmux_unix.Client.kill_window","publicId":"Libtmux_unix.Client.kill_window","qualifiedName":"Libtmux_unix.Client.kill_window","name":"kill_window","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":700,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Destroy the window, all its session links and every contained pane. This\n acts on the global window, not a single contextual link. "],"declarations":[{"kind":"function","text":"val kill_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":700,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Destroy the window, all its session links and every contained pane. This acts on the global window, not a single contextual link."},"signatures":[{"raw":"val kill_window :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-kill_window"},{"id":"Libtmux_unix.Client.link_window","publicId":"Libtmux_unix.Client.link_window","qualifiedName":"Libtmux_unix.Client.link_window","name":"link_window","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":735,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Add a session-specific link to the global window at [index], rejecting an\n occupied index. The source window and its panes stay shared. "],"declarations":[{"kind":"function","text":"val link_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":735,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Add a session-specific link to the global window at `index`, rejecting an occupied index. The source window and its panes stay shared."},"signatures":[{"raw":"val link_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n session:Libtmux.Session.target ->\n index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-link_window"},{"id":"Libtmux_unix.Client.move_pane","publicId":"Libtmux_unix.Client.move_pane","qualifiedName":"Libtmux_unix.Client.move_pane","name":"move_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":812,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Move the source pane beside another pane, optionally setting the split\n size. Both targets must belong to the same bound generation. An emptied\n source window is removed by tmux. "],"declarations":[{"kind":"function","text":"val move_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":812,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Move the source pane beside another pane, optionally setting the split size. Both targets must belong to the same bound generation. An emptied source window is removed by tmux."},"signatures":[{"raw":"val move_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n t ->\n Libtmux.Pane.target ->\n beside:Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"size","type":"Libtmux.Geometry.size","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"beside","type":"Libtmux.Pane.target","keywordOnly":true},{"name":"direction","type":"Libtmux.Geometry.direction","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-move_pane"},{"id":"Libtmux_unix.Client.move_window_at","publicId":"Libtmux_unix.Client.move_window_at","qualifiedName":"Libtmux_unix.Client.move_window_at","name":"move_window_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":745,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Move the source session's current link at [from_index]. Destination\n collisions fail. "],"declarations":[{"kind":"function","text":"val move_window_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":745,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Move the source session's current link at `from_index`. Destination collisions fail.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet move_window client (initial : Created.t) spawn =\n let moving =\n get (Client.create_window client initial.session ~name:\"build\" ~spawn)\n in\n let destination =\n get\n (Client.create_session client ~name:\"destination\" ~window_name:\"landing\"\n ~spawn ())\n in\n get\n (Client.move_window_at client initial.session\n ~from_index:moving.window_index ~session:destination.session ~index:7);\n let window =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id moving.window)\n |> Option.get\n in\n let link =\n Query.exactly_one (Iarray.to_seq (Window.links window)) |> Result.get_ok\n in\n assert (Window_link.index link = 7);\n assert (\n Session.Id.equal\n (Session.id (Window_link.session link))\n (Session.Target.id destination.session));\n Printf.printf \"moved: %s at %d\\n\" (Window.name window)\n (Window_link.index link)\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary move_window\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_move_window.ml","intro":"Move a window between sessions. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_move_window.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"moved: build at 7\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val move_window_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n from_index:int ->\n session:Libtmux.Session.target ->\n index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"from_index","type":"int","keywordOnly":true},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-move_window_at"},{"id":"Libtmux_unix.Client.read_hook","publicId":"Libtmux_unix.Client.read_hook","qualifiedName":"Libtmux_unix.Client.read_hook","name":"read_hook","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":596,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read an exact hook name. Inheritance is included by default; [None] means\n no entry under the selected policy. Missing targets remain errors. "],"declarations":[{"kind":"function","text":"val read_hook :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":596,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Read an exact hook name. Inheritance is included by default; `None` means no entry under the selected policy. Missing targets remain errors."},"signatures":[{"raw":"val read_hook :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string -> (Libtmux.Options.value option, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(Libtmux.Options.value option, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-read_hook"},{"id":"Libtmux_unix.Client.read_option","publicId":"Libtmux_unix.Client.read_option","qualifiedName":"Libtmux_unix.Client.read_option","name":"read_option","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":543,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read one exact name, including user-option inheritance. [None] means no\n entry under the selected policy. An invalid target remains an error. The\n default follows inheritance; this does not identify the defining parent\n scope. "],"declarations":[{"kind":"function","text":"val read_option :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (Libtmux.Options.value option, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":543,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Read one exact name, including user-option inheritance. `None` means no entry under the selected policy. An invalid target remains an error. The default follows inheritance; this does not identify the defining parent scope."},"signatures":[{"raw":"val read_option :\n ?cancel:Cancellation.t ->\n ?include_inherited:bool ->\n t ->\n Libtmux.Options.scope ->\n string -> (Libtmux.Options.value option, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"include_inherited","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(Libtmux.Options.value option, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-read_option"},{"id":"Libtmux_unix.Client.refresh_client_at","publicId":"Libtmux_unix.Client.refresh_client_at","qualifiedName":"Libtmux_unix.Client.refresh_client_at","name":"refresh_client_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":448,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request a redraw; no terminal-rendering completion is implied. "],"declarations":[{"kind":"function","text":"val refresh_client_at :\n ?cancel:Cancellation.t ->\n ?status_only:bool ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":448,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Request a redraw; no terminal-rendering completion is implied."},"signatures":[{"raw":"val refresh_client_at :\n ?cancel:Cancellation.t ->\n ?status_only:bool ->\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"status_only","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-refresh_client_at"},{"id":"Libtmux_unix.Client.remove_environment","publicId":"Libtmux_unix.Client.remove_environment","qualifiedName":"Libtmux_unix.Client.remove_environment","name":"remove_environment","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":523,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Store a removal marker, excluding the variable from future panes. "],"declarations":[{"kind":"function","text":"val remove_environment :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Environment.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":523,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Store a removal marker, excluding the variable from future panes."},"signatures":[{"raw":"val remove_environment :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-remove_environment"},{"id":"Libtmux_unix.Client.remove_hook","publicId":"Libtmux_unix.Client.remove_hook","qualifiedName":"Libtmux_unix.Client.remove_hook","name":"remove_hook","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":623,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove the local hook or one indexed array entry. An inherited hook may\n become effective again; this does not stop work it already started. "],"declarations":[{"kind":"function","text":"val remove_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":623,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Remove the local hook or one indexed array entry. An inherited hook may become effective again; this does not stop work it already started."},"signatures":[{"raw":"val remove_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-remove_hook"},{"id":"Libtmux_unix.Client.rename_session","publicId":"Libtmux_unix.Client.rename_session","qualifiedName":"Libtmux_unix.Client.rename_session","name":"rename_session","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":419,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set the session name, rejecting a conflicting existing name. Bound IDs\n remain usable; existing snapshots retain their captured names. "],"declarations":[{"kind":"function","text":"val rename_session :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n name:string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":419,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set the session name, rejecting a conflicting existing name. Bound IDs remain usable; existing snapshots retain their captured names."},"signatures":[{"raw":"val rename_session :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target -> name:string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-rename_session"},{"id":"Libtmux_unix.Client.rename_window","publicId":"Libtmux_unix.Client.rename_window","qualifiedName":"Libtmux_unix.Client.rename_window","name":"rename_window","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":410,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set the global window name. Every session link observes the new name on\n its next capture; existing snapshots retain the old value. "],"declarations":[{"kind":"function","text":"val rename_window :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n name:string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":410,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set the global window name. Every session link observes the new name on its next capture; existing snapshots retain the old value.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet rename_window client (initial : Created.t) _spawn =\n let before =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id initial.window)\n |> Option.get\n in\n get (Client.rename_window client initial.window ~name:\"editor-main\");\n let after =\n Snapshot.find_window (get (Client.capture client)) (Window.id before)\n |> Option.get\n in\n assert (Window.name before = \"editor\");\n assert (Window.name after = \"editor-main\");\n Printf.printf \"renamed: %s\\n\" (Window.name after)\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary rename_window\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_rename_window.ml","intro":"Rename a window. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_rename_window.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"renamed: editor-main\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val rename_window :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Window.target -> name:string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"name","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-rename_window"},{"id":"Libtmux_unix.Client.request_detach_client_at","publicId":"Libtmux_unix.Client.request_detach_client_at","qualifiedName":"Libtmux_unix.Client.request_detach_client_at","name":"request_detach_client_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":439,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request detachment of the client currently bearing this name. Success\n confirms request processing, not peer exit. Detaching the library's own\n primary lane can lose the response and retire its generation. "],"declarations":[{"kind":"function","text":"val request_detach_client_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Client_name.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":439,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Request detachment of the client currently bearing this name. Success confirms request processing, not peer exit. Detaching the library's own primary lane can lose the response and retire its generation."},"signatures":[{"raw":"val request_detach_client_at :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Client_name.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-request_detach_client_at"},{"id":"Libtmux_unix.Client.resize_control_client_at","publicId":"Libtmux_unix.Client.resize_control_client_at","qualifiedName":"Libtmux_unix.Client.resize_control_client_at","name":"resize_control_client_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":456,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a control client's reported size. tmux rejects terminal clients. "],"declarations":[{"kind":"function","text":"val resize_control_client_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Client_name.t ->\n width:int ->\n height:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":456,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set a control client's reported size. tmux rejects terminal clients."},"signatures":[{"raw":"val resize_control_client_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Client_name.t ->\n width:int -> height:int -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"},{"name":"width","type":"int","keywordOnly":true},{"name":"height","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-resize_control_client_at"},{"id":"Libtmux_unix.Client.resize_pane","publicId":"Libtmux_unix.Client.resize_pane","qualifiedName":"Libtmux_unix.Client.resize_pane","name":"resize_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":773,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. tmux can constrain the result to the\n available layout. Capture again to observe the actual dimensions. "],"declarations":[{"kind":"function","text":"val resize_pane :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":773,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. tmux can constrain the result to the available layout. Capture again to observe the actual dimensions."},"signatures":[{"raw":"val resize_pane :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int -> t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-resize_pane"},{"id":"Libtmux_unix.Client.resize_window","publicId":"Libtmux_unix.Client.resize_window","qualifiedName":"Libtmux_unix.Client.resize_window","name":"resize_window","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":784,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Request positive cell dimensions, supplying at least one dimension. Omit\n either dimension to retain it. Client-size and window-size policies can\n affect subsequent sizing. "],"declarations":[{"kind":"function","text":"val resize_window :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int ->\n t ->\n Libtmux.Window.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":784,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Request positive cell dimensions, supplying at least one dimension. Omit either dimension to retain it. Client-size and window-size policies can affect subsequent sizing."},"signatures":[{"raw":"val resize_window :\n ?cancel:Cancellation.t ->\n ?width:int ->\n ?height:int -> t -> Libtmux.Window.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-resize_window"},{"id":"Libtmux_unix.Client.respawn_pane","publicId":"Libtmux_unix.Client.respawn_pane","qualifiedName":"Libtmux_unix.Client.respawn_pane","name":"respawn_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":849,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Start the supplied command in the existing pane. A running process causes\n failure unless [kill_running:true] explicitly replaces it. The pane ID\n remains unchanged. "],"declarations":[{"kind":"function","text":"val respawn_pane :\n ?cancel:Cancellation.t ->\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Spawn.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":849,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Start the supplied command in the existing pane. A running process causes failure unless `kill_running:true` explicitly replaces it. The pane ID remains unchanged."},"signatures":[{"raw":"val respawn_pane :\n ?cancel:Cancellation.t ->\n ?kill_running:bool ->\n t ->\n Libtmux.Pane.target -> Libtmux.Spawn.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"kill_running","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Spawn.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-respawn_pane"},{"id":"Libtmux_unix.Client.rotate_panes","publicId":"Libtmux_unix.Client.rotate_panes","qualifiedName":"Libtmux_unix.Client.rotate_panes","name":"rotate_panes","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":833,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Rotate pane positions in the selected direction. Pane identities and\n running processes remain attached to their panes. "],"declarations":[{"kind":"function","text":"val rotate_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Forward | `Backward ] ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":833,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Rotate pane positions in the selected direction. Pane identities and running processes remain attached to their panes."},"signatures":[{"raw":"val rotate_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n [ `Backward | `Forward ] -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"[ `Backward | `Forward ]"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-rotate_panes"},{"id":"Libtmux_unix.Client.run","publicId":"Libtmux_unix.Client.run","qualifiedName":"Libtmux_unix.Client.run","name":"run","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":381,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Submit and await. Use the two calls separately to retain an operation\n handle. "],"declarations":[{"kind":"function","text":"val run :\n ?cancel:Cancellation.t ->\n t ->\n 'a Libtmux.Command.t ->\n ('a, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":381,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Submit and await. Use the two calls separately to retain an operation handle."},"signatures":[{"raw":"val run :\n ?cancel:Cancellation.t ->\n t -> 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"'a Libtmux.Command.t"}],"returns":"('a, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-run"},{"id":"Libtmux_unix.Client.run_hook","publicId":"Libtmux_unix.Client.run_hook","qualifiedName":"Libtmux_unix.Client.run_hook","name":"run_hook","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":633,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Run the effective hook in an explicit session, window or pane context. A\n successful result follows completion of its synchronous command queue.\n Background work started by a hook has its own lifetime. A later hook\n failure returns an uncertain outcome; preceding effects remain. Named [@]\n hooks return [Unsupported] because tmux can hide their parse failures in\n the server log. Configuration and inspection remain available. "],"declarations":[{"kind":"function","text":"val run_hook :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":633,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Run the effective hook in an explicit session, window or pane context. A successful result follows completion of its synchronous command queue. Background work started by a hook has its own lifetime. A later hook failure returns an uncertain outcome; preceding effects remain. Named `@` hooks return `Unsupported` because tmux can hide their parse failures in the server log. Configuration and inspection remain available."},"signatures":[{"raw":"val run_hook :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-run_hook"},{"id":"Libtmux_unix.Client.select_layout","publicId":"Libtmux_unix.Client.select_layout","qualifiedName":"Libtmux_unix.Client.select_layout","name":"select_layout","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":795,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Apply a preset or validated custom layout to the window. Pane geometry\n follows tmux layout rules; capture again to observe the result. "],"declarations":[{"kind":"function","text":"val select_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target ->\n Libtmux.Layout.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":795,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Apply a preset or validated custom layout to the window. Pane geometry follows tmux layout rules; capture again to observe the result.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet set_layout client (initial : Created.t) spawn =\n ignore\n (get\n (Client.split_pane client initial.pane ~direction:Geometry.Right ~spawn));\n ignore\n (get\n (Client.split_pane client initial.pane ~direction:Geometry.Right ~spawn));\n get (Client.select_layout client initial.window Layout.Even_horizontal);\n let window =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id initial.window)\n |> Option.get\n in\n let panes = Window.panes window in\n assert (Iarray.length panes = 3);\n assert (\n Iarray.for_all\n (fun pane -> Pane.top pane = 0 && Pane.height pane = Window.height window)\n panes);\n assert (\n Iarray.fold_left (fun width pane -> width + Pane.width pane) 2 panes\n = Window.width window);\n print_endline \"layout: 3 horizontal panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary set_layout\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_layout.ml","intro":"Apply a layout. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_layout.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"layout: 3 horizontal panes\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val select_layout :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Window.target -> Libtmux.Layout.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Window.target"},{"name":"arg3","type":"Libtmux.Layout.t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-select_layout"},{"id":"Libtmux_unix.Client.select_pane","publicId":"Libtmux_unix.Client.select_pane","qualifiedName":"Libtmux_unix.Client.select_pane","name":"select_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":756,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Make the pane active in its containing window. This does not open or\n attach a terminal client. "],"declarations":[{"kind":"function","text":"val select_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":756,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Make the pane active in its containing window. This does not open or attach a terminal client."},"signatures":[{"raw":"val select_pane :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-select_pane"},{"id":"Libtmux_unix.Client.select_window_at","publicId":"Libtmux_unix.Client.select_window_at","qualifiedName":"Libtmux_unix.Client.select_window_at","name":"select_window_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":716,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Operate on the session's current index at execution, not an old link\n incarnation. "],"declarations":[{"kind":"function","text":"val select_window_at :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":716,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Operate on the session's current index at execution, not an old link incarnation."},"signatures":[{"raw":"val select_window_at :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-select_window_at"},{"id":"Libtmux_unix.Client.send_keys","publicId":"Libtmux_unix.Client.send_keys","qualifiedName":"Libtmux_unix.Client.send_keys","name":"send_keys","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":473,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Send named tmux keys in order, without an implicit Enter. Use {!send_text}\n for literal bytes rather than key interpretation. "],"declarations":[{"kind":"function","text":"val send_keys :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Key.t list ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":473,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Send named tmux keys in order, without an implicit Enter. Use {!send_text} for literal bytes rather than key interpretation.","examples":[{"lang":"ocaml","code":"(* docs:begin pane-io *)\nopen Libtmux\nmodule Client = Libtmux_unix.Client\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet find client target =\n Snapshot.find_pane (get (Client.capture client)) (Pane.Target.id target)\n |> Option.get\n\nlet wait client pane text =\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text))\n\nlet drive client (initial : Created.t) spawn =\n let right =\n get (Client.split_pane client initial.pane ~direction:Geometry.Right ~spawn)\n in\n let pane = find client right.pane in\n wait client pane \"showcase ready\";\n let text = \"literal: $HOME; #{pane_id}\" in\n get (Client.send_text client right.pane ~text);\n get (Client.send_keys client right.pane [ Key.Enter ]);\n wait client pane text;\n let screen = get (Client.capture_text client pane ~start:0 ~end_:1) in\n Printf.printf \"sent: %s\\ncaptured: %S\\n\" text screen.bytes;\n get (Client.resize_window client initial.window ~width:100 ~height:30);\n get (Client.resize_pane client right.pane ~width:20);\n let resized = find client right.pane in\n Printf.printf \"resized: %dx%d\\n\" (Pane.width resized) (Pane.height resized)\n(* docs:end pane-io *)\n\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary drive\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_send_keys.ml","intro":"Split a pane, send keys, capture the screen and resize. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_send_keys.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"sent: literal: $HOME; #{pane_id}\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val send_keys :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target -> Libtmux.Key.t list -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Key.t list"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-send_keys"},{"id":"Libtmux_unix.Client.send_text","publicId":"Libtmux_unix.Client.send_text","qualifiedName":"Libtmux_unix.Client.send_text","name":"send_text","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":465,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Literal bytes, without an implicit Enter. NUL is rejected at admission. "],"declarations":[{"kind":"function","text":"val send_text :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n text:string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":465,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Literal bytes, without an implicit Enter. NUL is rejected at admission.","examples":[{"lang":"ocaml","code":"(* docs:begin pane-io *)\nopen Libtmux\nmodule Client = Libtmux_unix.Client\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet find client target =\n Snapshot.find_pane (get (Client.capture client)) (Pane.Target.id target)\n |> Option.get\n\nlet wait client pane text =\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text))\n\nlet drive client (initial : Created.t) spawn =\n let right =\n get (Client.split_pane client initial.pane ~direction:Geometry.Right ~spawn)\n in\n let pane = find client right.pane in\n wait client pane \"showcase ready\";\n let text = \"literal: $HOME; #{pane_id}\" in\n get (Client.send_text client right.pane ~text);\n get (Client.send_keys client right.pane [ Key.Enter ]);\n wait client pane text;\n let screen = get (Client.capture_text client pane ~start:0 ~end_:1) in\n Printf.printf \"sent: %s\\ncaptured: %S\\n\" text screen.bytes;\n get (Client.resize_window client initial.window ~width:100 ~height:30);\n get (Client.resize_pane client right.pane ~width:20);\n let resized = find client right.pane in\n Printf.printf \"resized: %dx%d\\n\" (Pane.width resized) (Pane.height resized)\n(* docs:end pane-io *)\n\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary drive\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_send_keys.ml","intro":"Split a pane, send keys, capture the screen and resize. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_send_keys.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"sent: literal: $HOME; #{pane_id}\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val send_text :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> text:string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-send_text"},{"id":"Libtmux_unix.Client.set_environment","publicId":"Libtmux_unix.Client.set_environment","qualifiedName":"Libtmux_unix.Client.set_environment","name":"set_environment","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":502,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a local environment value for future pane processes. [hidden] defaults\n to false; hidden values remain internal to tmux. Existing processes keep\n their environment. "],"declarations":[{"kind":"function","text":"val set_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":502,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set a local environment value for future pane processes. `hidden` defaults to false; hidden values remain internal to tmux. Existing processes keep their environment."},"signatures":[{"raw":"val set_environment :\n ?cancel:Cancellation.t ->\n ?hidden:bool ->\n t ->\n Libtmux.Environment.scope ->\n name:string -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"hidden","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-set_environment"},{"id":"Libtmux_unix.Client.set_hook","publicId":"Libtmux_unix.Client.set_hook","qualifiedName":"Libtmux_unix.Client.set_hook","name":"set_hook","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":606,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set a hook to a nonempty command list. Without an index, replace the whole\n hook array, or fill the lowest free index when appending. An explicit\n [@name] custom hook stores command text as a user option; it requires\n complete replacement and has no array indexes. [read_hook] returns its\n [Libtmux.Options.Text] value; bulk hook capture includes built-ins.\n Commands may cause arbitrary tmux effects when triggered. Hooks that print\n output are outside the supported control transport contract. "],"declarations":[{"kind":"function","text":"val set_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Hook.command list ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":606,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set a hook to a nonempty command list. Without an index, replace the whole hook array, or fill the lowest free index when appending. An explicit `@name` custom hook stores command text as a user option; it requires complete replacement and has no array indexes. `read_hook` returns its `Libtmux.Options.Text` value; bulk hook capture includes built-ins. Commands may cause arbitrary tmux effects when triggered. Hooks that print output are outside the supported control transport contract."},"signatures":[{"raw":"val set_hook :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string -> Libtmux.Hook.command list -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"Libtmux.Hook.command list"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-set_hook"},{"id":"Libtmux_unix.Client.set_option","publicId":"Libtmux_unix.Client.set_option","qualifiedName":"Libtmux_unix.Client.set_option","name":"set_option","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":555,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Validate the scope and scalar kind before admission. Array values require\n an index, or [append:true]. Without an index, tmux splits appended text\n using the option's separator and fills the lowest unused indexes. Text is\n literal; tmux format expansion is disabled. Hooks use a separate\n operation. "],"declarations":[{"kind":"function","text":"val set_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string ->\n Libtmux.Options.scalar ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":555,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Validate the scope and scalar kind before admission. Array values require an index, or `append:true`. Without an index, tmux splits appended text using the option's separator and fills the lowest unused indexes. Text is literal; tmux format expansion is disabled. Hooks use a separate operation."},"signatures":[{"raw":"val set_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n ?append:bool ->\n t ->\n Libtmux.Options.scope ->\n name:string -> Libtmux.Options.scalar -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"append","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"name","type":"string","keywordOnly":true},{"name":"arg3","type":"Libtmux.Options.scalar"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-set_option"},{"id":"Libtmux_unix.Client.set_pane_title","publicId":"Libtmux_unix.Client.set_pane_title","qualifiedName":"Libtmux_unix.Client.set_pane_title","name":"set_pane_title","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":764,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Set the pane title as literal text, without tmux format expansion. A\n running terminal application can subsequently replace the title. "],"declarations":[{"kind":"function","text":"val set_pane_title :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n title:string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":764,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Set the pane title as literal text, without tmux format expansion. A running terminal application can subsequently replace the title."},"signatures":[{"raw":"val set_pane_title :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> title:string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"title","type":"string","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-set_pane_title"},{"id":"Libtmux_unix.Client.signal","publicId":"Libtmux_unix.Client.signal","qualifiedName":"Libtmux_unix.Client.signal","name":"signal","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":486,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Signal a named tmux semaphore, releasing a waiter or retaining the signal\n for a later {!wait_for}. This does not signal an OS process. "],"declarations":[{"kind":"function","text":"val signal :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":486,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Signal a named tmux semaphore, releasing a waiter or retaining the signal for a later {!wait_for}. This does not signal an OS process."},"signatures":[{"raw":"val signal :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-signal"},{"id":"Libtmux_unix.Client.source","publicId":"Libtmux_unix.Client.source","qualifiedName":"Libtmux_unix.Client.source","name":"source","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":317,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read the retained endpoint, daemon PID and connection generation without\n I/O. "],"declarations":[{"kind":"function","text":"val source : t -> Libtmux.Source.t","source":{"file":"unix/libtmux_unix.mli","line":317,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Read the retained endpoint, daemon PID and connection generation without I/O."},"signatures":[{"raw":"val source : t -> Libtmux.Source.t","params":[{"name":"arg1","type":"t"}],"returns":"Libtmux.Source.t"}],"slug":"libtmux_unix-client-source"},{"id":"Libtmux_unix.Client.split_pane","publicId":"Libtmux_unix.Client.split_pane","qualifiedName":"Libtmux_unix.Client.split_pane","name":"split_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":668,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Create a detached pane beside the target and return the IDs reported by\n tmux. Omitted [size] lets tmux choose the split; tmux rejects splits when\n no space remains. "],"declarations":[{"kind":"function","text":"val split_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":668,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Create a detached pane beside the target and return the IDs reported by tmux. Omitted `size` lets tmux choose the split; tmux rejects splits when no space remains."},"signatures":[{"raw":"val split_pane :\n ?cancel:Cancellation.t ->\n ?size:Libtmux.Geometry.size ->\n ?spawn:Libtmux.Spawn.t ->\n t ->\n Libtmux.Pane.target ->\n direction:Libtmux.Geometry.direction ->\n (Libtmux.Created.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"size","type":"Libtmux.Geometry.size","optional":true,"keywordOnly":true},{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"direction","type":"Libtmux.Geometry.direction","keywordOnly":true}],"returns":"(Libtmux.Created.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-split_pane"},{"id":"Libtmux_unix.Client.submit","publicId":"Libtmux_unix.Client.submit","qualifiedName":"Libtmux_unix.Client.submit","name":"submit","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":366,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Validate and reserve queue capacity without I/O. "],"declarations":[{"kind":"function","text":"val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":366,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Validate and reserve queue capacity without I/O."},"signatures":[{"raw":"val submit :\n t -> 'a Libtmux.Command.t -> ('a Operation.t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"'a Libtmux.Command.t"}],"returns":"('a Operation.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-submit"},{"id":"Libtmux_unix.Client.subscribe","publicId":"Libtmux_unix.Client.subscribe","qualifiedName":"Libtmux_unix.Client.subscribe","name":"subscribe","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":324,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Acquire verified coverage of the pane's observed session/window. Choose\n the least session ID unless explicitly supplied. Reuse one lane per\n session. Defaults: 1 MiB and 1024 queued events per subscriber; at most 16\n subscribers and eight client lanes including commands. Reserve payload\n against the shared 32 MiB budget before admission.\n\n Queue capacities remain reserved while empty. Captures and reads need\n additional scratch space; their admission can return\n {!Libtmux.Error.Capacity} below the subscriber-count limit. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity}shared\n capacity guide} for the combined reservations and process slots.\n\n Data starts after admission's marker. Layout/membership changes end\n continuity conservatively. Overflow emits Gap then End, without blocking\n another subscriber. Blocking delivery advances during Subscription.next.\n There is no snapshot/history barrier or automatic recovery. "],"declarations":[{"kind":"function","text":"val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t ->\n Libtmux.Pane.t ->\n (Subscription.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":324,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Acquire verified coverage of the pane's observed session/window. Choose the least session ID unless explicitly supplied. Reuse one lane per session. Defaults: 1 MiB and 1024 queued events per subscriber; at most 16 subscribers and eight client lanes including commands. Reserve payload against the shared 32 MiB budget before admission.","body":"Queue capacities remain reserved while empty. Captures and reads need additional scratch space; their admission can return {!Libtmux.Error.Capacity} below the subscriber-count limit. See the [shared capacity guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/streaming.md#plan-shared-capacity) for the combined reservations and process slots.\n\nData starts after admission's marker. Layout/membership changes end continuity conservatively. Overflow emits Gap then End, without blocking another subscriber. Blocking delivery advances during Subscription.next. There is no snapshot/history barrier or automatic recovery."},"signatures":[{"raw":"val subscribe :\n ?session:Libtmux.Session.target ->\n ?capacity_bytes:int ->\n ?capacity_events:int ->\n t -> Libtmux.Pane.t -> (Subscription.t, Libtmux.Error.t) result","params":[{"name":"session","type":"Libtmux.Session.target","optional":true,"keywordOnly":true},{"name":"capacity_bytes","type":"int","optional":true,"keywordOnly":true},{"name":"capacity_events","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"}],"returns":"(Subscription.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-subscribe"},{"id":"Libtmux_unix.Client.swap_panes","publicId":"Libtmux_unix.Client.swap_panes","qualifiedName":"Libtmux_unix.Client.swap_panes","name":"swap_panes","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":824,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Exchange pane positions without exchanging their identities or running\n processes. Both targets must belong to the same bound generation. "],"declarations":[{"kind":"function","text":"val swap_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":824,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Exchange pane positions without exchanging their identities or running processes. Both targets must belong to the same bound generation."},"signatures":[{"raw":"val swap_panes :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"},{"name":"arg3","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-swap_panes"},{"id":"Libtmux_unix.Client.switch_client_at","publicId":"Libtmux_unix.Client.switch_client_at","qualifiedName":"Libtmux_unix.Client.switch_client_at","name":"switch_client_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":428,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Switch the client currently bearing this name to the bound session.\n Environment updates are disabled by default. This can move either a\n terminal client or a control client; it does not open a new terminal. "],"declarations":[{"kind":"function","text":"val switch_client_at :\n ?cancel:Cancellation.t ->\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":428,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Switch the client currently bearing this name to the bound session. Environment updates are disabled by default. This can move either a terminal client or a control client; it does not open a new terminal."},"signatures":[{"raw":"val switch_client_at :\n ?cancel:Cancellation.t ->\n ?update_environment:bool ->\n t ->\n Libtmux.Client_name.t ->\n session:Libtmux.Session.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"update_environment","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Client_name.t"},{"name":"session","type":"Libtmux.Session.target","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-switch_client_at"},{"id":"Libtmux_unix.Client.t","publicId":"Libtmux_unix.Client.t","qualifiedName":"Libtmux_unix.Client.t","name":"t","kind":"typealias","package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":298,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"unix/libtmux_unix.mli","line":298,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_unix-client-t"},{"id":"Libtmux_unix.Client.unlink_window_at","publicId":"Libtmux_unix.Client.unlink_window_at","qualifiedName":"Libtmux_unix.Client.unlink_window_at","name":"unlink_window_at","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":725,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Without [allow_kill], tmux rejects removal of the last link to a window.\n "],"declarations":[{"kind":"function","text":"val unlink_window_at :\n ?cancel:Cancellation.t ->\n ?allow_kill:bool ->\n t ->\n Libtmux.Session.target ->\n index:int ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":725,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Without `allow_kill`, tmux rejects removal of the last link to a window."},"signatures":[{"raw":"val unlink_window_at :\n ?cancel:Cancellation.t ->\n ?allow_kill:bool ->\n t -> Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"allow_kill","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Session.target"},{"name":"index","type":"int","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-unlink_window_at"},{"id":"Libtmux_unix.Client.unset_environment","publicId":"Libtmux_unix.Client.unset_environment","qualifiedName":"Libtmux_unix.Client.unset_environment","name":"unset_environment","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":514,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove the local entry, allowing a global value to apply to future panes.\n "],"declarations":[{"kind":"function","text":"val unset_environment :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Environment.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":514,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Remove the local entry, allowing a global value to apply to future panes."},"signatures":[{"raw":"val unset_environment :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Environment.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Environment.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-unset_environment"},{"id":"Libtmux_unix.Client.unset_option","publicId":"Libtmux_unix.Client.unset_option","qualifiedName":"Libtmux_unix.Client.unset_option","name":"unset_option","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":570,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove a local override or one array element. Global built-ins reset to\n their tmux defaults; this does not recursively unset child overrides. "],"declarations":[{"kind":"function","text":"val unset_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t ->\n Libtmux.Options.scope ->\n string ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":570,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Remove a local override or one array element. Global built-ins reset to their tmux defaults; this does not recursively unset child overrides."},"signatures":[{"raw":"val unset_option :\n ?cancel:Cancellation.t ->\n ?index:int ->\n t -> Libtmux.Options.scope -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"index","type":"int","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Options.scope"},{"name":"arg3","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-unset_option"},{"id":"Libtmux_unix.Client.version","publicId":"Libtmux_unix.Client.version","qualifiedName":"Libtmux_unix.Client.version","name":"version","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":321,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Read the bound daemon's observed version without I/O. "],"declarations":[{"kind":"function","text":"val version : t -> string","source":{"file":"unix/libtmux_unix.mli","line":321,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Read the bound daemon's observed version without I/O."},"signatures":[{"raw":"val version : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux_unix-client-version"},{"id":"Libtmux_unix.Client.wait_for","publicId":"Libtmux_unix.Client.wait_for","qualifiedName":"Libtmux_unix.Client.wait_for","name":"wait_for","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":482,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Wait on a named tmux semaphore using a dedicated bound lane. "],"declarations":[{"kind":"function","text":"val wait_for :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":482,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Wait on a named tmux semaphore using a dedicated bound lane."},"signatures":[{"raw":"val wait_for :\n ?cancel:Cancellation.t -> t -> string -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"string"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-wait_for"},{"id":"Libtmux_unix.Client.wait_for_text","publicId":"Libtmux_unix.Client.wait_for_text","qualifiedName":"Libtmux_unix.Client.wait_for_text","name":"wait_for_text","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":348,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Subscribe, capture the ordinary screen immediately, and recapture after\n output. Membership/overflow gaps trigger explicit fresh capture and new\n coverage in the same binding. Maximum pattern: 64 KiB. Success returns a\n capture that contains the text. Transient text between captures may be\n missed. Check the deadline between bounded acquisitions; in-flight I/O\n retains the client's exchange timeout. Release the temporary subscription\n without replacing an earlier error or cancellation; inspect {!cleanup} for\n secondary failures. Otherwise cleanup failure prevents success or renewed\n coverage. No capture/stream barrier exists. "],"declarations":[{"kind":"function","text":"val wait_for_text :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n ?scratch_dir:string ->\n t ->\n Libtmux.Pane.t ->\n text:string ->\n (Rendered.t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":348,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Subscribe, capture the ordinary screen immediately, and recapture after output. Membership/overflow gaps trigger explicit fresh capture and new coverage in the same binding. Maximum pattern: 64 KiB. Success returns a capture that contains the text. Transient text between captures may be missed. Check the deadline between bounded acquisitions; in-flight I/O retains the client's exchange timeout. Release the temporary subscription without replacing an earlier error or cancellation; inspect {!cleanup} for secondary failures. Otherwise cleanup failure prevents success or renewed coverage. No capture/stream barrier exists."},"signatures":[{"raw":"val wait_for_text :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n ?scratch_dir:string ->\n t -> Libtmux.Pane.t -> text:string -> (Rendered.t, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"scratch_dir","type":"string","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.t"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(Rendered.t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-wait_for_text"},{"id":"Libtmux_unix.Client.zoom_pane","publicId":"Libtmux_unix.Client.zoom_pane","qualifiedName":"Libtmux_unix.Client.zoom_pane","name":"zoom_pane","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":842,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Toggle the window's zoom state around this pane. "],"declarations":[{"kind":"function","text":"val zoom_pane :\n ?cancel:Cancellation.t ->\n t ->\n Libtmux.Pane.target ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":842,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Client","doc":{"summary":"Toggle the window's zoom state around this pane."},"signatures":[{"raw":"val zoom_pane :\n ?cancel:Cancellation.t ->\n t -> Libtmux.Pane.target -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Pane.target"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-client-zoom_pane"},{"id":"Libtmux_unix.Operation","publicId":"Libtmux_unix.Operation","qualifiedName":"Libtmux_unix.Operation","name":"Operation","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":116,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Retained outcomes remain inspectable after client closure, on the owning\n domain. Keep the handle from {!Client.submit} before {!Client.await}, then\n read {!Operation.inspect}. The\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/hook-recovery.md}hook\n recovery walkthrough} shows creation evidence after a later hook failure.\n"],"declarations":[{"kind":"module","text":"module Operation : sig\n type 'a t\n\n type cleanup_receipt = {\n cause : Libtmux.Error.t;\n owned_buffers : string list;\n created : Libtmux.Created.t list;\n }\n (** [created] retains IDs reported before a later hook or completion failure.\n It does not prove those resources still exist or authorize retry. *)\n\n type 'a state =\n | Queued\n | Not_started\n | Written\n | Acknowledged\n | Finished of ('a, Libtmux.Error.t) result\n | Outcome_unknown of cleanup_receipt\n\n val id : 'a t -> string\n\n val inspect : 'a t -> ('a state, Libtmux.Error.t) result\n (** No I/O. Results remain inspectable after client closure, on the owning\n domain. *)\n\n val cancel : 'a t -> (unit, Libtmux.Error.t) result\n (** Remove queued work before it is written. Admitted commands retain their\n owner and are drained by {!Client.await}; cancellation does not undo\n effects. Returns [Busy] while another blocking caller owns the client; use\n a {!Cancellation.t} token to interrupt that caller. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":116,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix","doc":{"summary":"Retained outcomes remain inspectable after client closure, on the owning domain. Keep the handle from {!Client.submit} before {!Client.await}, then read {!Operation.inspect}. The [hook recovery walkthrough](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/hook-recovery.md) shows creation evidence after a later hook failure."},"slug":"libtmux_unix-operation"},{"id":"Libtmux_unix.Operation.cancel","publicId":"Libtmux_unix.Operation.cancel","qualifiedName":"Libtmux_unix.Operation.cancel","name":"cancel","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":141,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove queued work before it is written. Admitted commands retain their\n owner and are drained by {!Client.await}; cancellation does not undo\n effects. Returns [Busy] while another blocking caller owns the client; use\n a {!Cancellation.t} token to interrupt that caller. "],"declarations":[{"kind":"function","text":"val cancel : 'a t -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":141,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation","doc":{"summary":"Remove queued work before it is written. Admitted commands retain their owner and are drained by {!Client.await}; cancellation does not undo effects. Returns `Busy` while another blocking caller owns the client; use a {!Cancellation.t} token to interrupt that caller."},"signatures":[{"raw":"val cancel : 'a t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-operation-cancel"},{"id":"Libtmux_unix.Operation.cleanup_receipt","publicId":"Libtmux_unix.Operation.cleanup_receipt","qualifiedName":"Libtmux_unix.Operation.cleanup_receipt","name":"cleanup_receipt","kind":"struct","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" [created] retains IDs reported before a later hook or completion failure.\n It does not prove those resources still exist or authorize retry. "],"declarations":[{"kind":"struct","text":"type cleanup_receipt = {\n cause : Libtmux.Error.t;\n owned_buffers : string list;\n created : Libtmux.Created.t list;\n }","source":{"file":"unix/libtmux_unix.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation","doc":{"summary":"`created` retains IDs reported before a later hook or completion failure. It does not prove those resources still exist or authorize retry."},"signatures":[{"raw":"type cleanup_receipt =\n {\n cause: Libtmux.Error.t ;\n owned_buffers: string list ;\n created: Libtmux.Created.t list }","params":[]}],"slug":"libtmux_unix-operation-cleanup_receipt"},{"id":"Libtmux_unix.Operation.cleanup_receipt.cause","publicId":"Libtmux_unix.Operation.cleanup_receipt.cause","name":"cause","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":120,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cause : Libtmux.Error.t;","source":{"file":"unix/libtmux_unix.mli","line":120,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation.cleanup_receipt","type":"Libtmux.Error.t","qualifiedName":"Libtmux_unix.Operation.cause","slug":"libtmux_unix-operation-cleanup_receipt-cause"},{"id":"Libtmux_unix.Operation.cleanup_receipt.created","publicId":"Libtmux_unix.Operation.cleanup_receipt.created","name":"created","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":122,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"created : Libtmux.Created.t list;","source":{"file":"unix/libtmux_unix.mli","line":122,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation.cleanup_receipt","type":"Libtmux.Created.t list","qualifiedName":"Libtmux_unix.Operation.created","slug":"libtmux_unix-operation-cleanup_receipt-created"},{"id":"Libtmux_unix.Operation.cleanup_receipt.owned_buffers","publicId":"Libtmux_unix.Operation.cleanup_receipt.owned_buffers","name":"owned_buffers","kind":"attribute","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":121,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"owned_buffers : string list;","source":{"file":"unix/libtmux_unix.mli","line":121,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation.cleanup_receipt","type":"string list","qualifiedName":"Libtmux_unix.Operation.owned_buffers","slug":"libtmux_unix-operation-cleanup_receipt-owned_buffers"},{"id":"Libtmux_unix.Operation.id","publicId":"Libtmux_unix.Operation.id","qualifiedName":"Libtmux_unix.Operation.id","name":"id","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val id : 'a t -> string","source":{"file":"unix/libtmux_unix.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation","signatures":[{"raw":"val id : 'a t -> string","params":[{"name":"arg1","type":"'a t"}],"returns":"string"}],"slug":"libtmux_unix-operation-id"},{"id":"Libtmux_unix.Operation.inspect","publicId":"Libtmux_unix.Operation.inspect","qualifiedName":"Libtmux_unix.Operation.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":137,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" No I/O. Results remain inspectable after client closure, on the owning\n domain. "],"declarations":[{"kind":"function","text":"val inspect : 'a t -> ('a state, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":137,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation","doc":{"summary":"No I/O. Results remain inspectable after client closure, on the owning domain."},"signatures":[{"raw":"val inspect : 'a t -> ('a state, Libtmux.Error.t) result","params":[{"name":"arg1","type":"'a t"}],"returns":"('a state, Libtmux.Error.t) result"}],"slug":"libtmux_unix-operation-inspect"},{"id":"Libtmux_unix.Operation.state","publicId":"Libtmux_unix.Operation.state","qualifiedName":"Libtmux_unix.Operation.state","name":"state","kind":"enum","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":127,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type 'a state =\n | Queued\n | Not_started\n | Written\n | Acknowledged\n | Finished of ('a, Libtmux.Error.t) result\n | Outcome_unknown of cleanup_receipt","source":{"file":"unix/libtmux_unix.mli","line":127,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation","signatures":[{"raw":"type 'a state =\n | Queued \n | Not_started \n | Written \n | Acknowledged \n | Finished of ('a, Libtmux.Error.t) result \n | Outcome_unknown of cleanup_receipt ","params":[]}],"slug":"libtmux_unix-operation-state"},{"id":"Libtmux_unix.Operation.state.Acknowledged","publicId":"Libtmux_unix.Operation.state.Acknowledged","name":"Acknowledged","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Acknowledged","source":{"file":"unix/libtmux_unix.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation.state","variant":"unit","qualifiedName":"Libtmux_unix.Operation.Acknowledged","slug":"libtmux_unix-operation-state-acknowledged"},{"id":"Libtmux_unix.Operation.state.Finished","publicId":"Libtmux_unix.Operation.state.Finished","name":"Finished","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":132,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Finished of ('a, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":132,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation.state","variant":"tuple","qualifiedName":"Libtmux_unix.Operation.Finished","slug":"libtmux_unix-operation-state-finished"},{"id":"Libtmux_unix.Operation.state.Not_started","publicId":"Libtmux_unix.Operation.state.Not_started","name":"Not_started","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Not_started","source":{"file":"unix/libtmux_unix.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation.state","variant":"unit","qualifiedName":"Libtmux_unix.Operation.Not_started","slug":"libtmux_unix-operation-state-not_started"},{"id":"Libtmux_unix.Operation.state.Outcome_unknown","publicId":"Libtmux_unix.Operation.state.Outcome_unknown","name":"Outcome_unknown","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":133,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Outcome_unknown of cleanup_receipt","source":{"file":"unix/libtmux_unix.mli","line":133,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation.state","variant":"tuple","qualifiedName":"Libtmux_unix.Operation.Outcome_unknown","slug":"libtmux_unix-operation-state-outcome_unknown"},{"id":"Libtmux_unix.Operation.state.Queued","publicId":"Libtmux_unix.Operation.state.Queued","name":"Queued","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":128,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Queued","source":{"file":"unix/libtmux_unix.mli","line":128,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation.state","variant":"unit","qualifiedName":"Libtmux_unix.Operation.Queued","slug":"libtmux_unix-operation-state-queued"},{"id":"Libtmux_unix.Operation.state.Written","publicId":"Libtmux_unix.Operation.state.Written","name":"Written","kind":"constant","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":130,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Written","source":{"file":"unix/libtmux_unix.mli","line":130,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation.state","variant":"unit","qualifiedName":"Libtmux_unix.Operation.Written","slug":"libtmux_unix-operation-state-written"},{"id":"Libtmux_unix.Operation.t","publicId":"Libtmux_unix.Operation.t","qualifiedName":"Libtmux_unix.Operation.t","name":"t","kind":"typealias","package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":117,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type 'a t","source":{"file":"unix/libtmux_unix.mli","line":117,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Operation","signatures":[{"raw":"type 'a t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_unix-operation-t"},{"id":"Libtmux_unix.Rendered","publicId":"Libtmux_unix.Rendered","qualifiedName":"Libtmux_unix.Rendered","name":"Rendered","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":60,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Blocking native Linux transport. No Eio scheduler is started. "],"declarations":[{"kind":"module","text":"module Rendered = Libtmux.Captured_text","source":{"file":"unix/libtmux_unix.mli","line":60,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix","doc":{"summary":"Blocking native Linux transport. No Eio scheduler is started."},"exportedFrom":"Libtmux.Captured_text","slug":"libtmux_unix-rendered"},{"id":"Libtmux_unix.Subscription","publicId":"Libtmux_unix.Subscription","qualifiedName":"Libtmux_unix.Subscription","name":"Subscription","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":150,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Bounded future-byte observation with Data/Gap/End and local cursors. Polling\n is local; waiting and admission belong to the backend. "],"declarations":[{"kind":"module","text":"module Subscription : sig\n type t\n\n val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result\n (** Remove a queued event without I/O. Owning domain only, including after\n client closure. [None] means no queued event, not proof of continuity. *)\n\n val next :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t ->\n (Libtmux.Output.event option, Libtmux.Error.t) result\n (** Pump all subscription lanes until one event is available. Default deadline\n is one second. [None] follows a consumed End. A deadline keeps the\n subscription active; cancellation closes it and raises Cancelled. *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** End an active subscription with Cancelled and discard pending data.\n Preserve an already ended subscription's terminal reason. Release and reap\n an unused lane; later calls retain cleanup failures. Does not stop the\n daemon. {!poll} can still read the terminal event. *)\n\n val wait_for_bytes :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t ->\n text:string ->\n (Libtmux.Output.cursor, Libtmux.Output.wait_error) result\n (** Consume future bytes until the nonempty pattern matches, including across\n Data boundaries. Maximum pattern: 64 KiB. Return the cursor at the match's\n end within its consumed event. Gaps stop matching; no rendered or earlier\n output is searched. Timeout leaves the subscription active. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":150,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix","doc":{"summary":"Bounded future-byte observation with Data/Gap/End and local cursors. Polling is local; waiting and admission belong to the backend."},"slug":"libtmux_unix-subscription"},{"id":"Libtmux_unix.Subscription.close","publicId":"Libtmux_unix.Subscription.close","qualifiedName":"Libtmux_unix.Subscription.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":166,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" End an active subscription with Cancelled and discard pending data.\n Preserve an already ended subscription's terminal reason. Release and reap\n an unused lane; later calls retain cleanup failures. Does not stop the\n daemon. {!poll} can still read the terminal event. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":166,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Subscription","doc":{"summary":"End an active subscription with Cancelled and discard pending data. Preserve an already ended subscription's terminal reason. Release and reap an unused lane; later calls retain cleanup failures. Does not stop the daemon. {!poll} can still read the terminal event."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-subscription-close"},{"id":"Libtmux_unix.Subscription.next","publicId":"Libtmux_unix.Subscription.next","qualifiedName":"Libtmux_unix.Subscription.next","name":"next","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":157,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Pump all subscription lanes until one event is available. Default deadline\n is one second. [None] follows a consumed End. A deadline keeps the\n subscription active; cancellation closes it and raises Cancelled. "],"declarations":[{"kind":"function","text":"val next :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t ->\n (Libtmux.Output.event option, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":157,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Subscription","doc":{"summary":"Pump all subscription lanes until one event is available. Default deadline is one second. `None` follows a consumed End. A deadline keeps the subscription active; cancellation closes it and raises Cancelled."},"signatures":[{"raw":"val next :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t -> (Libtmux.Output.event option, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"(Libtmux.Output.event option, Libtmux.Error.t) result"}],"slug":"libtmux_unix-subscription-next"},{"id":"Libtmux_unix.Subscription.poll","publicId":"Libtmux_unix.Subscription.poll","qualifiedName":"Libtmux_unix.Subscription.poll","name":"poll","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":153,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Remove a queued event without I/O. Owning domain only, including after\n client closure. [None] means no queued event, not proof of continuity. "],"declarations":[{"kind":"function","text":"val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":153,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Subscription","doc":{"summary":"Remove a queued event without I/O. Owning domain only, including after client closure. `None` means no queued event, not proof of continuity."},"signatures":[{"raw":"val poll : t -> (Libtmux.Output.event option, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(Libtmux.Output.event option, Libtmux.Error.t) result"}],"slug":"libtmux_unix-subscription-poll"},{"id":"Libtmux_unix.Subscription.t","publicId":"Libtmux_unix.Subscription.t","qualifiedName":"Libtmux_unix.Subscription.t","name":"t","kind":"typealias","package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":151,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"unix/libtmux_unix.mli","line":151,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Subscription","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_unix-subscription-t"},{"id":"Libtmux_unix.Subscription.wait_for_bytes","publicId":"Libtmux_unix.Subscription.wait_for_bytes","qualifiedName":"Libtmux_unix.Subscription.wait_for_bytes","name":"wait_for_bytes","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":172,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Consume future bytes until the nonempty pattern matches, including across\n Data boundaries. Maximum pattern: 64 KiB. Return the cursor at the match's\n end within its consumed event. Gaps stop matching; no rendered or earlier\n output is searched. Timeout leaves the subscription active. "],"declarations":[{"kind":"function","text":"val wait_for_bytes :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t ->\n text:string ->\n (Libtmux.Output.cursor, Libtmux.Output.wait_error) result","source":{"file":"unix/libtmux_unix.mli","line":172,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Subscription","doc":{"summary":"Consume future bytes until the nonempty pattern matches, including across Data boundaries. Maximum pattern: 64 KiB. Return the cursor at the match's end within its consumed event. Gaps stop matching; no rendered or earlier output is searched. Timeout leaves the subscription active."},"signatures":[{"raw":"val wait_for_bytes :\n ?cancel:Cancellation.t ->\n ?timeout:float ->\n t ->\n text:string -> (Libtmux.Output.cursor, Libtmux.Output.wait_error) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"},{"name":"text","type":"string","keywordOnly":true}],"returns":"(Libtmux.Output.cursor, Libtmux.Output.wait_error) result"}],"slug":"libtmux_unix-subscription-wait_for_bytes"},{"id":"Libtmux_unix.Terminal","publicId":"Libtmux_unix.Terminal","qualifiedName":"Libtmux_unix.Terminal","name":"Terminal","kind":"module","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":81,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Interactive attachment using borrowed application streams. This utility\n addresses the current daemon explicitly and does not reuse captured targets.\n"],"declarations":[{"kind":"module","text":"module Terminal : sig\n val attach_current :\n ?cancel:Cancellation.t ->\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:Unix.file_descr ->\n ?stdout:Unix.file_descr ->\n ?stderr:Unix.file_descr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t ->\n (unit, Libtmux.Error.t) result\n (** Run an interactive terminal client until it exits. Select the exact\n session ID on the daemon currently listening at [endpoint]; this is\n explicitly unbound and accepts no captured target. No retry or daemon\n startup occurs. A successful result proves client exit, not continued\n attachment. Diagnostics go to [stderr].\n\n Descriptors default to the application's standard streams and remain\n caller-owned. [stdin] must be a terminal. Environment updates and\n read-only mode are disabled by default; inherited [TMUX] and [TMUX_PANE]\n are removed. Cancellation terminates and reaps this terminal client,\n leaves the daemon running, then raises {!Cancellation.Cancelled}. TERM\n gets 200 ms of cooperative grace before KILL and reaping. Scheduling and\n uninterruptible kernel work can add time. Supply [cleanup] before the call\n to retain secondary failures after cancellation. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":81,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix","doc":{"summary":"Interactive attachment using borrowed application streams. This utility addresses the current daemon explicitly and does not reuse captured targets."},"slug":"libtmux_unix-terminal"},{"id":"Libtmux_unix.Terminal.attach_current","publicId":"Libtmux_unix.Terminal.attach_current","qualifiedName":"Libtmux_unix.Terminal.attach_current","name":"attach_current","kind":"function","modifiers":[],"package":"libtmux-unix","product":"core","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":82,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Run an interactive terminal client until it exits. Select the exact\n session ID on the daemon currently listening at [endpoint]; this is\n explicitly unbound and accepts no captured target. No retry or daemon\n startup occurs. A successful result proves client exit, not continued\n attachment. Diagnostics go to [stderr].\n\n Descriptors default to the application's standard streams and remain\n caller-owned. [stdin] must be a terminal. Environment updates and\n read-only mode are disabled by default; inherited [TMUX] and [TMUX_PANE]\n are removed. Cancellation terminates and reaps this terminal client,\n leaves the daemon running, then raises {!Cancellation.Cancelled}. TERM\n gets 200 ms of cooperative grace before KILL and reaping. Scheduling and\n uninterruptible kernel work can add time. Supply [cleanup] before the call\n to retain secondary failures after cancellation. "],"declarations":[{"kind":"function","text":"val attach_current :\n ?cancel:Cancellation.t ->\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:Unix.file_descr ->\n ?stdout:Unix.file_descr ->\n ?stderr:Unix.file_descr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t ->\n (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":82,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Terminal","doc":{"summary":"Run an interactive terminal client until it exits. Select the exact session ID on the daemon currently listening at `endpoint`; this is explicitly unbound and accepts no captured target. No retry or daemon startup occurs. A successful result proves client exit, not continued attachment. Diagnostics go to `stderr`.","body":"Descriptors default to the application's standard streams and remain caller-owned. `stdin` must be a terminal. Environment updates and read-only mode are disabled by default; inherited `TMUX` and `TMUX_PANE` are removed. Cancellation terminates and reaps this terminal client, leaves the daemon running, then raises {!Cancellation.Cancelled}. TERM gets 200 ms of cooperative grace before KILL and reaping. Scheduling and uninterruptible kernel work can add time. Supply `cleanup` before the call to retain secondary failures after cancellation."},"signatures":[{"raw":"val attach_current :\n ?cancel:Cancellation.t ->\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?read_only:bool ->\n ?update_environment:bool ->\n ?stdin:Unix.file_descr ->\n ?stdout:Unix.file_descr ->\n ?stderr:Unix.file_descr ->\n Libtmux.Endpoint.t ->\n session:Libtmux.Session.Id.t -> (unit, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"read_only","type":"bool","optional":true,"keywordOnly":true},{"name":"update_environment","type":"bool","optional":true,"keywordOnly":true},{"name":"stdin","type":"Unix.file_descr","optional":true,"keywordOnly":true},{"name":"stdout","type":"Unix.file_descr","optional":true,"keywordOnly":true},{"name":"stderr","type":"Unix.file_descr","optional":true,"keywordOnly":true},{"name":"arg1","type":"Libtmux.Endpoint.t"},{"name":"session","type":"Libtmux.Session.Id.t","keywordOnly":true}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-terminal-attach_current"},{"id":"Libtmux_unix.Workspace","publicId":"Libtmux_unix.Workspace","qualifiedName":"Libtmux_unix.Workspace","name":"Workspace","kind":"module","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":883,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Apply validated plans with blocking I/O and scoped cancellation tokens.\n Execution handles retain journals and borrow existing clients; bootstrap\n handles own their newly bound clients without owning the daemon. "],"declarations":[{"kind":"module","text":"module Workspace : sig\n type t\n\n val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result\n (** Allocate a generation-bound execution handle without I/O. The caller owns\n the supplied client; closing this handle leaves that client open. *)\n\n val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n Libtmux_workspace.Plan.t ->\n (t, Libtmux.Error.t) result\n (** Allocate a handle for a missing-endpoint plan. Awaiting it starts control\n new-session and binds the same connection. The handle owns its new client;\n it never acquires ownership of the daemon. *)\n\n val await :\n ?cancel:Cancellation.t ->\n ?compensate_on_failure:bool ->\n t ->\n (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result\n (** Apply steps at most once per execution handle. Expected failures return\n retained receipts. On initial application, [compensate_on_failure]\n defaults to [true], attempting removal of proven newly created panes after\n failure or cancellation. Passing [false] skips that compensation.\n Cancellation propagates after recording progress and at most 500 ms of\n protected compensation; use {!inspect} afterward. *)\n\n val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result\n (** Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O,\n on the owning domain, including after execution or client closure. Pending\n steps can settle as the client progresses; earlier receipts keep their own\n step and cleanup arrays. *)\n\n val client : t -> Client.t option\n (** Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent\n actions or recovery. {!close} releases a client owned by this workspace\n execution handle. *)\n\n val close : t -> (unit, Libtmux.Error.t) result\n (** Release an owned client through {!Client.close}. Active await returns\n Busy. Completed journals remain readable after close. *)\nend","source":{"file":"unix/libtmux_unix.mli","line":883,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix","doc":{"summary":"Apply validated plans with blocking I/O and scoped cancellation tokens. Execution handles retain journals and borrow existing clients; bootstrap handles own their newly bound clients without owning the daemon."},"slug":"libtmux_unix-workspace"},{"id":"Libtmux_unix.Workspace.await","publicId":"Libtmux_unix.Workspace.await","qualifiedName":"Libtmux_unix.Workspace.await","name":"await","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":901,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Apply steps at most once per execution handle. Expected failures return\n retained receipts. On initial application, [compensate_on_failure]\n defaults to [true], attempting removal of proven newly created panes after\n failure or cancellation. Passing [false] skips that compensation.\n Cancellation propagates after recording progress and at most 500 ms of\n protected compensation; use {!inspect} afterward. "],"declarations":[{"kind":"function","text":"val await :\n ?cancel:Cancellation.t ->\n ?compensate_on_failure:bool ->\n t ->\n (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":901,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Apply steps at most once per execution handle. Expected failures return retained receipts. On initial application, `compensate_on_failure` defaults to `true`, attempting removal of proven newly created panes after failure or cancellation. Passing `false` skips that compensation. Cancellation propagates after recording progress and at most 500 ms of protected compensation; use {!inspect} afterward.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet checked pp = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" pp error)\n\nlet get result = checked Error.pp result\n\nlet protect ~finally use =\n match use () with\n | value ->\n finally ();\n value\n | exception error ->\n let backtrace = Printexc.get_raw_backtrace () in\n (try finally ()\n with cleanup ->\n Format.eprintf \"cleanup failed: %s@.\" (Printexc.to_string cleanup));\n Printexc.raise_with_backtrace error backtrace\n\n(* docs:begin bootstrap *)\nlet bootstrap ~binary ~version ~directory endpoint =\n let spawn = Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\" ] }) in\n let config =\n Config.make ~directory ~session:\"bootstrap-demo\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n |> checked Config.pp_error\n in\n let plan =\n Plan.make ~endpoint ~version ~observed:None config |> checked Plan.pp_error\n in\n get (Workspace.submit_bootstrap ~binary plan)\n(* docs:end bootstrap *)\n\nlet require_success (receipt : Execution.receipt) =\n if receipt.status <> Execution.Succeeded then (\n Format.eprintf \"workspace %s did not complete@.\" receipt.operation_id;\n (match receipt.status with\n | Execution.Rejected error -> Format.eprintf \"%a@.\" Plan.pp_error error\n | Execution.Unavailable error -> Format.eprintf \"%a@.\" Error.pp error\n | _ -> ());\n Iarray.iter\n (fun (step : Execution.step) ->\n match step.status with\n | Execution.Failed error | Execution.Uncertain error ->\n Format.eprintf \"step %d: %a@.\" step.index Error.pp error\n | _ -> ())\n receipt.steps;\n Option.iter\n (fun error -> Format.eprintf \"compensation: %a@.\" Error.pp error)\n receipt.cleanup_error;\n Iarray.iter\n (fun (cleanup : Execution.cleanup) ->\n match cleanup.outcome with\n | Ok () -> ()\n | Error error -> Format.eprintf \"cleanup: %a@.\" Error.pp error)\n receipt.cleanup;\n failwith \"bootstrap incomplete; no automatic retry\")\n\nlet local_version binary =\n let input = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n protect\n ~finally:(fun () ->\n if Unix.close_process_in input <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line input))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n String.sub version 5 (String.length version - 5)\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let execution =\n bootstrap ~binary:wrapper ~version:(local_version binary) ~directory\n (Endpoint.socket_path socket)\n in\n (* docs:begin await-bootstrap *)\n let snapshot =\n protect\n ~finally:(fun () -> get (Workspace.close execution))\n (fun () ->\n let receipt = get (Workspace.await execution) in\n require_success receipt;\n let client = Option.get (Workspace.client execution) in\n get (Client.capture client))\n (* docs:end await-bootstrap *)\n in\n assert (Iarray.length (Snapshot.sessions snapshot) = 1);\n assert (Iarray.length (Snapshot.windows snapshot) = 1);\n assert (Iarray.length (Snapshot.panes snapshot) = 1);\n assert (\n Session.name (Iarray.get (Snapshot.sessions snapshot) 0)\n = \"bootstrap-demo\");\n assert (Window.name (Iarray.get (Snapshot.windows snapshot) 0) = \"editor\");\n Printf.printf \"socket=%s\\n\" socket;\n print_endline \"bootstrapped: 1 session, 1 window, 1 pane\")\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_bootstrap.ml","intro":"Start a private server and capture its first session. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_bootstrap.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"bootstrapped: 1 session, 1 window, 1 pane\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val await :\n ?cancel:Cancellation.t ->\n ?compensate_on_failure:bool ->\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","params":[{"name":"cancel","type":"Cancellation.t","optional":true,"keywordOnly":true},{"name":"compensate_on_failure","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"(Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result"}],"slug":"libtmux_unix-workspace-await"},{"id":"Libtmux_unix.Workspace.client","publicId":"Libtmux_unix.Workspace.client","qualifiedName":"Libtmux_unix.Workspace.client","name":"client","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":920,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent\n actions or recovery. {!close} releases a client owned by this workspace\n execution handle. "],"declarations":[{"kind":"function","text":"val client : t -> Client.t option","source":{"file":"unix/libtmux_unix.mli","line":920,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Borrow the existing or bootstrapped {!Client.t} without I/O for subsequent actions or recovery. {!close} releases a client owned by this workspace execution handle.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet checked pp = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" pp error)\n\nlet get result = checked Error.pp result\n\nlet protect ~finally use =\n match use () with\n | value ->\n finally ();\n value\n | exception error ->\n let backtrace = Printexc.get_raw_backtrace () in\n (try finally ()\n with cleanup ->\n Format.eprintf \"cleanup failed: %s@.\" (Printexc.to_string cleanup));\n Printexc.raise_with_backtrace error backtrace\n\n(* docs:begin bootstrap *)\nlet bootstrap ~binary ~version ~directory endpoint =\n let spawn = Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\" ] }) in\n let config =\n Config.make ~directory ~session:\"bootstrap-demo\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n |> checked Config.pp_error\n in\n let plan =\n Plan.make ~endpoint ~version ~observed:None config |> checked Plan.pp_error\n in\n get (Workspace.submit_bootstrap ~binary plan)\n(* docs:end bootstrap *)\n\nlet require_success (receipt : Execution.receipt) =\n if receipt.status <> Execution.Succeeded then (\n Format.eprintf \"workspace %s did not complete@.\" receipt.operation_id;\n (match receipt.status with\n | Execution.Rejected error -> Format.eprintf \"%a@.\" Plan.pp_error error\n | Execution.Unavailable error -> Format.eprintf \"%a@.\" Error.pp error\n | _ -> ());\n Iarray.iter\n (fun (step : Execution.step) ->\n match step.status with\n | Execution.Failed error | Execution.Uncertain error ->\n Format.eprintf \"step %d: %a@.\" step.index Error.pp error\n | _ -> ())\n receipt.steps;\n Option.iter\n (fun error -> Format.eprintf \"compensation: %a@.\" Error.pp error)\n receipt.cleanup_error;\n Iarray.iter\n (fun (cleanup : Execution.cleanup) ->\n match cleanup.outcome with\n | Ok () -> ()\n | Error error -> Format.eprintf \"cleanup: %a@.\" Error.pp error)\n receipt.cleanup;\n failwith \"bootstrap incomplete; no automatic retry\")\n\nlet local_version binary =\n let input = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n protect\n ~finally:(fun () ->\n if Unix.close_process_in input <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line input))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n String.sub version 5 (String.length version - 5)\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let execution =\n bootstrap ~binary:wrapper ~version:(local_version binary) ~directory\n (Endpoint.socket_path socket)\n in\n (* docs:begin await-bootstrap *)\n let snapshot =\n protect\n ~finally:(fun () -> get (Workspace.close execution))\n (fun () ->\n let receipt = get (Workspace.await execution) in\n require_success receipt;\n let client = Option.get (Workspace.client execution) in\n get (Client.capture client))\n (* docs:end await-bootstrap *)\n in\n assert (Iarray.length (Snapshot.sessions snapshot) = 1);\n assert (Iarray.length (Snapshot.windows snapshot) = 1);\n assert (Iarray.length (Snapshot.panes snapshot) = 1);\n assert (\n Session.name (Iarray.get (Snapshot.sessions snapshot) 0)\n = \"bootstrap-demo\");\n assert (Window.name (Iarray.get (Snapshot.windows snapshot) 0) = \"editor\");\n Printf.printf \"socket=%s\\n\" socket;\n print_endline \"bootstrapped: 1 session, 1 window, 1 pane\")\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_bootstrap.ml","intro":"Start a private server and capture its first session. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_bootstrap.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"bootstrapped: 1 session, 1 window, 1 pane\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val client : t -> Client.t option","params":[{"name":"arg1","type":"t"}],"returns":"Client.t option"}],"slug":"libtmux_unix-workspace-client"},{"id":"Libtmux_unix.Workspace.close","publicId":"Libtmux_unix.Workspace.close","qualifiedName":"Libtmux_unix.Workspace.close","name":"close","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":925,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Release an owned client through {!Client.close}. Active await returns\n Busy. Completed journals remain readable after close. "],"declarations":[{"kind":"function","text":"val close : t -> (unit, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":925,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Release an owned client through {!Client.close}. Active await returns Busy. Completed journals remain readable after close."},"signatures":[{"raw":"val close : t -> (unit, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(unit, Libtmux.Error.t) result"}],"slug":"libtmux_unix-workspace-close"},{"id":"Libtmux_unix.Workspace.inspect","publicId":"Libtmux_unix.Workspace.inspect","qualifiedName":"Libtmux_unix.Workspace.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":913,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O,\n on the owning domain, including after execution or client closure. Pending\n steps can settle as the client progresses; earlier receipts keep their own\n step and cleanup arrays. "],"declarations":[{"kind":"function","text":"val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":913,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Copy the retained {!type:Libtmux_workspace.Execution.receipt} without I/O, on the owning domain, including after execution or client closure. Pending steps can settle as the client progresses; earlier receipts keep their own step and cleanup arrays."},"signatures":[{"raw":"val inspect :\n t -> (Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result","params":[{"name":"arg1","type":"t"}],"returns":"(Libtmux_workspace.Execution.receipt, Libtmux.Error.t) result"}],"slug":"libtmux_unix-workspace-inspect"},{"id":"Libtmux_unix.Workspace.submit","publicId":"Libtmux_unix.Workspace.submit","qualifiedName":"Libtmux_unix.Workspace.submit","name":"submit","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":886,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Allocate a generation-bound execution handle without I/O. The caller owns\n the supplied client; closing this handle leaves that client open. "],"declarations":[{"kind":"function","text":"val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":886,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Allocate a generation-bound execution handle without I/O. The caller owns the supplied client; closing this handle leaves that client open."},"signatures":[{"raw":"val submit :\n Client.t -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","params":[{"name":"arg1","type":"Client.t"},{"name":"arg2","type":"Libtmux_workspace.Plan.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-workspace-submit"},{"id":"Libtmux_unix.Workspace.submit_bootstrap","publicId":"Libtmux_unix.Workspace.submit_bootstrap","qualifiedName":"Libtmux_unix.Workspace.submit_bootstrap","name":"submit_bootstrap","kind":"function","modifiers":[],"package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":891,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Allocate a handle for a missing-endpoint plan. Awaiting it starts control\n new-session and binds the same connection. The handle owns its new client;\n it never acquires ownership of the daemon. "],"declarations":[{"kind":"function","text":"val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float ->\n Libtmux_workspace.Plan.t ->\n (t, Libtmux.Error.t) result","source":{"file":"unix/libtmux_unix.mli","line":891,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Workspace","doc":{"summary":"Allocate a handle for a missing-endpoint plan. Awaiting it starts control new-session and binds the same connection. The handle owns its new client; it never acquires ownership of the daemon.","examples":[{"lang":"ocaml","code":"open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet checked pp = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" pp error)\n\nlet get result = checked Error.pp result\n\nlet protect ~finally use =\n match use () with\n | value ->\n finally ();\n value\n | exception error ->\n let backtrace = Printexc.get_raw_backtrace () in\n (try finally ()\n with cleanup ->\n Format.eprintf \"cleanup failed: %s@.\" (Printexc.to_string cleanup));\n Printexc.raise_with_backtrace error backtrace\n\n(* docs:begin bootstrap *)\nlet bootstrap ~binary ~version ~directory endpoint =\n let spawn = Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\" ] }) in\n let config =\n Config.make ~directory ~session:\"bootstrap-demo\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n |> checked Config.pp_error\n in\n let plan =\n Plan.make ~endpoint ~version ~observed:None config |> checked Plan.pp_error\n in\n get (Workspace.submit_bootstrap ~binary plan)\n(* docs:end bootstrap *)\n\nlet require_success (receipt : Execution.receipt) =\n if receipt.status <> Execution.Succeeded then (\n Format.eprintf \"workspace %s did not complete@.\" receipt.operation_id;\n (match receipt.status with\n | Execution.Rejected error -> Format.eprintf \"%a@.\" Plan.pp_error error\n | Execution.Unavailable error -> Format.eprintf \"%a@.\" Error.pp error\n | _ -> ());\n Iarray.iter\n (fun (step : Execution.step) ->\n match step.status with\n | Execution.Failed error | Execution.Uncertain error ->\n Format.eprintf \"step %d: %a@.\" step.index Error.pp error\n | _ -> ())\n receipt.steps;\n Option.iter\n (fun error -> Format.eprintf \"compensation: %a@.\" Error.pp error)\n receipt.cleanup_error;\n Iarray.iter\n (fun (cleanup : Execution.cleanup) ->\n match cleanup.outcome with\n | Ok () -> ()\n | Error error -> Format.eprintf \"cleanup: %a@.\" Error.pp error)\n receipt.cleanup;\n failwith \"bootstrap incomplete; no automatic retry\")\n\nlet local_version binary =\n let input = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n protect\n ~finally:(fun () ->\n if Unix.close_process_in input <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line input))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n String.sub version 5 (String.length version - 5)\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let execution =\n bootstrap ~binary:wrapper ~version:(local_version binary) ~directory\n (Endpoint.socket_path socket)\n in\n (* docs:begin await-bootstrap *)\n let snapshot =\n protect\n ~finally:(fun () -> get (Workspace.close execution))\n (fun () ->\n let receipt = get (Workspace.await execution) in\n require_success receipt;\n let client = Option.get (Workspace.client execution) in\n get (Client.capture client))\n (* docs:end await-bootstrap *)\n in\n assert (Iarray.length (Snapshot.sessions snapshot) = 1);\n assert (Iarray.length (Snapshot.windows snapshot) = 1);\n assert (Iarray.length (Snapshot.panes snapshot) = 1);\n assert (\n Session.name (Iarray.get (Snapshot.sessions snapshot) 0)\n = \"bootstrap-demo\");\n assert (Window.name (Iarray.get (Snapshot.windows snapshot) 0) = \"editor\");\n Printf.printf \"socket=%s\\n\" socket;\n print_endline \"bootstrapped: 1 session, 1 window, 1 pane\")\n","sourceUrl":"https://github.com/libtmux/libtmux-ocaml/blob/ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9/examples/showcase_bootstrap.ml","intro":"Start a private server and capture its first session. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide."},{"lang":"console","code":"$ opam exec -- dune exec examples/showcase_bootstrap.exe -- tmux\n","intro":"Run the recorded entry point:"},{"lang":"text","code":"bootstrapped: 1 session, 1 window, 1 pane\n","intro":"Expected outcome line, after the temporary socket path:"}]},"signatures":[{"raw":"val submit_bootstrap :\n ?cleanup:Cleanup.t ->\n ?binary:string ->\n ?timeout:float -> Libtmux_workspace.Plan.t -> (t, Libtmux.Error.t) result","params":[{"name":"cleanup","type":"Cleanup.t","optional":true,"keywordOnly":true},{"name":"binary","type":"string","optional":true,"keywordOnly":true},{"name":"timeout","type":"float","optional":true,"keywordOnly":true},{"name":"arg1","type":"Libtmux_workspace.Plan.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_unix-workspace-submit_bootstrap"},{"id":"Libtmux_unix.Workspace.t","publicId":"Libtmux_unix.Workspace.t","qualifiedName":"Libtmux_unix.Workspace.t","name":"t","kind":"typealias","package":"libtmux-unix","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_unix","source":{"file":"unix/libtmux_unix.mli","line":884,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"unix/libtmux_unix.mli","line":884,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_unix.Workspace","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_unix-workspace-t"},{"id":"Libtmux_workspace","publicId":"Libtmux_workspace","qualifiedName":"Libtmux_workspace","name":"Libtmux_workspace","kind":"module","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":1,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" {!Config} validates workspace descriptions and {!Plan} previews their\n actions without I/O. {!Execution} delegates effects to an explicit executor\n and retains a recovery journal. See the\n {{:https://github.com/libtmux/libtmux-ocaml/blob/master/docs/workspaces.md}workspace\n guide} for JSON loading, preview, apply and receipt inspection. "],"declarations":[{"kind":"module","text":"","source":{"file":"workspace/libtmux_workspace.mli","line":1,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"doc":{"summary":"{!Config} validates workspace descriptions and {!Plan} previews their actions without I/O. {!Execution} delegates effects to an explicit executor and retains a recovery journal. See the [workspace guide](https://github.com/libtmux/libtmux-ocaml/blob/master/docs/workspaces.md) for JSON loading, preview, apply and receipt inspection."},"slug":"libtmux_workspace"},{"id":"Libtmux_workspace.Config","publicId":"Libtmux_workspace.Config","qualifiedName":"Libtmux_workspace.Config","name":"Config","kind":"module","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":10,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Validate native workspace values without contacting tmux or reading the\n filesystem. Relative directories resolve against the document directory;\n only declared variables participate in expansion. "],"declarations":[{"kind":"module","text":"module Config : sig\n type error = { path : string; message : string }\n\n val pp_error : Format.formatter -> error -> unit\n\n type setting = {\n name : string;\n index : int option;\n value : Libtmux.Options.scalar;\n }\n\n type pane = {\n spawn : Libtmux.Spawn.t;\n options : setting list;\n startup : string list;\n direction : Libtmux.Geometry.direction;\n size : Libtmux.Geometry.size option;\n }\n\n type window = {\n name : string;\n cwd : string option;\n environment : (string * string) list;\n options : setting list;\n panes : pane list;\n layout : Libtmux.Layout.t option;\n }\n\n type t\n\n val pane :\n ?spawn:Libtmux.Spawn.t ->\n ?options:setting list ->\n ?startup:string list ->\n ?direction:Libtmux.Geometry.direction ->\n ?size:Libtmux.Geometry.size ->\n unit ->\n pane\n\n val window :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?layout:Libtmux.Layout.t ->\n name:string ->\n pane list ->\n window\n (** Builders are unchecked descriptions; {!make} validates the whole document.\n *)\n\n val make :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?variables:(string * string) list ->\n ?width:int ->\n ?height:int ->\n directory:string ->\n session:string ->\n window list ->\n (t, error) result\n (** Resolve relative working directories against the absolute document\n directory. Explicit variables expand [${NAME}] in directories only; they\n never read the process environment. Cycles and unknown names fail. Command\n arguments, shell code, startup text and environment values remain literal.\n\n At most 64 windows, 256 total panes and 1 MiB of text are accepted. Names\n and settings must be unique in their scope. No filesystem is consulted. *)\n\n val session : t -> string\n val windows : t -> window Iarray.t\n val environment : t -> (string * string) list\n val options : t -> setting list\n val dimensions : t -> int * int\nend","source":{"file":"workspace/libtmux_workspace.mli","line":10,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace","doc":{"summary":"Validate native workspace values without contacting tmux or reading the filesystem. Relative directories resolve against the document directory; only declared variables participate in expansion."},"slug":"libtmux_workspace-config"},{"id":"Libtmux_workspace.Config.dimensions","publicId":"Libtmux_workspace.Config.dimensions","qualifiedName":"Libtmux_workspace.Config.dimensions","name":"dimensions","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":83,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val dimensions : t -> int * int","source":{"file":"workspace/libtmux_workspace.mli","line":83,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val dimensions : t -> int * int","params":[{"name":"arg1","type":"t"}],"returns":"int * int"}],"slug":"libtmux_workspace-config-dimensions"},{"id":"Libtmux_workspace.Config.environment","publicId":"Libtmux_workspace.Config.environment","qualifiedName":"Libtmux_workspace.Config.environment","name":"environment","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":81,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val environment : t -> (string * string) list","source":{"file":"workspace/libtmux_workspace.mli","line":81,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val environment : t -> (string * string) list","params":[{"name":"arg1","type":"t"}],"returns":"(string * string) list"}],"slug":"libtmux_workspace-config-environment"},{"id":"Libtmux_workspace.Config.error","publicId":"Libtmux_workspace.Config.error","qualifiedName":"Libtmux_workspace.Config.error","name":"error","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type error = { path : string; message : string }","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"type error = {\n path: string ;\n message: string }","params":[]}],"slug":"libtmux_workspace-config-error"},{"id":"Libtmux_workspace.Config.error.message","publicId":"Libtmux_workspace.Config.error.message","name":"message","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"message : string","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.error","type":"string","qualifiedName":"Libtmux_workspace.Config.message","slug":"libtmux_workspace-config-error-message"},{"id":"Libtmux_workspace.Config.error.path","publicId":"Libtmux_workspace.Config.error.path","name":"path","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"path : string;","source":{"file":"workspace/libtmux_workspace.mli","line":11,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.error","type":"string","qualifiedName":"Libtmux_workspace.Config.path","slug":"libtmux_workspace-config-error-path"},{"id":"Libtmux_workspace.Config.make","publicId":"Libtmux_workspace.Config.make","qualifiedName":"Libtmux_workspace.Config.make","name":"make","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":60,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Resolve relative working directories against the absolute document\n directory. Explicit variables expand [${NAME}] in directories only; they\n never read the process environment. Cycles and unknown names fail. Command\n arguments, shell code, startup text and environment values remain literal.\n\n At most 64 windows, 256 total panes and 1 MiB of text are accepted. Names\n and settings must be unique in their scope. No filesystem is consulted. "],"declarations":[{"kind":"function","text":"val make :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?variables:(string * string) list ->\n ?width:int ->\n ?height:int ->\n directory:string ->\n session:string ->\n window list ->\n (t, error) result","source":{"file":"workspace/libtmux_workspace.mli","line":60,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","doc":{"summary":"Resolve relative working directories against the absolute document directory. Explicit variables expand `${NAME}` in directories only; they never read the process environment. Cycles and unknown names fail. Command arguments, shell code, startup text and environment values remain literal.","body":"At most 64 windows, 256 total panes and 1 MiB of text are accepted. Names and settings must be unique in their scope. No filesystem is consulted."},"signatures":[{"raw":"val make :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?variables:(string * string) list ->\n ?width:int ->\n ?height:int ->\n directory:string -> session:string -> window list -> (t, error) result","params":[{"name":"cwd","type":"string","optional":true,"keywordOnly":true},{"name":"environment","type":"(string * string) list","optional":true,"keywordOnly":true},{"name":"options","type":"setting list","optional":true,"keywordOnly":true},{"name":"variables","type":"(string * string) list","optional":true,"keywordOnly":true},{"name":"width","type":"int","optional":true,"keywordOnly":true},{"name":"height","type":"int","optional":true,"keywordOnly":true},{"name":"directory","type":"string","keywordOnly":true},{"name":"session","type":"string","keywordOnly":true},{"name":"arg1","type":"window list"}],"returns":"(t, error) result"}],"slug":"libtmux_workspace-config-make"},{"id":"Libtmux_workspace.Config.options","publicId":"Libtmux_workspace.Config.options","qualifiedName":"Libtmux_workspace.Config.options","name":"options","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":82,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val options : t -> setting list","source":{"file":"workspace/libtmux_workspace.mli","line":82,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val options : t -> setting list","params":[{"name":"arg1","type":"t"}],"returns":"setting list"}],"slug":"libtmux_workspace-config-options"},{"id":"Libtmux_workspace.Config.pane","publicId":"Libtmux_workspace.Config.pane","qualifiedName":"Libtmux_workspace.Config.pane","name":"pane","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":40,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pane :\n ?spawn:Libtmux.Spawn.t ->\n ?options:setting list ->\n ?startup:string list ->\n ?direction:Libtmux.Geometry.direction ->\n ?size:Libtmux.Geometry.size ->\n unit ->\n pane","source":{"file":"workspace/libtmux_workspace.mli","line":40,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val pane :\n ?spawn:Libtmux.Spawn.t ->\n ?options:setting list ->\n ?startup:string list ->\n ?direction:Libtmux.Geometry.direction ->\n ?size:Libtmux.Geometry.size -> unit -> pane","params":[{"name":"spawn","type":"Libtmux.Spawn.t","optional":true,"keywordOnly":true},{"name":"options","type":"setting list","optional":true,"keywordOnly":true},{"name":"startup","type":"string list","optional":true,"keywordOnly":true},{"name":"direction","type":"Libtmux.Geometry.direction","optional":true,"keywordOnly":true},{"name":"size","type":"Libtmux.Geometry.size","optional":true,"keywordOnly":true},{"name":"arg1","type":"unit"}],"returns":"pane"}],"slug":"libtmux_workspace-config-pane"},{"id":"Libtmux_workspace.Config.pane:type","publicId":"Libtmux_workspace.Config.pane:type","qualifiedName":"Libtmux_workspace.Config.pane","name":"pane","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":21,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type pane = {\n spawn : Libtmux.Spawn.t;\n options : setting list;\n startup : string list;\n direction : Libtmux.Geometry.direction;\n size : Libtmux.Geometry.size option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":21,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"type pane =\n {\n spawn: Libtmux.Spawn.t ;\n options: setting list ;\n startup: string list ;\n direction: Libtmux.Geometry.direction ;\n size: Libtmux.Geometry.size option }","params":[]}],"slug":"libtmux_workspace-config-pane-type"},{"id":"Libtmux_workspace.Config.pane:type.direction","publicId":"Libtmux_workspace.Config.pane:type.direction","name":"direction","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":25,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"direction : Libtmux.Geometry.direction;","source":{"file":"workspace/libtmux_workspace.mli","line":25,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.pane:type","type":"Libtmux.Geometry.direction","qualifiedName":"Libtmux_workspace.Config.direction","slug":"libtmux_workspace-config-pane-type-direction"},{"id":"Libtmux_workspace.Config.pane:type.options","publicId":"Libtmux_workspace.Config.pane:type.options","name":"options","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":23,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"options : setting list;","source":{"file":"workspace/libtmux_workspace.mli","line":23,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.pane:type","type":"setting list","qualifiedName":"Libtmux_workspace.Config.options","slug":"libtmux_workspace-config-pane-type-options"},{"id":"Libtmux_workspace.Config.pane:type.size","publicId":"Libtmux_workspace.Config.pane:type.size","name":"size","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":26,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"size : Libtmux.Geometry.size option;","source":{"file":"workspace/libtmux_workspace.mli","line":26,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.pane:type","type":"Libtmux.Geometry.size option","qualifiedName":"Libtmux_workspace.Config.size","slug":"libtmux_workspace-config-pane-type-size"},{"id":"Libtmux_workspace.Config.pane:type.spawn","publicId":"Libtmux_workspace.Config.pane:type.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":22,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Libtmux.Spawn.t;","source":{"file":"workspace/libtmux_workspace.mli","line":22,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.pane:type","type":"Libtmux.Spawn.t","qualifiedName":"Libtmux_workspace.Config.spawn","slug":"libtmux_workspace-config-pane-type-spawn"},{"id":"Libtmux_workspace.Config.pane:type.startup","publicId":"Libtmux_workspace.Config.pane:type.startup","name":"startup","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":24,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"startup : string list;","source":{"file":"workspace/libtmux_workspace.mli","line":24,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.pane:type","type":"string list","qualifiedName":"Libtmux_workspace.Config.startup","slug":"libtmux_workspace-config-pane-type-startup"},{"id":"Libtmux_workspace.Config.pp_error","publicId":"Libtmux_workspace.Config.pp_error","qualifiedName":"Libtmux_workspace.Config.pp_error","name":"pp_error","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":13,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp_error : Format.formatter -> error -> unit","source":{"file":"workspace/libtmux_workspace.mli","line":13,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val pp_error : Format.formatter -> error -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"error"}],"returns":"unit"}],"slug":"libtmux_workspace-config-pp_error"},{"id":"Libtmux_workspace.Config.session","publicId":"Libtmux_workspace.Config.session","qualifiedName":"Libtmux_workspace.Config.session","name":"session","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":79,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val session : t -> string","source":{"file":"workspace/libtmux_workspace.mli","line":79,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val session : t -> string","params":[{"name":"arg1","type":"t"}],"returns":"string"}],"slug":"libtmux_workspace-config-session"},{"id":"Libtmux_workspace.Config.setting","publicId":"Libtmux_workspace.Config.setting","qualifiedName":"Libtmux_workspace.Config.setting","name":"setting","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":15,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type setting = {\n name : string;\n index : int option;\n value : Libtmux.Options.scalar;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":15,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"type setting =\n {\n name: string ;\n index: int option ;\n value: Libtmux.Options.scalar }","params":[]}],"slug":"libtmux_workspace-config-setting"},{"id":"Libtmux_workspace.Config.setting.index","publicId":"Libtmux_workspace.Config.setting.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":17,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int option;","source":{"file":"workspace/libtmux_workspace.mli","line":17,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.setting","type":"int option","qualifiedName":"Libtmux_workspace.Config.index","slug":"libtmux_workspace-config-setting-index"},{"id":"Libtmux_workspace.Config.setting.name","publicId":"Libtmux_workspace.Config.setting.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":16,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"workspace/libtmux_workspace.mli","line":16,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.setting","type":"string","qualifiedName":"Libtmux_workspace.Config.name","slug":"libtmux_workspace-config-setting-name"},{"id":"Libtmux_workspace.Config.setting.value","publicId":"Libtmux_workspace.Config.setting.value","name":"value","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":18,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"value : Libtmux.Options.scalar;","source":{"file":"workspace/libtmux_workspace.mli","line":18,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.setting","type":"Libtmux.Options.scalar","qualifiedName":"Libtmux_workspace.Config.value","slug":"libtmux_workspace-config-setting-value"},{"id":"Libtmux_workspace.Config.t","publicId":"Libtmux_workspace.Config.t","qualifiedName":"Libtmux_workspace.Config.t","name":"t","kind":"typealias","package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":38,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"workspace/libtmux_workspace.mli","line":38,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_workspace-config-t"},{"id":"Libtmux_workspace.Config.window","publicId":"Libtmux_workspace.Config.window","qualifiedName":"Libtmux_workspace.Config.window","name":"window","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":49,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Builders are unchecked descriptions; {!make} validates the whole document.\n "],"declarations":[{"kind":"function","text":"val window :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?layout:Libtmux.Layout.t ->\n name:string ->\n pane list ->\n window","source":{"file":"workspace/libtmux_workspace.mli","line":49,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","doc":{"summary":"Builders are unchecked descriptions; {!make} validates the whole document."},"signatures":[{"raw":"val window :\n ?cwd:string ->\n ?environment:(string * string) list ->\n ?options:setting list ->\n ?layout:Libtmux.Layout.t -> name:string -> pane list -> window","params":[{"name":"cwd","type":"string","optional":true,"keywordOnly":true},{"name":"environment","type":"(string * string) list","optional":true,"keywordOnly":true},{"name":"options","type":"setting list","optional":true,"keywordOnly":true},{"name":"layout","type":"Libtmux.Layout.t","optional":true,"keywordOnly":true},{"name":"name","type":"string","keywordOnly":true},{"name":"arg1","type":"pane list"}],"returns":"window"}],"slug":"libtmux_workspace-config-window"},{"id":"Libtmux_workspace.Config.window:type","publicId":"Libtmux_workspace.Config.window:type","qualifiedName":"Libtmux_workspace.Config.window","name":"window","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":29,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type window = {\n name : string;\n cwd : string option;\n environment : (string * string) list;\n options : setting list;\n panes : pane list;\n layout : Libtmux.Layout.t option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":29,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"type window =\n {\n name: string ;\n cwd: string option ;\n environment: (string * string) list ;\n options: setting list ;\n panes: pane list ;\n layout: Libtmux.Layout.t option }","params":[]}],"slug":"libtmux_workspace-config-window-type"},{"id":"Libtmux_workspace.Config.window:type.cwd","publicId":"Libtmux_workspace.Config.window:type.cwd","name":"cwd","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":31,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cwd : string option;","source":{"file":"workspace/libtmux_workspace.mli","line":31,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"string option","qualifiedName":"Libtmux_workspace.Config.cwd","slug":"libtmux_workspace-config-window-type-cwd"},{"id":"Libtmux_workspace.Config.window:type.environment","publicId":"Libtmux_workspace.Config.window:type.environment","name":"environment","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":32,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"environment : (string * string) list;","source":{"file":"workspace/libtmux_workspace.mli","line":32,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"(string * string) list","qualifiedName":"Libtmux_workspace.Config.environment","slug":"libtmux_workspace-config-window-type-environment"},{"id":"Libtmux_workspace.Config.window:type.layout","publicId":"Libtmux_workspace.Config.window:type.layout","name":"layout","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":35,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"layout : Libtmux.Layout.t option;","source":{"file":"workspace/libtmux_workspace.mli","line":35,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"Libtmux.Layout.t option","qualifiedName":"Libtmux_workspace.Config.layout","slug":"libtmux_workspace-config-window-type-layout"},{"id":"Libtmux_workspace.Config.window:type.name","publicId":"Libtmux_workspace.Config.window:type.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":30,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"workspace/libtmux_workspace.mli","line":30,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"string","qualifiedName":"Libtmux_workspace.Config.name","slug":"libtmux_workspace-config-window-type-name"},{"id":"Libtmux_workspace.Config.window:type.options","publicId":"Libtmux_workspace.Config.window:type.options","name":"options","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":33,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"options : setting list;","source":{"file":"workspace/libtmux_workspace.mli","line":33,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"setting list","qualifiedName":"Libtmux_workspace.Config.options","slug":"libtmux_workspace-config-window-type-options"},{"id":"Libtmux_workspace.Config.window:type.panes","publicId":"Libtmux_workspace.Config.window:type.panes","name":"panes","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":34,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"panes : pane list;","source":{"file":"workspace/libtmux_workspace.mli","line":34,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config.window:type","type":"pane list","qualifiedName":"Libtmux_workspace.Config.panes","slug":"libtmux_workspace-config-window-type-panes"},{"id":"Libtmux_workspace.Config.windows","publicId":"Libtmux_workspace.Config.windows","qualifiedName":"Libtmux_workspace.Config.windows","name":"windows","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":80,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val windows : t -> window Iarray.t","source":{"file":"workspace/libtmux_workspace.mli","line":80,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Config","signatures":[{"raw":"val windows : t -> window Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"window Iarray.t"}],"slug":"libtmux_workspace-config-windows"},{"id":"Libtmux_workspace.Execution","publicId":"Libtmux_workspace.Execution","qualifiedName":"Libtmux_workspace.Execution","name":"Execution","kind":"module","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":165,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Apply a plan once per handle and retain effects, uncertainty and cleanup.\n The journal lives in process memory while its execution handle is retained;\n {!Execution.val-inspect} returns immutable copies. It survives waiter\n cancellation and client closure, but supplies no crash-durable recovery or\n cross-invocation deduplication. Ordinary applications use their backend's\n Workspace module; executors below integrate another transport. "],"declarations":[{"kind":"module","text":"module Execution : sig\n type hint = {\n session : Libtmux.Session.Id.t;\n window : Libtmux.Window.Id.t;\n pane : Libtmux.Pane.Id.t;\n window_index : int;\n pane_index : int;\n server_pid : int;\n }\n (** A creation row received before daemon binding finished. Hints are not\n operational targets and are never eligible for automatic compensation. *)\n\n type certainty = Not_started | Applied | Unknown\n\n type observation = {\n certainty : certainty;\n created : Libtmux.Created.t list;\n unbound : hint option;\n }\n\n type executor = {\n source : unit -> Libtmux.Source.t option;\n capture : unit -> (Libtmux.Snapshot.t, Libtmux.Error.t) result;\n run : 'a. 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result;\n bootstrap : Config.t -> (Libtmux.Created.t, Libtmux.Error.t) result;\n inspect : unit -> unit -> observation;\n protect : (unit -> unit) -> (unit, Libtmux.Error.t) result;\n }\n (** Backend integration: [inspect] returns a callback tied to the latest\n operation, reading only its retained state even after later submissions.\n [protect] bounds compensation and shields it from caller cancellation,\n reporting expected failures as [Error]. Ordinary callers use their\n backend's Workspace API. *)\n\n type step_status =\n | Pending\n | Running\n | Completed\n | Failed of Libtmux.Error.t\n | Skipped\n | Uncertain of Libtmux.Error.t\n\n type step = {\n index : int;\n action : Plan.action;\n status : step_status;\n created : Libtmux.Created.t list;\n unbound : hint option;\n }\n\n type cleanup = {\n pane : Libtmux.Pane.target;\n outcome : (unit, Libtmux.Error.t) result;\n }\n\n type status =\n | Queued\n | Applying\n | Succeeded\n | Partial\n | Interrupted\n | Rejected of Plan.error\n | Unavailable of Libtmux.Error.t\n\n type receipt = {\n operation_id : string;\n source : Libtmux.Source.t option;\n status : status;\n steps : step Iarray.t;\n cleanup : cleanup Iarray.t;\n cleanup_error : Libtmux.Error.t option;\n }\n\n type t\n\n val create :\n operation_id:string ->\n executor:executor ->\n Plan.t ->\n (t, Libtmux.Error.t) result\n (** Allocate a retained handle without I/O. IDs have 1..64 ASCII letters,\n digits, underscores or hyphens. [operation_id] correlates receipts; it\n does not deduplicate handles. A new handle starts a new execution even if\n its ID matches an earlier one. *)\n\n val inspect : t -> receipt\n (** Return an immutable copy of the retained journal without I/O. *)\n\n val await : ?compensate_on_failure:bool -> t -> receipt\n (** Execute once per handle, rechecking generation and captured preconditions\n first. Expected failures return a partial journal. Exceptions, including\n native cancellation, propagate after recording progress and bounded\n compensation. Subsequent calls only return the retained receipt; mutations\n never retry.\n\n Compensation kills only panes reported by completed creation commands, in\n reverse creation order. tmux removes windows and sessions that become\n empty. Containers with foreign panes or window links remain; adding a\n borrowed pane never makes it eligible for cleanup. Cleanup failures have\n separate outcomes. Compensation cannot undo external effects of programs\n started inside the panes. *)\nend","source":{"file":"workspace/libtmux_workspace.mli","line":165,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace","doc":{"summary":"Apply a plan once per handle and retain effects, uncertainty and cleanup. The journal lives in process memory while its execution handle is retained; {!Execution.val-inspect} returns immutable copies. It survives waiter cancellation and client closure, but supplies no crash-durable recovery or cross-invocation deduplication. Ordinary applications use their backend's Workspace module; executors below integrate another transport."},"slug":"libtmux_workspace-execution"},{"id":"Libtmux_workspace.Execution.await","publicId":"Libtmux_workspace.Execution.await","qualifiedName":"Libtmux_workspace.Execution.await","name":"await","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":253,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Execute once per handle, rechecking generation and captured preconditions\n first. Expected failures return a partial journal. Exceptions, including\n native cancellation, propagate after recording progress and bounded\n compensation. Subsequent calls only return the retained receipt; mutations\n never retry.\n\n Compensation kills only panes reported by completed creation commands, in\n reverse creation order. tmux removes windows and sessions that become\n empty. Containers with foreign panes or window links remain; adding a\n borrowed pane never makes it eligible for cleanup. Cleanup failures have\n separate outcomes. Compensation cannot undo external effects of programs\n started inside the panes. "],"declarations":[{"kind":"function","text":"val await : ?compensate_on_failure:bool -> t -> receipt","source":{"file":"workspace/libtmux_workspace.mli","line":253,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","doc":{"summary":"Execute once per handle, rechecking generation and captured preconditions first. Expected failures return a partial journal. Exceptions, including native cancellation, propagate after recording progress and bounded compensation. Subsequent calls only return the retained receipt; mutations never retry.","body":"Compensation kills only panes reported by completed creation commands, in reverse creation order. tmux removes windows and sessions that become empty. Containers with foreign panes or window links remain; adding a borrowed pane never makes it eligible for cleanup. Cleanup failures have separate outcomes. Compensation cannot undo external effects of programs started inside the panes."},"signatures":[{"raw":"val await : ?compensate_on_failure:bool -> t -> receipt","params":[{"name":"compensate_on_failure","type":"bool","optional":true,"keywordOnly":true},{"name":"arg1","type":"t"}],"returns":"receipt"}],"slug":"libtmux_workspace-execution-await"},{"id":"Libtmux_workspace.Execution.certainty","publicId":"Libtmux_workspace.Execution.certainty","qualifiedName":"Libtmux_workspace.Execution.certainty","name":"certainty","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type certainty = Not_started | Applied | Unknown","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type certainty =\n | Not_started \n | Applied \n | Unknown ","params":[]}],"slug":"libtmux_workspace-execution-certainty"},{"id":"Libtmux_workspace.Execution.certainty.Applied","publicId":"Libtmux_workspace.Execution.certainty.Applied","name":"Applied","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Applied","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.certainty","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Applied","slug":"libtmux_workspace-execution-certainty-applied"},{"id":"Libtmux_workspace.Execution.certainty.Not_started","publicId":"Libtmux_workspace.Execution.certainty.Not_started","name":"Not_started","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Not_started","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.certainty","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Not_started","slug":"libtmux_workspace-execution-certainty-not_started"},{"id":"Libtmux_workspace.Execution.certainty.Unknown","publicId":"Libtmux_workspace.Execution.certainty.Unknown","name":"Unknown","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unknown","source":{"file":"workspace/libtmux_workspace.mli","line":177,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.certainty","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Unknown","slug":"libtmux_workspace-execution-certainty-unknown"},{"id":"Libtmux_workspace.Execution.cleanup","publicId":"Libtmux_workspace.Execution.cleanup","qualifiedName":"Libtmux_workspace.Execution.cleanup","name":"cleanup","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":215,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type cleanup = {\n pane : Libtmux.Pane.target;\n outcome : (unit, Libtmux.Error.t) result;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":215,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type cleanup =\n {\n pane: Libtmux.Pane.target ;\n outcome: (unit, Libtmux.Error.t) result }","params":[]}],"slug":"libtmux_workspace-execution-cleanup"},{"id":"Libtmux_workspace.Execution.cleanup.outcome","publicId":"Libtmux_workspace.Execution.cleanup.outcome","name":"outcome","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":217,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"outcome : (unit, Libtmux.Error.t) result;","source":{"file":"workspace/libtmux_workspace.mli","line":217,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.cleanup","type":"(unit, Libtmux.Error.t) result","qualifiedName":"Libtmux_workspace.Execution.outcome","slug":"libtmux_workspace-execution-cleanup-outcome"},{"id":"Libtmux_workspace.Execution.cleanup.pane","publicId":"Libtmux_workspace.Execution.cleanup.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":216,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Libtmux.Pane.target;","source":{"file":"workspace/libtmux_workspace.mli","line":216,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.cleanup","type":"Libtmux.Pane.target","qualifiedName":"Libtmux_workspace.Execution.pane","slug":"libtmux_workspace-execution-cleanup-pane"},{"id":"Libtmux_workspace.Execution.create","publicId":"Libtmux_workspace.Execution.create","qualifiedName":"Libtmux_workspace.Execution.create","name":"create","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":240,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Allocate a retained handle without I/O. IDs have 1..64 ASCII letters,\n digits, underscores or hyphens. [operation_id] correlates receipts; it\n does not deduplicate handles. A new handle starts a new execution even if\n its ID matches an earlier one. "],"declarations":[{"kind":"function","text":"val create :\n operation_id:string ->\n executor:executor ->\n Plan.t ->\n (t, Libtmux.Error.t) result","source":{"file":"workspace/libtmux_workspace.mli","line":240,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","doc":{"summary":"Allocate a retained handle without I/O. IDs have 1..64 ASCII letters, digits, underscores or hyphens. `operation_id` correlates receipts; it does not deduplicate handles. A new handle starts a new execution even if its ID matches an earlier one."},"signatures":[{"raw":"val create :\n operation_id:string ->\n executor:executor -> Plan.t -> (t, Libtmux.Error.t) result","params":[{"name":"operation_id","type":"string","keywordOnly":true},{"name":"executor","type":"executor","keywordOnly":true},{"name":"arg1","type":"Plan.t"}],"returns":"(t, Libtmux.Error.t) result"}],"slug":"libtmux_workspace-execution-create"},{"id":"Libtmux_workspace.Execution.executor","publicId":"Libtmux_workspace.Execution.executor","qualifiedName":"Libtmux_workspace.Execution.executor","name":"executor","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":185,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Backend integration: [inspect] returns a callback tied to the latest\n operation, reading only its retained state even after later submissions.\n [protect] bounds compensation and shields it from caller cancellation,\n reporting expected failures as [Error]. Ordinary callers use their\n backend's Workspace API. "],"declarations":[{"kind":"struct","text":"type executor = {\n source : unit -> Libtmux.Source.t option;\n capture : unit -> (Libtmux.Snapshot.t, Libtmux.Error.t) result;\n run : 'a. 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result;\n bootstrap : Config.t -> (Libtmux.Created.t, Libtmux.Error.t) result;\n inspect : unit -> unit -> observation;\n protect : (unit -> unit) -> (unit, Libtmux.Error.t) result;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":185,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","doc":{"summary":"Backend integration: `inspect` returns a callback tied to the latest operation, reading only its retained state even after later submissions. `protect` bounds compensation and shields it from caller cancellation, reporting expected failures as `Error`. Ordinary callers use their backend's Workspace API."},"signatures":[{"raw":"type executor =\n {\n source: unit -> Libtmux.Source.t option ;\n capture: unit -> (Libtmux.Snapshot.t, Libtmux.Error.t) result ;\n run: 'a . 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result ;\n bootstrap: Config.t -> (Libtmux.Created.t, Libtmux.Error.t) result ;\n inspect: unit -> unit -> observation ;\n protect: (unit -> unit) -> (unit, Libtmux.Error.t) result }","params":[]}],"slug":"libtmux_workspace-execution-executor"},{"id":"Libtmux_workspace.Execution.executor.bootstrap","publicId":"Libtmux_workspace.Execution.executor.bootstrap","name":"bootstrap","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":189,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"bootstrap : Config.t -> (Libtmux.Created.t, Libtmux.Error.t) result;","source":{"file":"workspace/libtmux_workspace.mli","line":189,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"Config.t -> (Libtmux.Created.t, Libtmux.Error.t) result","qualifiedName":"Libtmux_workspace.Execution.bootstrap","slug":"libtmux_workspace-execution-executor-bootstrap"},{"id":"Libtmux_workspace.Execution.executor.capture","publicId":"Libtmux_workspace.Execution.executor.capture","name":"capture","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":187,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"capture : unit -> (Libtmux.Snapshot.t, Libtmux.Error.t) result;","source":{"file":"workspace/libtmux_workspace.mli","line":187,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"unit -> (Libtmux.Snapshot.t, Libtmux.Error.t) result","qualifiedName":"Libtmux_workspace.Execution.capture","slug":"libtmux_workspace-execution-executor-capture"},{"id":"Libtmux_workspace.Execution.executor.inspect","publicId":"Libtmux_workspace.Execution.executor.inspect","name":"inspect","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":190,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"inspect : unit -> unit -> observation;","source":{"file":"workspace/libtmux_workspace.mli","line":190,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"unit -> unit -> observation","qualifiedName":"Libtmux_workspace.Execution.inspect","slug":"libtmux_workspace-execution-executor-inspect"},{"id":"Libtmux_workspace.Execution.executor.protect","publicId":"Libtmux_workspace.Execution.executor.protect","name":"protect","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":191,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"protect : (unit -> unit) -> (unit, Libtmux.Error.t) result;","source":{"file":"workspace/libtmux_workspace.mli","line":191,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"(unit -> unit) -> (unit, Libtmux.Error.t) result","qualifiedName":"Libtmux_workspace.Execution.protect","slug":"libtmux_workspace-execution-executor-protect"},{"id":"Libtmux_workspace.Execution.executor.run","publicId":"Libtmux_workspace.Execution.executor.run","name":"run","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":188,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"run : 'a. 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result;","source":{"file":"workspace/libtmux_workspace.mli","line":188,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"'a. 'a Libtmux.Command.t -> ('a, Libtmux.Error.t) result","qualifiedName":"Libtmux_workspace.Execution.run","slug":"libtmux_workspace-execution-executor-run"},{"id":"Libtmux_workspace.Execution.executor.source","publicId":"Libtmux_workspace.Execution.executor.source","name":"source","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":186,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"source : unit -> Libtmux.Source.t option;","source":{"file":"workspace/libtmux_workspace.mli","line":186,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.executor","type":"unit -> Libtmux.Source.t option","qualifiedName":"Libtmux_workspace.Execution.source","slug":"libtmux_workspace-execution-executor-source"},{"id":"Libtmux_workspace.Execution.hint","publicId":"Libtmux_workspace.Execution.hint","qualifiedName":"Libtmux_workspace.Execution.hint","name":"hint","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":166,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" A creation row received before daemon binding finished. Hints are not\n operational targets and are never eligible for automatic compensation. "],"declarations":[{"kind":"struct","text":"type hint = {\n session : Libtmux.Session.Id.t;\n window : Libtmux.Window.Id.t;\n pane : Libtmux.Pane.Id.t;\n window_index : int;\n pane_index : int;\n server_pid : int;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":166,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","doc":{"summary":"A creation row received before daemon binding finished. Hints are not operational targets and are never eligible for automatic compensation."},"signatures":[{"raw":"type hint =\n {\n session: Libtmux.Session.Id.t ;\n window: Libtmux.Window.Id.t ;\n pane: Libtmux.Pane.Id.t ;\n window_index: int ;\n pane_index: int ;\n server_pid: int }","params":[]}],"slug":"libtmux_workspace-execution-hint"},{"id":"Libtmux_workspace.Execution.hint.pane","publicId":"Libtmux_workspace.Execution.hint.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":169,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : Libtmux.Pane.Id.t;","source":{"file":"workspace/libtmux_workspace.mli","line":169,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"Libtmux.Pane.Id.t","qualifiedName":"Libtmux_workspace.Execution.pane","slug":"libtmux_workspace-execution-hint-pane"},{"id":"Libtmux_workspace.Execution.hint.pane_index","publicId":"Libtmux_workspace.Execution.hint.pane_index","name":"pane_index","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":171,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane_index : int;","source":{"file":"workspace/libtmux_workspace.mli","line":171,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"int","qualifiedName":"Libtmux_workspace.Execution.pane_index","slug":"libtmux_workspace-execution-hint-pane_index"},{"id":"Libtmux_workspace.Execution.hint.server_pid","publicId":"Libtmux_workspace.Execution.hint.server_pid","name":"server_pid","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":172,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"server_pid : int;","source":{"file":"workspace/libtmux_workspace.mli","line":172,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"int","qualifiedName":"Libtmux_workspace.Execution.server_pid","slug":"libtmux_workspace-execution-hint-server_pid"},{"id":"Libtmux_workspace.Execution.hint.session","publicId":"Libtmux_workspace.Execution.hint.session","name":"session","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":167,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"session : Libtmux.Session.Id.t;","source":{"file":"workspace/libtmux_workspace.mli","line":167,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"Libtmux.Session.Id.t","qualifiedName":"Libtmux_workspace.Execution.session","slug":"libtmux_workspace-execution-hint-session"},{"id":"Libtmux_workspace.Execution.hint.window","publicId":"Libtmux_workspace.Execution.hint.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":168,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : Libtmux.Window.Id.t;","source":{"file":"workspace/libtmux_workspace.mli","line":168,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"Libtmux.Window.Id.t","qualifiedName":"Libtmux_workspace.Execution.window","slug":"libtmux_workspace-execution-hint-window"},{"id":"Libtmux_workspace.Execution.hint.window_index","publicId":"Libtmux_workspace.Execution.hint.window_index","name":"window_index","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":170,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_index : int;","source":{"file":"workspace/libtmux_workspace.mli","line":170,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.hint","type":"int","qualifiedName":"Libtmux_workspace.Execution.window_index","slug":"libtmux_workspace-execution-hint-window_index"},{"id":"Libtmux_workspace.Execution.inspect","publicId":"Libtmux_workspace.Execution.inspect","qualifiedName":"Libtmux_workspace.Execution.inspect","name":"inspect","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":250,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Return an immutable copy of the retained journal without I/O. "],"declarations":[{"kind":"function","text":"val inspect : t -> receipt","source":{"file":"workspace/libtmux_workspace.mli","line":250,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","doc":{"summary":"Return an immutable copy of the retained journal without I/O."},"signatures":[{"raw":"val inspect : t -> receipt","params":[{"name":"arg1","type":"t"}],"returns":"receipt"}],"slug":"libtmux_workspace-execution-inspect"},{"id":"Libtmux_workspace.Execution.observation","publicId":"Libtmux_workspace.Execution.observation","qualifiedName":"Libtmux_workspace.Execution.observation","name":"observation","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":179,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type observation = {\n certainty : certainty;\n created : Libtmux.Created.t list;\n unbound : hint option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":179,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type observation =\n {\n certainty: certainty ;\n created: Libtmux.Created.t list ;\n unbound: hint option }","params":[]}],"slug":"libtmux_workspace-execution-observation"},{"id":"Libtmux_workspace.Execution.observation.certainty","publicId":"Libtmux_workspace.Execution.observation.certainty","name":"certainty","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":180,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"certainty : certainty;","source":{"file":"workspace/libtmux_workspace.mli","line":180,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.observation","type":"certainty","qualifiedName":"Libtmux_workspace.Execution.certainty","slug":"libtmux_workspace-execution-observation-certainty"},{"id":"Libtmux_workspace.Execution.observation.created","publicId":"Libtmux_workspace.Execution.observation.created","name":"created","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":181,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"created : Libtmux.Created.t list;","source":{"file":"workspace/libtmux_workspace.mli","line":181,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.observation","type":"Libtmux.Created.t list","qualifiedName":"Libtmux_workspace.Execution.created","slug":"libtmux_workspace-execution-observation-created"},{"id":"Libtmux_workspace.Execution.observation.unbound","publicId":"Libtmux_workspace.Execution.observation.unbound","name":"unbound","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":182,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"unbound : hint option;","source":{"file":"workspace/libtmux_workspace.mli","line":182,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.observation","type":"hint option","qualifiedName":"Libtmux_workspace.Execution.unbound","slug":"libtmux_workspace-execution-observation-unbound"},{"id":"Libtmux_workspace.Execution.receipt","publicId":"Libtmux_workspace.Execution.receipt","qualifiedName":"Libtmux_workspace.Execution.receipt","name":"receipt","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":229,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type receipt = {\n operation_id : string;\n source : Libtmux.Source.t option;\n status : status;\n steps : step Iarray.t;\n cleanup : cleanup Iarray.t;\n cleanup_error : Libtmux.Error.t option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":229,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type receipt =\n {\n operation_id: string ;\n source: Libtmux.Source.t option ;\n status: status ;\n steps: step Iarray.t ;\n cleanup: cleanup Iarray.t ;\n cleanup_error: Libtmux.Error.t option }","params":[]}],"slug":"libtmux_workspace-execution-receipt"},{"id":"Libtmux_workspace.Execution.receipt.cleanup","publicId":"Libtmux_workspace.Execution.receipt.cleanup","name":"cleanup","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":234,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cleanup : cleanup Iarray.t;","source":{"file":"workspace/libtmux_workspace.mli","line":234,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"cleanup Iarray.t","qualifiedName":"Libtmux_workspace.Execution.cleanup","slug":"libtmux_workspace-execution-receipt-cleanup"},{"id":"Libtmux_workspace.Execution.receipt.cleanup_error","publicId":"Libtmux_workspace.Execution.receipt.cleanup_error","name":"cleanup_error","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":235,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"cleanup_error : Libtmux.Error.t option;","source":{"file":"workspace/libtmux_workspace.mli","line":235,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"Libtmux.Error.t option","qualifiedName":"Libtmux_workspace.Execution.cleanup_error","slug":"libtmux_workspace-execution-receipt-cleanup_error"},{"id":"Libtmux_workspace.Execution.receipt.operation_id","publicId":"Libtmux_workspace.Execution.receipt.operation_id","name":"operation_id","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":230,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"operation_id : string;","source":{"file":"workspace/libtmux_workspace.mli","line":230,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"string","qualifiedName":"Libtmux_workspace.Execution.operation_id","slug":"libtmux_workspace-execution-receipt-operation_id"},{"id":"Libtmux_workspace.Execution.receipt.source","publicId":"Libtmux_workspace.Execution.receipt.source","name":"source","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":231,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"source : Libtmux.Source.t option;","source":{"file":"workspace/libtmux_workspace.mli","line":231,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"Libtmux.Source.t option","qualifiedName":"Libtmux_workspace.Execution.source","slug":"libtmux_workspace-execution-receipt-source"},{"id":"Libtmux_workspace.Execution.receipt.status","publicId":"Libtmux_workspace.Execution.receipt.status","name":"status","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":232,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"status : status;","source":{"file":"workspace/libtmux_workspace.mli","line":232,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"status","qualifiedName":"Libtmux_workspace.Execution.status","slug":"libtmux_workspace-execution-receipt-status"},{"id":"Libtmux_workspace.Execution.receipt.steps","publicId":"Libtmux_workspace.Execution.receipt.steps","name":"steps","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":233,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"steps : step Iarray.t;","source":{"file":"workspace/libtmux_workspace.mli","line":233,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.receipt","type":"step Iarray.t","qualifiedName":"Libtmux_workspace.Execution.steps","slug":"libtmux_workspace-execution-receipt-steps"},{"id":"Libtmux_workspace.Execution.status","publicId":"Libtmux_workspace.Execution.status","qualifiedName":"Libtmux_workspace.Execution.status","name":"status","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":220,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type status =\n | Queued\n | Applying\n | Succeeded\n | Partial\n | Interrupted\n | Rejected of Plan.error\n | Unavailable of Libtmux.Error.t","source":{"file":"workspace/libtmux_workspace.mli","line":220,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type status =\n | Queued \n | Applying \n | Succeeded \n | Partial \n | Interrupted \n | Rejected of Plan.error \n | Unavailable of Libtmux.Error.t ","params":[]}],"slug":"libtmux_workspace-execution-status"},{"id":"Libtmux_workspace.Execution.status.Applying","publicId":"Libtmux_workspace.Execution.status.Applying","name":"Applying","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":222,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Applying","source":{"file":"workspace/libtmux_workspace.mli","line":222,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Applying","slug":"libtmux_workspace-execution-status-applying"},{"id":"Libtmux_workspace.Execution.status.Interrupted","publicId":"Libtmux_workspace.Execution.status.Interrupted","name":"Interrupted","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":225,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Interrupted","source":{"file":"workspace/libtmux_workspace.mli","line":225,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Interrupted","slug":"libtmux_workspace-execution-status-interrupted"},{"id":"Libtmux_workspace.Execution.status.Partial","publicId":"Libtmux_workspace.Execution.status.Partial","name":"Partial","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":224,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Partial","source":{"file":"workspace/libtmux_workspace.mli","line":224,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Partial","slug":"libtmux_workspace-execution-status-partial"},{"id":"Libtmux_workspace.Execution.status.Queued","publicId":"Libtmux_workspace.Execution.status.Queued","name":"Queued","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":221,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Queued","source":{"file":"workspace/libtmux_workspace.mli","line":221,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Queued","slug":"libtmux_workspace-execution-status-queued"},{"id":"Libtmux_workspace.Execution.status.Rejected","publicId":"Libtmux_workspace.Execution.status.Rejected","name":"Rejected","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":226,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Rejected of Plan.error","source":{"file":"workspace/libtmux_workspace.mli","line":226,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"tuple","qualifiedName":"Libtmux_workspace.Execution.Rejected","slug":"libtmux_workspace-execution-status-rejected"},{"id":"Libtmux_workspace.Execution.status.Succeeded","publicId":"Libtmux_workspace.Execution.status.Succeeded","name":"Succeeded","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":223,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Succeeded","source":{"file":"workspace/libtmux_workspace.mli","line":223,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Succeeded","slug":"libtmux_workspace-execution-status-succeeded"},{"id":"Libtmux_workspace.Execution.status.Unavailable","publicId":"Libtmux_workspace.Execution.status.Unavailable","name":"Unavailable","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":227,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unavailable of Libtmux.Error.t","source":{"file":"workspace/libtmux_workspace.mli","line":227,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.status","variant":"tuple","qualifiedName":"Libtmux_workspace.Execution.Unavailable","slug":"libtmux_workspace-execution-status-unavailable"},{"id":"Libtmux_workspace.Execution.step","publicId":"Libtmux_workspace.Execution.step","qualifiedName":"Libtmux_workspace.Execution.step","name":"step","kind":"struct","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":207,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"struct","text":"type step = {\n index : int;\n action : Plan.action;\n status : step_status;\n created : Libtmux.Created.t list;\n unbound : hint option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":207,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type step =\n {\n index: int ;\n action: Plan.action ;\n status: step_status ;\n created: Libtmux.Created.t list ;\n unbound: hint option }","params":[]}],"slug":"libtmux_workspace-execution-step"},{"id":"Libtmux_workspace.Execution.step.action","publicId":"Libtmux_workspace.Execution.step.action","name":"action","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":209,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"action : Plan.action;","source":{"file":"workspace/libtmux_workspace.mli","line":209,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.step","type":"Plan.action","qualifiedName":"Libtmux_workspace.Execution.action","slug":"libtmux_workspace-execution-step-action"},{"id":"Libtmux_workspace.Execution.step.created","publicId":"Libtmux_workspace.Execution.step.created","name":"created","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":211,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"created : Libtmux.Created.t list;","source":{"file":"workspace/libtmux_workspace.mli","line":211,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.step","type":"Libtmux.Created.t list","qualifiedName":"Libtmux_workspace.Execution.created","slug":"libtmux_workspace-execution-step-created"},{"id":"Libtmux_workspace.Execution.step.index","publicId":"Libtmux_workspace.Execution.step.index","name":"index","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":208,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"index : int;","source":{"file":"workspace/libtmux_workspace.mli","line":208,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.step","type":"int","qualifiedName":"Libtmux_workspace.Execution.index","slug":"libtmux_workspace-execution-step-index"},{"id":"Libtmux_workspace.Execution.step.status","publicId":"Libtmux_workspace.Execution.step.status","name":"status","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":210,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"status : step_status;","source":{"file":"workspace/libtmux_workspace.mli","line":210,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.step","type":"step_status","qualifiedName":"Libtmux_workspace.Execution.status","slug":"libtmux_workspace-execution-step-status"},{"id":"Libtmux_workspace.Execution.step.unbound","publicId":"Libtmux_workspace.Execution.step.unbound","name":"unbound","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":212,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"unbound : hint option;","source":{"file":"workspace/libtmux_workspace.mli","line":212,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.step","type":"hint option","qualifiedName":"Libtmux_workspace.Execution.unbound","slug":"libtmux_workspace-execution-step-unbound"},{"id":"Libtmux_workspace.Execution.step_status","publicId":"Libtmux_workspace.Execution.step_status","qualifiedName":"Libtmux_workspace.Execution.step_status","name":"step_status","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":199,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type step_status =\n | Pending\n | Running\n | Completed\n | Failed of Libtmux.Error.t\n | Skipped\n | Uncertain of Libtmux.Error.t","source":{"file":"workspace/libtmux_workspace.mli","line":199,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type step_status =\n | Pending \n | Running \n | Completed \n | Failed of Libtmux.Error.t \n | Skipped \n | Uncertain of Libtmux.Error.t ","params":[]}],"slug":"libtmux_workspace-execution-step_status"},{"id":"Libtmux_workspace.Execution.step_status.Completed","publicId":"Libtmux_workspace.Execution.step_status.Completed","name":"Completed","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":202,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Completed","source":{"file":"workspace/libtmux_workspace.mli","line":202,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Completed","slug":"libtmux_workspace-execution-step_status-completed"},{"id":"Libtmux_workspace.Execution.step_status.Failed","publicId":"Libtmux_workspace.Execution.step_status.Failed","name":"Failed","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":203,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Failed of Libtmux.Error.t","source":{"file":"workspace/libtmux_workspace.mli","line":203,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"tuple","qualifiedName":"Libtmux_workspace.Execution.Failed","slug":"libtmux_workspace-execution-step_status-failed"},{"id":"Libtmux_workspace.Execution.step_status.Pending","publicId":"Libtmux_workspace.Execution.step_status.Pending","name":"Pending","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":200,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Pending","source":{"file":"workspace/libtmux_workspace.mli","line":200,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Pending","slug":"libtmux_workspace-execution-step_status-pending"},{"id":"Libtmux_workspace.Execution.step_status.Running","publicId":"Libtmux_workspace.Execution.step_status.Running","name":"Running","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":201,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Running","source":{"file":"workspace/libtmux_workspace.mli","line":201,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Running","slug":"libtmux_workspace-execution-step_status-running"},{"id":"Libtmux_workspace.Execution.step_status.Skipped","publicId":"Libtmux_workspace.Execution.step_status.Skipped","name":"Skipped","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":204,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Skipped","source":{"file":"workspace/libtmux_workspace.mli","line":204,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"unit","qualifiedName":"Libtmux_workspace.Execution.Skipped","slug":"libtmux_workspace-execution-step_status-skipped"},{"id":"Libtmux_workspace.Execution.step_status.Uncertain","publicId":"Libtmux_workspace.Execution.step_status.Uncertain","name":"Uncertain","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":205,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Uncertain of Libtmux.Error.t","source":{"file":"workspace/libtmux_workspace.mli","line":205,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution.step_status","variant":"tuple","qualifiedName":"Libtmux_workspace.Execution.Uncertain","slug":"libtmux_workspace-execution-step_status-uncertain"},{"id":"Libtmux_workspace.Execution.t","publicId":"Libtmux_workspace.Execution.t","qualifiedName":"Libtmux_workspace.Execution.t","name":"t","kind":"typealias","package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":238,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"workspace/libtmux_workspace.mli","line":238,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Execution","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_workspace-execution-t"},{"id":"Libtmux_workspace.Plan","publicId":"Libtmux_workspace.Plan","qualifiedName":"Libtmux_workspace.Plan","name":"Plan","kind":"module","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":89,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[" Preview ordered workspace actions against one observed daemon generation. A\n plan retains collision policy and bound targets; it is not a portable\n command script. "],"declarations":[{"kind":"module","text":"module Plan : sig\n type server_policy = Create_if_missing | Require_existing_server\n type window_collision = Reject\n\n type collision_policy =\n | Fail_if_session_exists\n | Append_new_windows of { window_collision : window_collision }\n\n type error =\n | Missing_endpoint\n | Session_conflict of string\n | Window_conflict of string\n | Append_session_options\n | Too_many_steps\n | Unsupported_setting of Config.error\n | Stale\n\n val pp_error : Format.formatter -> error -> unit\n\n type scope = Session | Window of int | Pane of { window : int; pane : int }\n\n type action =\n | Create_session of {\n bootstrap : bool;\n name : string;\n window_name : string;\n spawn : Libtmux.Spawn.t;\n width : int;\n height : int;\n }\n | Create_window of { window : int; name : string; spawn : Libtmux.Spawn.t }\n | Split_pane of {\n window : int;\n pane : int;\n spawn : Libtmux.Spawn.t;\n direction : Libtmux.Geometry.direction;\n size : Libtmux.Geometry.size option;\n }\n | Set_environment of string * string\n | Set_option of scope * Config.setting\n | Send_text of { window : int; pane : int; text : string }\n | Send_enter of { window : int; pane : int }\n | Select_layout of int * Libtmux.Layout.t\n\n type t\n\n val make :\n ?server_policy:server_policy ->\n ?collision_policy:collision_policy ->\n endpoint:Libtmux.Endpoint.t ->\n version:string ->\n observed:Libtmux.Snapshot.t option ->\n Config.t ->\n (t, error) result\n (** [None] means an explicitly observed missing endpoint. It is not an empty\n successful snapshot. A plan does not start a server. Append rejects any\n existing requested window name and never changes session options.\n [version] selects the generated option catalog. *)\n\n val endpoint : t -> Libtmux.Endpoint.t\n val source : t -> Libtmux.Source.t option\n val existing_session : t -> Libtmux.Session.target option\n val actions : t -> action Iarray.t\n val config : t -> Config.t\n\n val check_source : t -> Libtmux.Source.t option -> (unit, error) result\n (** Operational plans are ephemeral and bound to one connection generation. A\n printed or serialized preview cannot supply operational targets. *)\nend","source":{"file":"workspace/libtmux_workspace.mli","line":89,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace","doc":{"summary":"Preview ordered workspace actions against one observed daemon generation. A plan retains collision policy and bound targets; it is not a portable command script."},"slug":"libtmux_workspace-plan"},{"id":"Libtmux_workspace.Plan.action","publicId":"Libtmux_workspace.Plan.action","qualifiedName":"Libtmux_workspace.Plan.action","name":"action","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":110,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type action =\n | Create_session of {\n bootstrap : bool;\n name : string;\n window_name : string;\n spawn : Libtmux.Spawn.t;\n width : int;\n height : int;\n }\n | Create_window of { window : int; name : string; spawn : Libtmux.Spawn.t }\n | Split_pane of {\n window : int;\n pane : int;\n spawn : Libtmux.Spawn.t;\n direction : Libtmux.Geometry.direction;\n size : Libtmux.Geometry.size option;\n }\n | Set_environment of string * string\n | Set_option of scope * Config.setting\n | Send_text of { window : int; pane : int; text : string }\n | Send_enter of { window : int; pane : int }\n | Select_layout of int * Libtmux.Layout.t","source":{"file":"workspace/libtmux_workspace.mli","line":110,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type action =\n | Create_session of\n {\n bootstrap: bool ;\n name: string ;\n window_name: string ;\n spawn: Libtmux.Spawn.t ;\n width: int ;\n height: int } \n | Create_window of {\n window: int ;\n name: string ;\n spawn: Libtmux.Spawn.t } \n | Split_pane of\n {\n window: int ;\n pane: int ;\n spawn: Libtmux.Spawn.t ;\n direction: Libtmux.Geometry.direction ;\n size: Libtmux.Geometry.size option } \n | Set_environment of string * string \n | Set_option of scope * Config.setting \n | Send_text of {\n window: int ;\n pane: int ;\n text: string } \n | Send_enter of {\n window: int ;\n pane: int } \n | Select_layout of int * Libtmux.Layout.t ","params":[]}],"slug":"libtmux_workspace-plan-action"},{"id":"Libtmux_workspace.Plan.action.Create_session","publicId":"Libtmux_workspace.Plan.action.Create_session","name":"Create_session","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":111,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Create_session of {\n bootstrap : bool;\n name : string;\n window_name : string;\n spawn : Libtmux.Spawn.t;\n width : int;\n height : int;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":111,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Create_session","slug":"libtmux_workspace-plan-action-create_session"},{"id":"Libtmux_workspace.Plan.action.Create_session.bootstrap","publicId":"Libtmux_workspace.Plan.action.Create_session.bootstrap","name":"bootstrap","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":112,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"bootstrap : bool;","source":{"file":"workspace/libtmux_workspace.mli","line":112,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"bool","qualifiedName":"Libtmux_workspace.Plan.bootstrap","slug":"libtmux_workspace-plan-action-create_session-bootstrap"},{"id":"Libtmux_workspace.Plan.action.Create_session.height","publicId":"Libtmux_workspace.Plan.action.Create_session.height","name":"height","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":117,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"height : int;","source":{"file":"workspace/libtmux_workspace.mli","line":117,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"int","qualifiedName":"Libtmux_workspace.Plan.height","slug":"libtmux_workspace-plan-action-create_session-height"},{"id":"Libtmux_workspace.Plan.action.Create_session.name","publicId":"Libtmux_workspace.Plan.action.Create_session.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":113,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"workspace/libtmux_workspace.mli","line":113,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"string","qualifiedName":"Libtmux_workspace.Plan.name","slug":"libtmux_workspace-plan-action-create_session-name"},{"id":"Libtmux_workspace.Plan.action.Create_session.spawn","publicId":"Libtmux_workspace.Plan.action.Create_session.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":115,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Libtmux.Spawn.t;","source":{"file":"workspace/libtmux_workspace.mli","line":115,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"Libtmux.Spawn.t","qualifiedName":"Libtmux_workspace.Plan.spawn","slug":"libtmux_workspace-plan-action-create_session-spawn"},{"id":"Libtmux_workspace.Plan.action.Create_session.width","publicId":"Libtmux_workspace.Plan.action.Create_session.width","name":"width","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":116,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"width : int;","source":{"file":"workspace/libtmux_workspace.mli","line":116,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"int","qualifiedName":"Libtmux_workspace.Plan.width","slug":"libtmux_workspace-plan-action-create_session-width"},{"id":"Libtmux_workspace.Plan.action.Create_session.window_name","publicId":"Libtmux_workspace.Plan.action.Create_session.window_name","name":"window_name","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":114,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_name : string;","source":{"file":"workspace/libtmux_workspace.mli","line":114,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Create_session","type":"string","qualifiedName":"Libtmux_workspace.Plan.window_name","slug":"libtmux_workspace-plan-action-create_session-window_name"},{"id":"Libtmux_workspace.Plan.action.Create_window","publicId":"Libtmux_workspace.Plan.action.Create_window","name":"Create_window","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Create_window of { window : int; name : string; spawn : Libtmux.Spawn.t }","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Create_window","slug":"libtmux_workspace-plan-action-create_window"},{"id":"Libtmux_workspace.Plan.action.Create_window.name","publicId":"Libtmux_workspace.Plan.action.Create_window.name","name":"name","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"name : string;","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Create_window","type":"string","qualifiedName":"Libtmux_workspace.Plan.name","slug":"libtmux_workspace-plan-action-create_window-name"},{"id":"Libtmux_workspace.Plan.action.Create_window.spawn","publicId":"Libtmux_workspace.Plan.action.Create_window.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Libtmux.Spawn.t","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Create_window","type":"Libtmux.Spawn.t","qualifiedName":"Libtmux_workspace.Plan.spawn","slug":"libtmux_workspace-plan-action-create_window-spawn"},{"id":"Libtmux_workspace.Plan.action.Create_window.window","publicId":"Libtmux_workspace.Plan.action.Create_window.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : int;","source":{"file":"workspace/libtmux_workspace.mli","line":119,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Create_window","type":"int","qualifiedName":"Libtmux_workspace.Plan.window","slug":"libtmux_workspace-plan-action-create_window-window"},{"id":"Libtmux_workspace.Plan.action.Select_layout","publicId":"Libtmux_workspace.Plan.action.Select_layout","name":"Select_layout","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":131,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Select_layout of int * Libtmux.Layout.t","source":{"file":"workspace/libtmux_workspace.mli","line":131,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Select_layout","slug":"libtmux_workspace-plan-action-select_layout"},{"id":"Libtmux_workspace.Plan.action.Send_enter","publicId":"Libtmux_workspace.Plan.action.Send_enter","name":"Send_enter","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Send_enter of { window : int; pane : int }","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Send_enter","slug":"libtmux_workspace-plan-action-send_enter"},{"id":"Libtmux_workspace.Plan.action.Send_enter.pane","publicId":"Libtmux_workspace.Plan.action.Send_enter.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : int","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Send_enter","type":"int","qualifiedName":"Libtmux_workspace.Plan.pane","slug":"libtmux_workspace-plan-action-send_enter-pane"},{"id":"Libtmux_workspace.Plan.action.Send_enter.window","publicId":"Libtmux_workspace.Plan.action.Send_enter.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : int;","source":{"file":"workspace/libtmux_workspace.mli","line":130,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Send_enter","type":"int","qualifiedName":"Libtmux_workspace.Plan.window","slug":"libtmux_workspace-plan-action-send_enter-window"},{"id":"Libtmux_workspace.Plan.action.Send_text","publicId":"Libtmux_workspace.Plan.action.Send_text","name":"Send_text","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Send_text of { window : int; pane : int; text : string }","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Send_text","slug":"libtmux_workspace-plan-action-send_text"},{"id":"Libtmux_workspace.Plan.action.Send_text.pane","publicId":"Libtmux_workspace.Plan.action.Send_text.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : int;","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Send_text","type":"int","qualifiedName":"Libtmux_workspace.Plan.pane","slug":"libtmux_workspace-plan-action-send_text-pane"},{"id":"Libtmux_workspace.Plan.action.Send_text.text","publicId":"Libtmux_workspace.Plan.action.Send_text.text","name":"text","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"text : string","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Send_text","type":"string","qualifiedName":"Libtmux_workspace.Plan.text","slug":"libtmux_workspace-plan-action-send_text-text"},{"id":"Libtmux_workspace.Plan.action.Send_text.window","publicId":"Libtmux_workspace.Plan.action.Send_text.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : int;","source":{"file":"workspace/libtmux_workspace.mli","line":129,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Send_text","type":"int","qualifiedName":"Libtmux_workspace.Plan.window","slug":"libtmux_workspace-plan-action-send_text-window"},{"id":"Libtmux_workspace.Plan.action.Set_environment","publicId":"Libtmux_workspace.Plan.action.Set_environment","name":"Set_environment","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":127,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_environment of string * string","source":{"file":"workspace/libtmux_workspace.mli","line":127,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Set_environment","slug":"libtmux_workspace-plan-action-set_environment"},{"id":"Libtmux_workspace.Plan.action.Set_option","publicId":"Libtmux_workspace.Plan.action.Set_option","name":"Set_option","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":128,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Set_option of scope * Config.setting","source":{"file":"workspace/libtmux_workspace.mli","line":128,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Set_option","slug":"libtmux_workspace-plan-action-set_option"},{"id":"Libtmux_workspace.Plan.action.Split_pane","publicId":"Libtmux_workspace.Plan.action.Split_pane","name":"Split_pane","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":120,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Split_pane of {\n window : int;\n pane : int;\n spawn : Libtmux.Spawn.t;\n direction : Libtmux.Geometry.direction;\n size : Libtmux.Geometry.size option;\n }","source":{"file":"workspace/libtmux_workspace.mli","line":120,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Split_pane","slug":"libtmux_workspace-plan-action-split_pane"},{"id":"Libtmux_workspace.Plan.action.Split_pane.direction","publicId":"Libtmux_workspace.Plan.action.Split_pane.direction","name":"direction","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":124,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"direction : Libtmux.Geometry.direction;","source":{"file":"workspace/libtmux_workspace.mli","line":124,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Split_pane","type":"Libtmux.Geometry.direction","qualifiedName":"Libtmux_workspace.Plan.direction","slug":"libtmux_workspace-plan-action-split_pane-direction"},{"id":"Libtmux_workspace.Plan.action.Split_pane.pane","publicId":"Libtmux_workspace.Plan.action.Split_pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":122,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : int;","source":{"file":"workspace/libtmux_workspace.mli","line":122,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Split_pane","type":"int","qualifiedName":"Libtmux_workspace.Plan.pane","slug":"libtmux_workspace-plan-action-split_pane-pane"},{"id":"Libtmux_workspace.Plan.action.Split_pane.size","publicId":"Libtmux_workspace.Plan.action.Split_pane.size","name":"size","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":125,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"size : Libtmux.Geometry.size option;","source":{"file":"workspace/libtmux_workspace.mli","line":125,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Split_pane","type":"Libtmux.Geometry.size option","qualifiedName":"Libtmux_workspace.Plan.size","slug":"libtmux_workspace-plan-action-split_pane-size"},{"id":"Libtmux_workspace.Plan.action.Split_pane.spawn","publicId":"Libtmux_workspace.Plan.action.Split_pane.spawn","name":"spawn","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":123,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"spawn : Libtmux.Spawn.t;","source":{"file":"workspace/libtmux_workspace.mli","line":123,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Split_pane","type":"Libtmux.Spawn.t","qualifiedName":"Libtmux_workspace.Plan.spawn","slug":"libtmux_workspace-plan-action-split_pane-spawn"},{"id":"Libtmux_workspace.Plan.action.Split_pane.window","publicId":"Libtmux_workspace.Plan.action.Split_pane.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":121,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : int;","source":{"file":"workspace/libtmux_workspace.mli","line":121,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.action.Split_pane","type":"int","qualifiedName":"Libtmux_workspace.Plan.window","slug":"libtmux_workspace-plan-action-split_pane-window"},{"id":"Libtmux_workspace.Plan.actions","publicId":"Libtmux_workspace.Plan.actions","qualifiedName":"Libtmux_workspace.Plan.actions","name":"actions","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":151,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val actions : t -> action Iarray.t","source":{"file":"workspace/libtmux_workspace.mli","line":151,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val actions : t -> action Iarray.t","params":[{"name":"arg1","type":"t"}],"returns":"action Iarray.t"}],"slug":"libtmux_workspace-plan-actions"},{"id":"Libtmux_workspace.Plan.check_source","publicId":"Libtmux_workspace.Plan.check_source","qualifiedName":"Libtmux_workspace.Plan.check_source","name":"check_source","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":154,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" Operational plans are ephemeral and bound to one connection generation. A\n printed or serialized preview cannot supply operational targets. "],"declarations":[{"kind":"function","text":"val check_source : t -> Libtmux.Source.t option -> (unit, error) result","source":{"file":"workspace/libtmux_workspace.mli","line":154,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","doc":{"summary":"Operational plans are ephemeral and bound to one connection generation. A printed or serialized preview cannot supply operational targets."},"signatures":[{"raw":"val check_source : t -> Libtmux.Source.t option -> (unit, error) result","params":[{"name":"arg1","type":"t"},{"name":"arg2","type":"Libtmux.Source.t option"}],"returns":"(unit, error) result"}],"slug":"libtmux_workspace-plan-check_source"},{"id":"Libtmux_workspace.Plan.collision_policy","publicId":"Libtmux_workspace.Plan.collision_policy","qualifiedName":"Libtmux_workspace.Plan.collision_policy","name":"collision_policy","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":93,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type collision_policy =\n | Fail_if_session_exists\n | Append_new_windows of { window_collision : window_collision }","source":{"file":"workspace/libtmux_workspace.mli","line":93,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type collision_policy =\n | Fail_if_session_exists \n | Append_new_windows of {\n window_collision: window_collision } ","params":[]}],"slug":"libtmux_workspace-plan-collision_policy"},{"id":"Libtmux_workspace.Plan.collision_policy.Append_new_windows","publicId":"Libtmux_workspace.Plan.collision_policy.Append_new_windows","name":"Append_new_windows","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":95,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Append_new_windows of { window_collision : window_collision }","source":{"file":"workspace/libtmux_workspace.mli","line":95,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.collision_policy","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Append_new_windows","slug":"libtmux_workspace-plan-collision_policy-append_new_windows"},{"id":"Libtmux_workspace.Plan.collision_policy.Append_new_windows.window_collision","publicId":"Libtmux_workspace.Plan.collision_policy.Append_new_windows.window_collision","name":"window_collision","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":95,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window_collision : window_collision","source":{"file":"workspace/libtmux_workspace.mli","line":95,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.collision_policy.Append_new_windows","type":"window_collision","qualifiedName":"Libtmux_workspace.Plan.window_collision","slug":"libtmux_workspace-plan-collision_policy-append_new_windows-window_collision"},{"id":"Libtmux_workspace.Plan.collision_policy.Fail_if_session_exists","publicId":"Libtmux_workspace.Plan.collision_policy.Fail_if_session_exists","name":"Fail_if_session_exists","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":94,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Fail_if_session_exists","source":{"file":"workspace/libtmux_workspace.mli","line":94,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.collision_policy","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Fail_if_session_exists","slug":"libtmux_workspace-plan-collision_policy-fail_if_session_exists"},{"id":"Libtmux_workspace.Plan.config","publicId":"Libtmux_workspace.Plan.config","qualifiedName":"Libtmux_workspace.Plan.config","name":"config","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":152,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val config : t -> Config.t","source":{"file":"workspace/libtmux_workspace.mli","line":152,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val config : t -> Config.t","params":[{"name":"arg1","type":"t"}],"returns":"Config.t"}],"slug":"libtmux_workspace-plan-config"},{"id":"Libtmux_workspace.Plan.endpoint","publicId":"Libtmux_workspace.Plan.endpoint","qualifiedName":"Libtmux_workspace.Plan.endpoint","name":"endpoint","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":148,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val endpoint : t -> Libtmux.Endpoint.t","source":{"file":"workspace/libtmux_workspace.mli","line":148,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val endpoint : t -> Libtmux.Endpoint.t","params":[{"name":"arg1","type":"t"}],"returns":"Libtmux.Endpoint.t"}],"slug":"libtmux_workspace-plan-endpoint"},{"id":"Libtmux_workspace.Plan.error","publicId":"Libtmux_workspace.Plan.error","qualifiedName":"Libtmux_workspace.Plan.error","name":"error","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":97,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type error =\n | Missing_endpoint\n | Session_conflict of string\n | Window_conflict of string\n | Append_session_options\n | Too_many_steps\n | Unsupported_setting of Config.error\n | Stale","source":{"file":"workspace/libtmux_workspace.mli","line":97,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type error =\n | Missing_endpoint \n | Session_conflict of string \n | Window_conflict of string \n | Append_session_options \n | Too_many_steps \n | Unsupported_setting of Config.error \n | Stale ","params":[]}],"slug":"libtmux_workspace-plan-error"},{"id":"Libtmux_workspace.Plan.error.Append_session_options","publicId":"Libtmux_workspace.Plan.error.Append_session_options","name":"Append_session_options","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":101,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Append_session_options","source":{"file":"workspace/libtmux_workspace.mli","line":101,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Append_session_options","slug":"libtmux_workspace-plan-error-append_session_options"},{"id":"Libtmux_workspace.Plan.error.Missing_endpoint","publicId":"Libtmux_workspace.Plan.error.Missing_endpoint","name":"Missing_endpoint","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":98,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Missing_endpoint","source":{"file":"workspace/libtmux_workspace.mli","line":98,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Missing_endpoint","slug":"libtmux_workspace-plan-error-missing_endpoint"},{"id":"Libtmux_workspace.Plan.error.Session_conflict","publicId":"Libtmux_workspace.Plan.error.Session_conflict","name":"Session_conflict","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":99,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Session_conflict of string","source":{"file":"workspace/libtmux_workspace.mli","line":99,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Session_conflict","slug":"libtmux_workspace-plan-error-session_conflict"},{"id":"Libtmux_workspace.Plan.error.Stale","publicId":"Libtmux_workspace.Plan.error.Stale","name":"Stale","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":104,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Stale","source":{"file":"workspace/libtmux_workspace.mli","line":104,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Stale","slug":"libtmux_workspace-plan-error-stale"},{"id":"Libtmux_workspace.Plan.error.Too_many_steps","publicId":"Libtmux_workspace.Plan.error.Too_many_steps","name":"Too_many_steps","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":102,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Too_many_steps","source":{"file":"workspace/libtmux_workspace.mli","line":102,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Too_many_steps","slug":"libtmux_workspace-plan-error-too_many_steps"},{"id":"Libtmux_workspace.Plan.error.Unsupported_setting","publicId":"Libtmux_workspace.Plan.error.Unsupported_setting","name":"Unsupported_setting","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":103,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Unsupported_setting of Config.error","source":{"file":"workspace/libtmux_workspace.mli","line":103,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Unsupported_setting","slug":"libtmux_workspace-plan-error-unsupported_setting"},{"id":"Libtmux_workspace.Plan.error.Window_conflict","publicId":"Libtmux_workspace.Plan.error.Window_conflict","name":"Window_conflict","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":100,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window_conflict of string","source":{"file":"workspace/libtmux_workspace.mli","line":100,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.error","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Window_conflict","slug":"libtmux_workspace-plan-error-window_conflict"},{"id":"Libtmux_workspace.Plan.existing_session","publicId":"Libtmux_workspace.Plan.existing_session","qualifiedName":"Libtmux_workspace.Plan.existing_session","name":"existing_session","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":150,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val existing_session : t -> Libtmux.Session.target option","source":{"file":"workspace/libtmux_workspace.mli","line":150,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val existing_session : t -> Libtmux.Session.target option","params":[{"name":"arg1","type":"t"}],"returns":"Libtmux.Session.target option"}],"slug":"libtmux_workspace-plan-existing_session"},{"id":"Libtmux_workspace.Plan.make","publicId":"Libtmux_workspace.Plan.make","qualifiedName":"Libtmux_workspace.Plan.make","name":"make","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":135,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[" [None] means an explicitly observed missing endpoint. It is not an empty\n successful snapshot. A plan does not start a server. Append rejects any\n existing requested window name and never changes session options.\n [version] selects the generated option catalog. "],"declarations":[{"kind":"function","text":"val make :\n ?server_policy:server_policy ->\n ?collision_policy:collision_policy ->\n endpoint:Libtmux.Endpoint.t ->\n version:string ->\n observed:Libtmux.Snapshot.t option ->\n Config.t ->\n (t, error) result","source":{"file":"workspace/libtmux_workspace.mli","line":135,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","doc":{"summary":"`None` means an explicitly observed missing endpoint. It is not an empty successful snapshot. A plan does not start a server. Append rejects any existing requested window name and never changes session options. `version` selects the generated option catalog."},"signatures":[{"raw":"val make :\n ?server_policy:server_policy ->\n ?collision_policy:collision_policy ->\n endpoint:Libtmux.Endpoint.t ->\n version:string ->\n observed:Libtmux.Snapshot.t option -> Config.t -> (t, error) result","params":[{"name":"server_policy","type":"server_policy","optional":true,"keywordOnly":true},{"name":"collision_policy","type":"collision_policy","optional":true,"keywordOnly":true},{"name":"endpoint","type":"Libtmux.Endpoint.t","keywordOnly":true},{"name":"version","type":"string","keywordOnly":true},{"name":"observed","type":"Libtmux.Snapshot.t option","keywordOnly":true},{"name":"arg1","type":"Config.t"}],"returns":"(t, error) result"}],"slug":"libtmux_workspace-plan-make"},{"id":"Libtmux_workspace.Plan.pp_error","publicId":"Libtmux_workspace.Plan.pp_error","qualifiedName":"Libtmux_workspace.Plan.pp_error","name":"pp_error","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":106,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val pp_error : Format.formatter -> error -> unit","source":{"file":"workspace/libtmux_workspace.mli","line":106,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val pp_error : Format.formatter -> error -> unit","params":[{"name":"arg1","type":"Format.formatter"},{"name":"arg2","type":"error"}],"returns":"unit"}],"slug":"libtmux_workspace-plan-pp_error"},{"id":"Libtmux_workspace.Plan.scope","publicId":"Libtmux_workspace.Plan.scope","qualifiedName":"Libtmux_workspace.Plan.scope","name":"scope","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type scope = Session | Window of int | Pane of { window : int; pane : int }","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type scope =\n | Session \n | Window of int \n | Pane of {\n window: int ;\n pane: int } ","params":[]}],"slug":"libtmux_workspace-plan-scope"},{"id":"Libtmux_workspace.Plan.scope.Pane","publicId":"Libtmux_workspace.Plan.scope.Pane","name":"Pane","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Pane of { window : int; pane : int }","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.scope","variant":"struct","qualifiedName":"Libtmux_workspace.Plan.Pane","slug":"libtmux_workspace-plan-scope-pane"},{"id":"Libtmux_workspace.Plan.scope.Pane.pane","publicId":"Libtmux_workspace.Plan.scope.Pane.pane","name":"pane","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"pane : int","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.scope.Pane","type":"int","qualifiedName":"Libtmux_workspace.Plan.pane","slug":"libtmux_workspace-plan-scope-pane-pane"},{"id":"Libtmux_workspace.Plan.scope.Pane.window","publicId":"Libtmux_workspace.Plan.scope.Pane.window","name":"window","kind":"attribute","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"attribute","text":"window : int;","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.scope.Pane","type":"int","qualifiedName":"Libtmux_workspace.Plan.window","slug":"libtmux_workspace-plan-scope-pane-window"},{"id":"Libtmux_workspace.Plan.scope.Session","publicId":"Libtmux_workspace.Plan.scope.Session","name":"Session","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Session","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.scope","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Session","slug":"libtmux_workspace-plan-scope-session"},{"id":"Libtmux_workspace.Plan.scope.Window","publicId":"Libtmux_workspace.Plan.scope.Window","name":"Window","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Window of int","source":{"file":"workspace/libtmux_workspace.mli","line":108,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.scope","variant":"tuple","qualifiedName":"Libtmux_workspace.Plan.Window","slug":"libtmux_workspace-plan-scope-window"},{"id":"Libtmux_workspace.Plan.server_policy","publicId":"Libtmux_workspace.Plan.server_policy","qualifiedName":"Libtmux_workspace.Plan.server_policy","name":"server_policy","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type server_policy = Create_if_missing | Require_existing_server","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type server_policy =\n | Create_if_missing \n | Require_existing_server ","params":[]}],"slug":"libtmux_workspace-plan-server_policy"},{"id":"Libtmux_workspace.Plan.server_policy.Create_if_missing","publicId":"Libtmux_workspace.Plan.server_policy.Create_if_missing","name":"Create_if_missing","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Create_if_missing","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.server_policy","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Create_if_missing","slug":"libtmux_workspace-plan-server_policy-create_if_missing"},{"id":"Libtmux_workspace.Plan.server_policy.Require_existing_server","publicId":"Libtmux_workspace.Plan.server_policy.Require_existing_server","name":"Require_existing_server","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"| Require_existing_server","source":{"file":"workspace/libtmux_workspace.mli","line":90,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.server_policy","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Require_existing_server","slug":"libtmux_workspace-plan-server_policy-require_existing_server"},{"id":"Libtmux_workspace.Plan.source","publicId":"Libtmux_workspace.Plan.source","qualifiedName":"Libtmux_workspace.Plan.source","name":"source","kind":"function","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":149,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"function","text":"val source : t -> Libtmux.Source.t option","source":{"file":"workspace/libtmux_workspace.mli","line":149,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"val source : t -> Libtmux.Source.t option","params":[{"name":"arg1","type":"t"}],"returns":"Libtmux.Source.t option"}],"slug":"libtmux_workspace-plan-source"},{"id":"Libtmux_workspace.Plan.t","publicId":"Libtmux_workspace.Plan.t","qualifiedName":"Libtmux_workspace.Plan.t","name":"t","kind":"typealias","package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":133,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"typealias","text":"type t","source":{"file":"workspace/libtmux_workspace.mli","line":133,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type t","params":[]}],"modifiers":["opaque"],"slug":"libtmux_workspace-plan-t"},{"id":"Libtmux_workspace.Plan.window_collision","publicId":"Libtmux_workspace.Plan.window_collision","qualifiedName":"Libtmux_workspace.Plan.window_collision","name":"window_collision","kind":"enum","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":91,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"nativeDocumentation":[],"declarations":[{"kind":"enum","text":"type window_collision = Reject","source":{"file":"workspace/libtmux_workspace.mli","line":91,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan","signatures":[{"raw":"type window_collision =\n | Reject ","params":[]}],"slug":"libtmux_workspace-plan-window_collision"},{"id":"Libtmux_workspace.Plan.window_collision.Reject","publicId":"Libtmux_workspace.Plan.window_collision.Reject","name":"Reject","kind":"constant","modifiers":[],"package":"libtmux-workspace","product":"workspace","apiScope":"exported","publicOwner":"Libtmux_workspace","source":{"file":"workspace/libtmux_workspace.mli","line":91,"repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","extractedRevision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"},"signatures":[],"nativeDocumentation":[],"declarations":[{"kind":"constant","text":"Reject","source":{"file":"workspace/libtmux_workspace.mli","line":91,"repo":"https://github.com/libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9"}}],"parent":"Libtmux_workspace.Plan.window_collision","variant":"unit","qualifiedName":"Libtmux_workspace.Plan.Reject","slug":"libtmux_workspace-plan-window_collision-reject"}]} diff --git a/site/src/data/api/ocaml.paths.json b/site/src/data/api/ocaml.paths.json index 523eabe80..1240eea3c 100644 --- a/site/src/data/api/ocaml.paths.json +++ b/site/src/data/api/ocaml.paths.json @@ -1 +1 @@ -{"port":"ocaml","repo":"libtmux/libtmux-ocaml","revision":"205dfda49742592b479247049d186956e4a4cfe9","paths":[".github/CONTRIBUTING.md",".github/WRITING.md",".github/actions/build-tmux/action.yml",".github/scripts/tmux_build.py",".github/social-preview.png",".github/tmux-releases.toml",".github/workflows/docs.yml",".github/workflows/ocaml.yml",".gitignore",".ocamlformat",".tool-versions","AGENTS.md","CHANGELOG.md","CLAUDE.md","LICENSE","README.md","bench/capture.ml","bench/capture.py","bench/concurrency.ml","bench/concurrency.py","bench/control.ml","bench/control.py","bench/dune","bench/mixed.ml","bench/mixed.py","bench/results/capture-3.3-4x4.json","bench/results/capture-3.3.json","bench/results/capture-3.3a-4x4.json","bench/results/capture-3.3a.json","bench/results/capture-3.4-4x4.json","bench/results/capture-3.4.json","bench/results/capture-3.8-16x16.json","bench/results/capture-3.8-1x1.json","bench/results/capture-3.8-4x4.json","bench/results/capture-3.8-8x8.json","bench/results/capture-3.8.json","bench/results/concurrency-3.3-c8.json","bench/results/concurrency-3.3a-c8.json","bench/results/concurrency-3.4-c8.json","bench/results/concurrency-3.8-c1.json","bench/results/concurrency-3.8-c16.json","bench/results/concurrency-3.8-c64.json","bench/results/concurrency-3.8-c8.json","bench/results/control-3.3a-128-1-8-32.json","bench/results/control-3.8-128-1-8-32.json","bench/results/mixed-20261108.json","bench/results/mixed-3.3-current-20261108.json.gz","bench/results/mixed-3.3-qualified-20261108.json.gz","bench/results/mixed-3.3a-current-20261108.json.gz","bench/results/mixed-3.4-crash-analysis-20261108.json","bench/results/mixed-3.4-qualified-20261108.json.gz","bench/results/mixed-3.8-current-20261108.json.gz","bench/results/mixed-3.8-current-interrupted-20261108.json.gz","bench/results/retention-3.8-16x1.json","bench/results/retention-3.8-1x1.json","bench/results/retention-3.8-64x1-25-captures.json","bench/results/retention-3.8-64x1.json","bench/retention.ml","bench/retention.py","catalog/fields.json","catalog/formats.json","catalog/operations.json","catalog/options.json","catalog/releases.json","cli/CHANGELOG.md","cli/dune","cli/main.ml","cli/runtime.ml","docs/README.md","docs/api.md","docs/assets/app-icon-1024-dark.png","docs/assets/app-icon-1024-light.png","docs/assets/apple-touch-icon-dark.png","docs/assets/apple-touch-icon-light.png","docs/assets/browserconfig-dark.xml","docs/assets/browserconfig.xml","docs/assets/favicon.ico","docs/assets/logo-1024.png","docs/assets/logo-128.png","docs/assets/logo-144.png","docs/assets/logo-152.png","docs/assets/logo-16.png","docs/assets/logo-167.png","docs/assets/logo-180.png","docs/assets/logo-192.png","docs/assets/logo-24.png","docs/assets/logo-256.png","docs/assets/logo-32.png","docs/assets/logo-384.png","docs/assets/logo-48.png","docs/assets/logo-512.png","docs/assets/logo-64.png","docs/assets/logo-96.png","docs/assets/logo.svg","docs/assets/maskable-192-dark.png","docs/assets/maskable-192-light.png","docs/assets/maskable-512-dark.png","docs/assets/maskable-512-light.png","docs/assets/mstile-150-dark.png","docs/assets/mstile-150-light.png","docs/assets/mstile-310-dark.png","docs/assets/mstile-310-light.png","docs/assets/opengraph-dark.jpg","docs/assets/opengraph-dark.png","docs/assets/opengraph-light.jpg","docs/assets/opengraph-light.png","docs/assets/safari-pinned-tab.svg","docs/assets/site-dark.webmanifest","docs/assets/site.webmanifest","docs/assets/social-square-dark.png","docs/assets/social-square-light.png","docs/assets/source.json","docs/assets/twitter-dark.png","docs/assets/twitter-light.png","docs/benchmarking.md","docs/bootstrap.md","docs/branding.md","docs/compatibility.md","docs/control.md","docs/dev/adr/0001-native-ocaml-suite.md","docs/dev/adr/README.md","docs/fields.md","docs/formats.md","docs/getting-started.md","docs/graph.md","docs/hook-recovery.md","docs/operations.md","docs/options.md","docs/packages.md","docs/queries.md","docs/query-interchange.md","docs/recovery.md","docs/showcases.md","docs/status.md","docs/streaming.md","docs/testing.md","docs/workspace-recovery.md","docs/workspaces.md","dune","dune-project","eio/CHANGELOG.md","eio/README.md","eio/dune","eio/generated_operations.ml","eio/index.mld","eio/libtmux_eio.ml","eio/libtmux_eio.mli","eio/owned_process.ml","eio/runtime.ml","examples/dune","examples/native_build.ml","examples/native_capture.ml","examples/native_graph.ml","examples/native_hook_recovery.ml","examples/native_query.ml","examples/native_recovery.ml","examples/native_stream_recovery.ml","examples/native_wait.ml","examples/native_watch.ml","examples/native_workspace_recovery.ml","examples/query_description.ml","examples/query_json.ml","examples/showcase.json","examples/showcase_bootstrap.ml","examples/showcase_create_window.ml","examples/showcase_graph.ml","examples/showcase_layout.ml","examples/showcase_move_window.ml","examples/showcase_rename_window.ml","examples/showcase_send_keys.ml","examples/showcase_watch.ml","examples/workspace/project.json","json/CHANGELOG.md","json/README.md","json/document.ml","json/dune","json/index.mld","json/libtmux_json.ml","json/libtmux_json.mli","json/workspace_json.ml","json/workspace_output.ml","lib/CHANGELOG.md","lib/README.md","lib/commands.ml","lib/dune","lib/endpoint.ml","lib/error.ml","lib/filter.ml","lib/format_catalog.ml","lib/formats.ml","lib/generated_fields.ml","lib/graph.ml","lib/index.mld","lib/libtmux.ml","lib/libtmux.mli","lib/option_catalog.ml","lib/options.ml","lib/output.ml","lib/planner.ml","lib/protocol.ml","libtmux-eio.opam","libtmux-json.opam","libtmux-unix.opam","libtmux-workspace-cli.opam","libtmux-workspace.opam","libtmux.opam","test/api_export_test.py","test/binding_peer.ml","test/binding_test.py","test/blocking_cancel_peer.ml","test/blocking_peer.ml","test/blocking_test.py","test/bootstrap_peer.ml","test/bootstrap_test.py","test/capture_cancel_peer.ml","test/capture_cancel_test.py","test/capture_peer.ml","test/capture_proxy.py","test/capture_test.py","test/cleanup_test.ml","test/client_operations_peer.ml","test/client_operations_test.py","test/codec_peer.ml","test/conformance/FilterPeer.java","test/conformance/README.md","test/conformance/artifacts.gradle","test/conformance/cases.json","test/conformance/dune","test/conformance/filter_peer.ml","test/conformance/prepare.py","test/conformance/run.py","test/conformance/runner_test.py","test/core_test.ml","test/diagnostics_expect.ml","test/dune","test/eio_peer.ml","test/eio_test.py","test/environment_peer.ml","test/environment_test.py","test/fixture_diagnostics_test.py","test/fixture_test.py","test/installed_consumer.py","test/installed_consumer_diagnostics_test.py","test/json_test.ml","test/model_fixture.ml","test/model_test.ml","test/native_suite.py","test/operations_peer.ml","test/operations_test.py","test/options_peer.ml","test/options_test.py","test/ownership_peer.ml","test/pid_race_peer.ml","test/pid_race_test.py","test/pid_race_tmux.py","test/plan_peer.ml","test/plan_test.py","test/protocol_test.ml","test/protocol_test.py","test/query_test.ml","test/read_process_peer.ml","test/read_process_proxy.py","test/read_process_test.py","test/runtime_test.ml","test/showcase_test.py","test/shutdown_peer.ml","test/shutdown_test.py","test/stream_fault_peer.ml","test/stream_fault_test.py","test/streaming_peer.ml","test/streaming_test.py","test/support/readme_walkthrough.py","test/support/tmux_fixture.py","test/terminal_peer.ml","test/terminal_test.py","test/tmux_cache_test.py","test/type_test.py","test/workspace_cli_test.py","test/workspace_docs_test.py","test/workspace_document_test.py","test/workspace_eio_peer.ml","test/workspace_json_test.ml","test/workspace_pane_ready.ml","test/workspace_peer.ml","test/workspace_scenarios.ml","test/workspace_test.ml","test/workspace_test.py","tools/api_doc.ml","tools/api_export.ml","tools/api_modules.json","tools/check.py","tools/docs_snippets.py","tools/dune","tools/export_api.py","tools/generate_fields.py","tools/generate_formats.py","tools/generate_operations.py","tools/generate_options.py","tools/setup_tmux.py","unix/CHANGELOG.md","unix/README.md","unix/acquisition.ml","unix/bootstrap.ml","unix/byte_pattern.ml","unix/cancellation.ml","unix/capture_file.ml","unix/cleanup.ml","unix/cleanup.mli","unix/command_encoding.ml","unix/connection.ml","unix/dune","unix/engine.ml","unix/environment_io.ml","unix/generated_operations.ml","unix/index.mld","unix/libtmux_unix.ml","unix/libtmux_unix.mli","unix/linux.ml","unix/linux_stubs.c","unix/observation_wait.ml","unix/options_io.ml","unix/read_process.ml","unix/rendered.ml","unix/runtime_io.ml","unix/streaming.ml","unix/terminal.ml","unix/workspace_runner.ml","workspace/CHANGELOG.md","workspace/README.md","workspace/assets/app-icon-1024-dark.png","workspace/assets/app-icon-1024-light.png","workspace/assets/apple-touch-icon-dark.png","workspace/assets/apple-touch-icon-light.png","workspace/assets/browserconfig-dark.xml","workspace/assets/browserconfig.xml","workspace/assets/favicon.ico","workspace/assets/logo-1024.png","workspace/assets/logo-128.png","workspace/assets/logo-144.png","workspace/assets/logo-152.png","workspace/assets/logo-16.png","workspace/assets/logo-167.png","workspace/assets/logo-180.png","workspace/assets/logo-192.png","workspace/assets/logo-24.png","workspace/assets/logo-256.png","workspace/assets/logo-32.png","workspace/assets/logo-384.png","workspace/assets/logo-48.png","workspace/assets/logo-512.png","workspace/assets/logo-64.png","workspace/assets/logo-96.png","workspace/assets/logo.svg","workspace/assets/maskable-192-dark.png","workspace/assets/maskable-192-light.png","workspace/assets/maskable-512-dark.png","workspace/assets/maskable-512-light.png","workspace/assets/mstile-150-dark.png","workspace/assets/mstile-150-light.png","workspace/assets/mstile-310-dark.png","workspace/assets/mstile-310-light.png","workspace/assets/opengraph-dark.jpg","workspace/assets/opengraph-dark.png","workspace/assets/opengraph-light.jpg","workspace/assets/opengraph-light.png","workspace/assets/safari-pinned-tab.svg","workspace/assets/site-dark.webmanifest","workspace/assets/site.webmanifest","workspace/assets/social-square-dark.png","workspace/assets/social-square-light.png","workspace/assets/source.json","workspace/assets/twitter-dark.png","workspace/assets/twitter-light.png","workspace/config.ml","workspace/dune","workspace/execution.ml","workspace/index.mld","workspace/libtmux_workspace.ml","workspace/libtmux_workspace.mli","workspace/plan.ml"]} +{"port":"ocaml","repo":"libtmux/libtmux-ocaml","revision":"ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9","paths":[".github/CONTRIBUTING.md",".github/WRITING.md",".github/actions/build-tmux/action.yml",".github/scripts/tmux_build.py",".github/social-preview.png",".github/tmux-releases.toml",".github/workflows/docs.yml",".github/workflows/ocaml.yml",".gitignore",".ocamlformat",".tool-versions","AGENTS.md","CHANGELOG.md","CLAUDE.md","LICENSE","README.md","bench/capture.ml","bench/capture.py","bench/concurrency.ml","bench/concurrency.py","bench/control.ml","bench/control.py","bench/dune","bench/mixed.ml","bench/mixed.py","bench/results/capture-3.3-4x4.json","bench/results/capture-3.3.json","bench/results/capture-3.3a-4x4.json","bench/results/capture-3.3a.json","bench/results/capture-3.4-4x4.json","bench/results/capture-3.4.json","bench/results/capture-3.8-16x16.json","bench/results/capture-3.8-1x1.json","bench/results/capture-3.8-4x4.json","bench/results/capture-3.8-8x8.json","bench/results/capture-3.8.json","bench/results/concurrency-3.3-c8.json","bench/results/concurrency-3.3a-c8.json","bench/results/concurrency-3.4-c8.json","bench/results/concurrency-3.8-c1.json","bench/results/concurrency-3.8-c16.json","bench/results/concurrency-3.8-c64.json","bench/results/concurrency-3.8-c8.json","bench/results/control-3.3a-128-1-8-32.json","bench/results/control-3.8-128-1-8-32.json","bench/results/mixed-20261108.json","bench/results/mixed-3.3-current-20261108.json.gz","bench/results/mixed-3.3-qualified-20261108.json.gz","bench/results/mixed-3.3a-current-20261108.json.gz","bench/results/mixed-3.4-crash-analysis-20261108.json","bench/results/mixed-3.4-qualified-20261108.json.gz","bench/results/mixed-3.8-current-20261108.json.gz","bench/results/mixed-3.8-current-interrupted-20261108.json.gz","bench/results/retention-3.8-16x1.json","bench/results/retention-3.8-1x1.json","bench/results/retention-3.8-64x1-25-captures.json","bench/results/retention-3.8-64x1.json","bench/retention.ml","bench/retention.py","catalog/fields.json","catalog/formats.json","catalog/operations.json","catalog/options.json","catalog/releases.json","cli/CHANGELOG.md","cli/README.md","cli/dune","cli/main.ml","cli/runtime.ml","docs/README.md","docs/api.md","docs/assets/app-icon-1024-dark.png","docs/assets/app-icon-1024-light.png","docs/assets/apple-touch-icon-dark.png","docs/assets/apple-touch-icon-light.png","docs/assets/browserconfig-dark.xml","docs/assets/browserconfig.xml","docs/assets/favicon.ico","docs/assets/logo-1024.png","docs/assets/logo-128.png","docs/assets/logo-144.png","docs/assets/logo-152.png","docs/assets/logo-16.png","docs/assets/logo-167.png","docs/assets/logo-180.png","docs/assets/logo-192.png","docs/assets/logo-24.png","docs/assets/logo-256.png","docs/assets/logo-32.png","docs/assets/logo-384.png","docs/assets/logo-48.png","docs/assets/logo-512.png","docs/assets/logo-64.png","docs/assets/logo-96.png","docs/assets/logo.svg","docs/assets/maskable-192-dark.png","docs/assets/maskable-192-light.png","docs/assets/maskable-512-dark.png","docs/assets/maskable-512-light.png","docs/assets/mstile-150-dark.png","docs/assets/mstile-150-light.png","docs/assets/mstile-310-dark.png","docs/assets/mstile-310-light.png","docs/assets/opengraph-dark.jpg","docs/assets/opengraph-dark.png","docs/assets/opengraph-light.jpg","docs/assets/opengraph-light.png","docs/assets/safari-pinned-tab.svg","docs/assets/site-dark.webmanifest","docs/assets/site.webmanifest","docs/assets/social-square-dark.png","docs/assets/social-square-light.png","docs/assets/source.json","docs/assets/twitter-dark.png","docs/assets/twitter-light.png","docs/benchmarking.md","docs/bootstrap.md","docs/branding.md","docs/compatibility.md","docs/control.md","docs/dev/adr/0001-native-ocaml-suite.md","docs/dev/adr/README.md","docs/fields.md","docs/formats.md","docs/getting-started.md","docs/graph.md","docs/hook-recovery.md","docs/operations.md","docs/options.md","docs/packages.md","docs/queries.md","docs/query-interchange.md","docs/recovery.md","docs/showcases.md","docs/status.md","docs/streaming.md","docs/testing.md","docs/workspace-recovery.md","docs/workspaces.md","dune","dune-project","eio/CHANGELOG.md","eio/README.md","eio/dune","eio/generated_operations.ml","eio/index.mld","eio/libtmux_eio.ml","eio/libtmux_eio.mli","eio/owned_process.ml","eio/runtime.ml","examples/dune","examples/native_build.ml","examples/native_capture.ml","examples/native_graph.ml","examples/native_hook_recovery.ml","examples/native_query.ml","examples/native_recovery.ml","examples/native_stream_recovery.ml","examples/native_wait.ml","examples/native_watch.ml","examples/native_workspace_recovery.ml","examples/query_description.ml","examples/query_json.ml","examples/query_plan.ml","examples/showcase.json","examples/showcase_bootstrap.ml","examples/showcase_create_window.ml","examples/showcase_graph.ml","examples/showcase_layout.ml","examples/showcase_move_window.ml","examples/showcase_rename_window.ml","examples/showcase_send_keys.ml","examples/showcase_watch.ml","examples/workspace/project.json","examples/workspace_plan.ml","json/CHANGELOG.md","json/README.md","json/document.ml","json/dune","json/index.mld","json/libtmux_json.ml","json/libtmux_json.mli","json/workspace_json.ml","json/workspace_output.ml","lib/CHANGELOG.md","lib/README.md","lib/commands.ml","lib/dune","lib/endpoint.ml","lib/error.ml","lib/filter.ml","lib/format_catalog.ml","lib/formats.ml","lib/generated_fields.ml","lib/graph.ml","lib/index.mld","lib/libtmux.ml","lib/libtmux.mli","lib/option_catalog.ml","lib/options.ml","lib/output.ml","lib/planner.ml","lib/protocol.ml","libtmux-eio.opam","libtmux-json.opam","libtmux-unix.opam","libtmux-workspace-cli.opam","libtmux-workspace.opam","libtmux.opam","test/api_export_test.py","test/binding_peer.ml","test/binding_test.py","test/blocking_cancel_peer.ml","test/blocking_peer.ml","test/blocking_test.py","test/bootstrap_peer.ml","test/bootstrap_test.py","test/capture_cancel_peer.ml","test/capture_cancel_test.py","test/capture_peer.ml","test/capture_proxy.py","test/capture_test.py","test/cleanup_test.ml","test/client_operations_peer.ml","test/client_operations_test.py","test/codec_peer.ml","test/conformance/FilterPeer.java","test/conformance/README.md","test/conformance/artifacts.gradle","test/conformance/cases.json","test/conformance/dune","test/conformance/filter_peer.ml","test/conformance/prepare.py","test/conformance/run.py","test/conformance/runner_test.py","test/core_test.ml","test/diagnostics_expect.ml","test/dune","test/eio_peer.ml","test/eio_test.py","test/environment_peer.ml","test/environment_test.py","test/fixture_diagnostics_test.py","test/fixture_test.py","test/installed_consumer.py","test/installed_consumer_diagnostics_test.py","test/json_test.ml","test/model_fixture.ml","test/model_test.ml","test/native_suite.py","test/operations_peer.ml","test/operations_test.py","test/options_peer.ml","test/options_test.py","test/ownership_peer.ml","test/pid_race_peer.ml","test/pid_race_test.py","test/pid_race_tmux.py","test/plan_peer.ml","test/plan_test.py","test/protocol_test.ml","test/protocol_test.py","test/query_test.ml","test/read_process_peer.ml","test/read_process_proxy.py","test/read_process_test.py","test/runtime_test.ml","test/showcase_test.py","test/shutdown_peer.ml","test/shutdown_test.py","test/stream_close_peer.ml","test/stream_close_test.py","test/stream_fault_peer.ml","test/stream_fault_test.py","test/streaming_peer.ml","test/streaming_test.py","test/support/readme_walkthrough.py","test/support/tmux_fixture.py","test/terminal_peer.ml","test/terminal_test.py","test/tmux_cache_test.py","test/type_test.py","test/workspace_cli_test.py","test/workspace_docs_test.py","test/workspace_document_test.py","test/workspace_eio_peer.ml","test/workspace_json_test.ml","test/workspace_pane_ready.ml","test/workspace_peer.ml","test/workspace_scenarios.ml","test/workspace_test.ml","test/workspace_test.py","tools/api_doc.ml","tools/api_export.ml","tools/api_modules.json","tools/check.py","tools/docs_snippets.py","tools/dune","tools/export_api.py","tools/generate_fields.py","tools/generate_formats.py","tools/generate_operations.py","tools/generate_options.py","tools/setup_tmux.py","unix/CHANGELOG.md","unix/README.md","unix/acquisition.ml","unix/bootstrap.ml","unix/byte_pattern.ml","unix/cancellation.ml","unix/capture_file.ml","unix/cleanup.ml","unix/cleanup.mli","unix/command_encoding.ml","unix/connection.ml","unix/dune","unix/engine.ml","unix/environment_io.ml","unix/generated_operations.ml","unix/index.mld","unix/libtmux_unix.ml","unix/libtmux_unix.mli","unix/linux.ml","unix/linux_stubs.c","unix/observation_wait.ml","unix/options_io.ml","unix/read_process.ml","unix/rendered.ml","unix/runtime_io.ml","unix/streaming.ml","unix/terminal.ml","unix/workspace_runner.ml","workspace/CHANGELOG.md","workspace/README.md","workspace/assets/app-icon-1024-dark.png","workspace/assets/app-icon-1024-light.png","workspace/assets/apple-touch-icon-dark.png","workspace/assets/apple-touch-icon-light.png","workspace/assets/browserconfig-dark.xml","workspace/assets/browserconfig.xml","workspace/assets/favicon.ico","workspace/assets/logo-1024.png","workspace/assets/logo-128.png","workspace/assets/logo-144.png","workspace/assets/logo-152.png","workspace/assets/logo-16.png","workspace/assets/logo-167.png","workspace/assets/logo-180.png","workspace/assets/logo-192.png","workspace/assets/logo-24.png","workspace/assets/logo-256.png","workspace/assets/logo-32.png","workspace/assets/logo-384.png","workspace/assets/logo-48.png","workspace/assets/logo-512.png","workspace/assets/logo-64.png","workspace/assets/logo-96.png","workspace/assets/logo.svg","workspace/assets/maskable-192-dark.png","workspace/assets/maskable-192-light.png","workspace/assets/maskable-512-dark.png","workspace/assets/maskable-512-light.png","workspace/assets/mstile-150-dark.png","workspace/assets/mstile-150-light.png","workspace/assets/mstile-310-dark.png","workspace/assets/mstile-310-light.png","workspace/assets/opengraph-dark.jpg","workspace/assets/opengraph-dark.png","workspace/assets/opengraph-light.jpg","workspace/assets/opengraph-light.png","workspace/assets/safari-pinned-tab.svg","workspace/assets/site-dark.webmanifest","workspace/assets/site.webmanifest","workspace/assets/social-square-dark.png","workspace/assets/social-square-light.png","workspace/assets/source.json","workspace/assets/twitter-dark.png","workspace/assets/twitter-light.png","workspace/config.ml","workspace/dune","workspace/execution.ml","workspace/index.mld","workspace/libtmux_workspace.ml","workspace/libtmux_workspace.mli","workspace/plan.ml"]} diff --git a/site/src/data/example-sources.json b/site/src/data/example-sources.json index 8954bcd88..f7a5a3188 100644 --- a/site/src/data/example-sources.json +++ b/site/src/data/example-sources.json @@ -157,63 +157,63 @@ }, "ocaml:examples/showcase_create_window.ml": { "repository": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", "sha256": "ea2d5ff182bb80b2f8115d4d2c43cf8e32f7989626fa9d6dfda666b76dc8217b", "content": "open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet create_window client (initial : Created.t) spawn =\n let created =\n get (Client.create_window client initial.session ~name:\"logs\" ~spawn)\n in\n let window =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id created.window)\n |> Option.get\n in\n assert (Window.name window = \"logs\");\n Printf.printf \"created: %s\\n\" (Window.name window)\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary create_window\n" }, "ocaml:examples/showcase_graph.ml": { "repository": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", - "sha256": "daa3c08e96c7aa366f6ac798b41a09e2f967c2fcf6c343df194c4e7fc4627a26", - "content": "open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n" + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", + "sha256": "410a75f52dc5664b05cb2a71486a788bfe5e8ab52144fe16dda58ab076577711", + "content": "(* docs:begin capture-graph *)\nopen Libtmux\nmodule Client = Libtmux_unix.Client\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n(* docs:end capture-graph *)\n\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n" }, "ocaml:examples/showcase_layout.ml": { "repository": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", "sha256": "dca905f7b9b91858ec642fa21c2bd7c544f3a7684223f7fafd5a46f2b997cfd0", "content": "open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet set_layout client (initial : Created.t) spawn =\n ignore\n (get\n (Client.split_pane client initial.pane ~direction:Geometry.Right ~spawn));\n ignore\n (get\n (Client.split_pane client initial.pane ~direction:Geometry.Right ~spawn));\n get (Client.select_layout client initial.window Layout.Even_horizontal);\n let window =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id initial.window)\n |> Option.get\n in\n let panes = Window.panes window in\n assert (Iarray.length panes = 3);\n assert (\n Iarray.for_all\n (fun pane -> Pane.top pane = 0 && Pane.height pane = Window.height window)\n panes);\n assert (\n Iarray.fold_left (fun width pane -> width + Pane.width pane) 2 panes\n = Window.width window);\n print_endline \"layout: 3 horizontal panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary set_layout\n" }, "ocaml:examples/showcase_move_window.ml": { "repository": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", "sha256": "da767e573f7188350a328c78b9417610a2bc62992e1892b501435a6328e21cc5", "content": "open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet move_window client (initial : Created.t) spawn =\n let moving =\n get (Client.create_window client initial.session ~name:\"build\" ~spawn)\n in\n let destination =\n get\n (Client.create_session client ~name:\"destination\" ~window_name:\"landing\"\n ~spawn ())\n in\n get\n (Client.move_window_at client initial.session\n ~from_index:moving.window_index ~session:destination.session ~index:7);\n let window =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id moving.window)\n |> Option.get\n in\n let link =\n Query.exactly_one (Iarray.to_seq (Window.links window)) |> Result.get_ok\n in\n assert (Window_link.index link = 7);\n assert (\n Session.Id.equal\n (Session.id (Window_link.session link))\n (Session.Target.id destination.session));\n Printf.printf \"moved: %s at %d\\n\" (Window.name window)\n (Window_link.index link)\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary move_window\n" }, "ocaml:examples/showcase_rename_window.ml": { "repository": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", "sha256": "8722c7cd933fa53a18b41b5fb2de7d6a99fcfa1f70e8c14164c85bebf9efc6d5", "content": "open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet rename_window client (initial : Created.t) _spawn =\n let before =\n Snapshot.find_window\n (get (Client.capture client))\n (Window.Target.id initial.window)\n |> Option.get\n in\n get (Client.rename_window client initial.window ~name:\"editor-main\");\n let after =\n Snapshot.find_window (get (Client.capture client)) (Window.id before)\n |> Option.get\n in\n assert (Window.name before = \"editor\");\n assert (Window.name after = \"editor-main\");\n Printf.printf \"renamed: %s\\n\" (Window.name after)\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary rename_window\n" }, "ocaml:examples/showcase_send_keys.ml": { "repository": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", - "sha256": "680f6772040e12a16b93bd0c6d582d0a5e8f4e70de303372ba924be6e0237f09", - "content": "open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet send_keys client (initial : Created.t) _spawn =\n let text = \"literal: $HOME; #{pane_id}\" in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n get (Client.send_text client (Pane.target pane) ~text);\n get (Client.send_keys client (Pane.target pane) [ Key.Enter ]);\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n Printf.printf \"sent: %s\\n\" text\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary send_keys\n" + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", + "sha256": "91a837952da87d3ffcbc09c18dda0435244c75db7f0bb52cbd8f254683367a0d", + "content": "(* docs:begin pane-io *)\nopen Libtmux\nmodule Client = Libtmux_unix.Client\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet find client target =\n Snapshot.find_pane (get (Client.capture client)) (Pane.Target.id target)\n |> Option.get\n\nlet wait client pane text =\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text))\n\nlet drive client (initial : Created.t) spawn =\n let right =\n get (Client.split_pane client initial.pane ~direction:Geometry.Right ~spawn)\n in\n let pane = find client right.pane in\n wait client pane \"showcase ready\";\n let text = \"literal: $HOME; #{pane_id}\" in\n get (Client.send_text client right.pane ~text);\n get (Client.send_keys client right.pane [ Key.Enter ]);\n wait client pane text;\n let screen = get (Client.capture_text client pane ~start:0 ~end_:1) in\n Printf.printf \"sent: %s\\ncaptured: %S\\n\" text screen.bytes;\n get (Client.resize_window client initial.window ~width:100 ~height:30);\n get (Client.resize_pane client right.pane ~width:20);\n let resized = find client right.pane in\n Printf.printf \"resized: %dx%d\\n\" (Pane.width resized) (Pane.height resized)\n(* docs:end pane-io *)\n\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary drive\n" }, "ocaml:examples/showcase_watch.ml": { "repository": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", "sha256": "98fa6d843a98a4d98bbdd398108704805e852a262df0e54b43c08d3f2e299f8f", "content": "open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet watch_output binary blocking (initial : Created.t) _spawn =\n Eio_main.run @@ fun env ->\n Eio.Switch.run @@ fun sw ->\n let module Client = Libtmux_eio.Client in\n let module Subscription = Libtmux_eio.Subscription in\n let client =\n get\n (Client.connect ~sw ~binary\n ~process_mgr:(Eio.Stdenv.process_mgr env)\n ~mono_clock:(Eio.Stdenv.mono_clock env)\n (Source.endpoint (Libtmux_unix.Client.source blocking)))\n in\n Fun.protect\n ~finally:(fun () ->\n Eio.Cancel.protect (fun () -> get (Client.close client)))\n (fun () ->\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n let subscription =\n get (Client.subscribe ~capacity_bytes:4096 client pane)\n in\n Fun.protect\n ~finally:(fun () ->\n Eio.Cancel.protect (fun () -> get (Subscription.close subscription)))\n (fun () ->\n let cursor, () =\n Eio.Fiber.pair\n (fun () ->\n match\n Subscription.wait_for_bytes ~timeout:0.5 subscription\n ~text:\"changed\"\n with\n | Ok cursor -> cursor\n | Error (Output.Failure error) ->\n failwith (Format.asprintf \"%a\" Error.pp error)\n | Error (Output.Ended reason) ->\n failwith (Format.asprintf \"%a\" Output.reason_pp reason))\n (fun () ->\n get (Client.send_text client (Pane.target pane) ~text:\"changed\");\n get (Client.send_keys client (Pane.target pane) [ Key.Enter ]))\n in\n assert (cursor.offset >= 7L);\n print_endline \"observed: changed\"))\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n with_demo binary (watch_output binary)\n" }, "ocaml:examples/showcase.json": { "repository": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", - "sha256": "8f81b5d13e12bab22bc1f58e64e016f3391b22fac8980af3a270b67058942416", - "content": "{\n \"schema\": \"libtmux.showcase/1\",\n \"tmux_floor\": \"3.3a\",\n \"ci\": {\n \"workflow\": \".github/workflows/ocaml.yml\",\n \"job\": \"native\",\n \"runner\": \"test/showcase_test.py\"\n },\n \"examples\": [\n {\n \"capability\": \"bootstrap\",\n \"title\": \"Start a private server and capture its first session\",\n \"file\": \"examples/showcase_bootstrap.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_bootstrap.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"bootstrapped: 1 session, 1 window, 1 pane\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"graph\",\n \"title\": \"Navigate the typed object graph\",\n \"file\": \"examples/showcase_graph.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_graph.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"graph: 2 sessions, 2 windows, 3 links, 2 panes\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"watch\",\n \"title\": \"Observe future output with Eio\",\n \"file\": \"examples/showcase_watch.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_watch.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"observed: changed\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"send-keys\",\n \"title\": \"Send literal input and keys\",\n \"file\": \"examples/showcase_send_keys.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_send_keys.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"sent: literal: $HOME; #{pane_id}\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"rename-window\",\n \"title\": \"Rename a window\",\n \"file\": \"examples/showcase_rename_window.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_rename_window.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"renamed: editor-main\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"create-window\",\n \"title\": \"Create a window\",\n \"file\": \"examples/showcase_create_window.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_create_window.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"created: logs\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"move-window\",\n \"title\": \"Move a window between sessions\",\n \"file\": \"examples/showcase_move_window.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_move_window.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"moved: build at 7\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"layout\",\n \"title\": \"Apply a layout\",\n \"file\": \"examples/showcase_layout.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_layout.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"layout: 3 horizontal panes\",\n \"success_exit_code\": 0\n }\n ]\n}\n" + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", + "sha256": "0b88c0c50b77244315d954e07d36e63eb8e8051011627713bc951d4998cff9ce", + "content": "{\n \"schema\": \"libtmux.showcase/1\",\n \"tmux_floor\": \"3.3a\",\n \"ci\": {\n \"workflow\": \".github/workflows/ocaml.yml\",\n \"job\": \"native\",\n \"runner\": \"test/showcase_test.py\"\n },\n \"examples\": [\n {\n \"capability\": \"bootstrap\",\n \"title\": \"Start a private server and capture its first session\",\n \"file\": \"examples/showcase_bootstrap.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_bootstrap.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"bootstrapped: 1 session, 1 window, 1 pane\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"graph\",\n \"title\": \"Navigate the typed object graph\",\n \"file\": \"examples/showcase_graph.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_graph.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"graph: 2 sessions, 2 windows, 3 links, 2 panes\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"watch\",\n \"title\": \"Observe future output with Eio\",\n \"file\": \"examples/showcase_watch.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_watch.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"observed: changed\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"send-keys\",\n \"title\": \"Split a pane, send keys, capture the screen and resize\",\n \"file\": \"examples/showcase_send_keys.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_send_keys.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"sent: literal: $HOME; #{pane_id}\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"rename-window\",\n \"title\": \"Rename a window\",\n \"file\": \"examples/showcase_rename_window.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_rename_window.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"renamed: editor-main\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"create-window\",\n \"title\": \"Create a window\",\n \"file\": \"examples/showcase_create_window.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_create_window.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"created: logs\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"move-window\",\n \"title\": \"Move a window between sessions\",\n \"file\": \"examples/showcase_move_window.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_move_window.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"moved: build at 7\",\n \"success_exit_code\": 0\n },\n {\n \"capability\": \"layout\",\n \"title\": \"Apply a layout\",\n \"file\": \"examples/showcase_layout.ml\",\n \"whole_file\": true,\n \"command\": [\n \"opam\",\n \"exec\",\n \"--\",\n \"dune\",\n \"exec\",\n \"examples/showcase_layout.exe\",\n \"--\",\n \"tmux\"\n ],\n \"expected_stdout_line\": \"layout: 3 horizontal panes\",\n \"success_exit_code\": 0\n }\n ]\n}\n" }, "ocaml:test/showcase_test.py": { "repository": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", "sha256": "44e60a7fe50d8686abde4ac046ea38c8e14a43555c15284140cadf4ee5aef753", "content": "\"\"\"Outer: compile whole showcase programs against installed packages and run their entry points.\"\"\"\nimport ctypes\nimport json\nimport os\nfrom pathlib import Path\nimport selectors\nimport shutil\nimport signal\nimport subprocess\nimport sys\nimport tempfile\n\nroot = Path(__file__).resolve().parents[1]\nmanifest = json.loads((root / \"examples/showcase.json\").read_text())\nprograms = {}\nfor entry in manifest[\"examples\"]:\n path = (root / entry[\"file\"]).resolve()\n assert path.parent == root / \"examples\" and path.suffix == \".ml\"\n assert entry[\"whole_file\"] and entry[\"success_exit_code\"] == 0\n executable = str(Path(entry[\"file\"]).with_suffix(\".exe\"))\n assert entry[\"command\"] == [\"opam\", \"exec\", \"--\", \"dune\", \"exec\", executable, \"--\", \"tmux\"], \\\n \"showcase command does not execute its recorded source\"\n assert path.stem not in programs, \"duplicate showcase program\"\n programs[path.stem] = entry\nlibc = ctypes.CDLL(None, use_errno=True)\nif libc.prctl(36, 1, 0, 0, 0):\n raise OSError(ctypes.get_errno(), \"PR_SET_CHILD_SUBREAPER\")\nchild_file = Path(f\"/proc/self/task/{os.getpid()}/children\")\n\n\ndef children():\n return set(map(int, child_file.read_text().split()))\n\n\nwith tempfile.TemporaryDirectory(prefix=\"libtmux-ocaml-showcase-consumer-\") as temporary:\n temporary = Path(temporary)\n prefix = temporary / \"installed\"\n packages = [\"libtmux\", \"libtmux-workspace\", \"libtmux-unix\", \"libtmux-eio\"]\n subprocess.run([\"dune\", \"install\", \"--sections=lib,stublibs\", \"--prefix\", str(prefix), *packages],\n cwd=root, check=True, capture_output=True)\n project = temporary / \"consumer\"\n project.mkdir()\n runtime_temp = temporary / \"runtime-temp\"\n runtime_temp.mkdir(mode=0o700)\n (project / \"dune-project\").write_text(\"(lang dune 3.24)\\n\")\n examples = project / \"examples\"\n examples.mkdir()\n blocking = \" \".join(name for name in programs if name != \"showcase_watch\")\n (examples / \"dune\").write_text(\"(executables (names \" + blocking + \") (modules \" + blocking +\n \") (libraries libtmux libtmux-workspace libtmux-unix unix))\\n\" +\n \"(executable (name showcase_watch) (modules showcase_watch) \" +\n \"(libraries libtmux libtmux-workspace libtmux-unix libtmux-eio eio_main unix))\\n\")\n for name in programs:\n source = root / \"examples\" / f\"{name}.ml\"\n assert source.is_file(), f\"missing standalone showcase: {name}\"\n (examples / source.name).write_bytes(source.read_bytes())\n environment = dict(os.environ, OCAMLPATH=str(prefix / \"lib\"), TMPDIR=str(runtime_temp),\n TMUX=\"/unrelated/server,99999,0\", TMUX_PANE=\"%99999\")\n for key in [\"DUNE_SOURCEROOT\", \"DUNE_WORKSPACE\"]:\n environment.pop(key, None)\n environment[\"OPAMSWITCH\"] = subprocess.check_output(\n [\"opam\", \"switch\", \"show\", \"--safe\"], cwd=root, env=environment, text=True).strip()\n resolved = subprocess.check_output([\"opam\", \"exec\", \"--\", \"ocamlfind\", \"query\", *packages],\n cwd=project, env=environment, text=True).splitlines()\n assert list(map(Path, resolved)) == [prefix / \"lib\" / package for package in packages]\n built = subprocess.run([\"dune\", \"build\", \"--root\", str(project)],\n cwd=project, env=environment, capture_output=True)\n assert built.returncode == 0, (built.stdout + built.stderr).decode(errors=\"replace\")\n for index, binary in enumerate(sys.argv[1:]):\n actual = str(Path(binary).resolve(strict=True))\n fault = temporary / f\"fault-tmux-{index}\"\n audit = temporary / f\"fault-directory-{index}\"\n fault.write_text(\"#!/usr/bin/env python3\\nimport os,sys\\nfrom pathlib import Path\\n\" +\n \"args=sys.argv[1:]\\nif '-C' in args and 'new-session' in args:\\n\" +\n \" p=Path(args[args.index('-f')+1])\\n\" +\n f\" Path({str(audit)!r}).write_text(str(p.parent))\\n\" +\n \" with p.open('a') as output:\\n\" +\n \" session=os.environ['LIBTMUX_SHOWCASE_COLLISION']\\n\" +\n \" output.write(f'new-session -d -s {session} -- /bin/cat -u\\\\n')\\n\" +\n f\"os.execv({actual!r}, [{actual!r}, *args])\\n\")\n fault.chmod(0o700)\n cases = [(name, entry, actual, False) for name, entry in programs.items()]\n cases.append((\"showcase_create_window\", programs[\"showcase_create_window\"], str(fault), True))\n cases.append((\"showcase_bootstrap\", programs[\"showcase_bootstrap\"], str(fault), True))\n for name, entry, program, should_fail in cases:\n previous = children()\n command = [*entry[\"command\"][:-1], program]\n process = subprocess.Popen(command,\n cwd=project, env=dict(environment, LIBTMUX_SHOWCASE_COLLISION=\n \"bootstrap-demo\" if name == \"showcase_bootstrap\" else \"showcase\"),\n stdout=subprocess.PIPE,\n stderr=subprocess.PIPE)\n try:\n output, error = process.communicate(timeout=1)\n if should_fail:\n assert process.returncode == 2 and error, (name, process.returncode, output, error)\n assert entry[\"expected_stdout_line\"].encode() not in output.splitlines()\n if name == \"showcase_bootstrap\":\n assert b\"workspace \" in error and b\" did not complete\" in error, error\n assert b\"new-session\" in error and b\"no automatic retry\" in error, error\n directory = Path(audit.read_text())\n else:\n assert process.returncode == 0 and not error, (name, process.returncode, output, error)\n assert entry[\"expected_stdout_line\"].encode() in output.splitlines(), \\\n (name, \"missing expected outcome\", output)\n socket_line = next(line for line in output.splitlines() if line.startswith(b\"socket=\"))\n directory = Path(os.fsdecode(socket_line[len(b\"socket=\"):])).parent\n assert directory.name.startswith(\"libtmux-ocaml-showcase-\")\n assert not directory.exists(), \"showcase left its private directory\"\n for pid in children() - previous:\n descriptor = os.pidfd_open(pid)\n try:\n with selectors.DefaultSelector() as ready:\n ready.register(descriptor, selectors.EVENT_READ)\n assert ready.select(1), f\"{name} left owned child {pid} running\"\n os.waitpid(pid, 0)\n finally:\n os.close(descriptor)\n outcome = \"startup failure\" if should_fail else \"installed entry point\"\n print(f\"PASS {Path(binary).parent.name}: {name}, {outcome} and owned teardown\")\n finally:\n if process.poll() is None:\n process.kill()\n process.wait(timeout=1)\n while children() - previous:\n for pid in children() - previous:\n descriptor = os.pidfd_open(pid)\n try:\n try:\n signal.pidfd_send_signal(descriptor, signal.SIGTERM)\n except ProcessLookupError:\n pass\n with selectors.DefaultSelector() as ready:\n ready.register(descriptor, selectors.EVENT_READ)\n assert ready.select(1), \"owned showcase child did not terminate\"\n os.waitpid(pid, 0)\n finally:\n os.close(descriptor)\n process.stdout.close()\n process.stderr.close()\n for path in runtime_temp.iterdir():\n if path.is_dir():\n shutil.rmtree(path)\n else:\n path.unlink()\n" }, "ocaml/workspace:examples/showcase_graph.ml": { "repository": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", - "sha256": "daa3c08e96c7aa366f6ac798b41a09e2f967c2fcf6c343df194c4e7fc4627a26", - "content": "open Libtmux\nmodule Client = Libtmux_unix.Client\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n" + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", + "sha256": "410a75f52dc5664b05cb2a71486a788bfe5e8ab52144fe16dda58ab076577711", + "content": "(* docs:begin capture-graph *)\nopen Libtmux\nmodule Client = Libtmux_unix.Client\n\nlet get = function\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Error.pp error)\n\nlet capture_graph client (initial : Created.t) spawn =\n let linked =\n get\n (Client.create_session client ~name:\"linked\" ~window_name:\"linked-home\"\n ~spawn ())\n in\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id linked.pane)\n |> Option.get\n in\n let text = \"showcase ready\" in\n ignore (get (Client.wait_for_text ~timeout:0.5 client pane ~text));\n get\n (Client.link_window client initial.window ~session:linked.session ~index:7);\n get (Client.capture client)\n(* docs:end capture-graph *)\n\nmodule Workspace = Libtmux_unix.Workspace\nmodule Config = Libtmux_workspace.Config\nmodule Plan = Libtmux_workspace.Plan\nmodule Execution = Libtmux_workspace.Execution\n\nlet print_graph snapshot =\n Snapshot.sessions snapshot\n |> Iarray.iter (fun session ->\n Session.window_links session\n |> Iarray.iter (fun link ->\n let window = Window_link.window link in\n Printf.printf \"%s/%d %s: %d pane(s)\\n\" (Session.name session)\n (Window_link.index link) (Window.name window)\n (Iarray.length (Window.panes window))));\n assert (Iarray.length (Snapshot.sessions snapshot) = 2);\n assert (Iarray.length (Snapshot.windows snapshot) = 2);\n assert (Iarray.length (Snapshot.window_links snapshot) = 3);\n assert (Iarray.length (Snapshot.panes snapshot) = 2);\n print_endline \"graph: 2 sessions, 2 windows, 3 links, 2 panes\"\n\nlet with_demo binary use =\n let directory = Filename.temp_dir \"libtmux-ocaml-showcase-\" \"\" in\n Fun.protect\n ~finally:(fun () ->\n Sys.readdir directory\n |> Array.iter (fun name -> Sys.remove (Filename.concat directory name));\n Unix.rmdir directory)\n (fun () ->\n let socket = Filename.concat directory \"server\" in\n (* Give this private daemon a lifetime even if startup fails. *)\n let config_file = Filename.concat directory \"tmux.conf\" in\n Out_channel.with_open_text config_file (fun output ->\n output_string output \"set-option -s exit-unattached on\\n\");\n let wrapper = Filename.concat directory \"tmux\" in\n Out_channel.with_open_text wrapper (fun output ->\n Printf.fprintf output \"#!/bin/sh\\nexec %s -f %s \\\"$@\\\"\\n\"\n (Filename.quote binary)\n (Filename.quote config_file));\n Unix.chmod wrapper 0o700;\n let channel = Unix.open_process_args_in binary [| binary; \"-V\" |] in\n let version =\n Fun.protect\n ~finally:(fun () ->\n if Unix.close_process_in channel <> Unix.WEXITED 0 then\n failwith \"tmux version discovery failed\")\n (fun () -> String.trim (input_line channel))\n in\n if not (String.starts_with ~prefix:\"tmux \" version) then\n failwith \"invalid tmux version\";\n let version = String.sub version 5 (String.length version - 5) in\n let ready = Filename.concat directory \"ready.txt\" in\n Out_channel.with_open_text ready (fun output ->\n output_string output \"showcase ready\\n\");\n let spawn =\n Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\"; ready; \"-\" ] })\n in\n let config =\n match\n Config.make ~directory ~session:\"showcase\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Config.pp_error error)\n in\n let plan =\n match\n Plan.make\n ~endpoint:(Endpoint.socket_path socket)\n ~version ~observed:None config\n with\n | Ok value -> value\n | Error error -> failwith (Format.asprintf \"%a\" Plan.pp_error error)\n in\n let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in\n Fun.protect\n ~finally:(fun () -> get (Workspace.close operation))\n (fun () ->\n let receipt = get (Workspace.await operation) in\n if receipt.status <> Execution.Succeeded then\n failwith \"workspace setup failed\";\n let client = Option.get (Workspace.client operation) in\n let initial = List.hd (Iarray.get receipt.steps 0).created in\n Printf.printf \"socket=%s\\n%!\" socket;\n let pane =\n Snapshot.find_pane\n (get (Client.capture client))\n (Pane.Target.id initial.pane)\n |> Option.get\n in\n ignore\n (get\n (Client.wait_for_text ~timeout:0.5 client pane\n ~text:\"showcase ready\"));\n use client initial spawn))\n\nlet () =\n let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else \"tmux\" in\n let snapshot = with_demo binary capture_graph in\n print_graph snapshot\n" }, "perl/workspace:examples/workspace.pl": { "repository": "libtmux/libtmux-perl", diff --git a/site/src/data/manifest-packages.json b/site/src/data/manifest-packages.json index 875092a56..363bf1dbb 100644 --- a/site/src/data/manifest-packages.json +++ b/site/src/data/manifest-packages.json @@ -908,43 +908,43 @@ }, "ocaml": { "repo": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", "distributions": [ { "name": "libtmux", "manifest": "libtmux.opam", "repo": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9" + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9" }, { "name": "libtmux-eio", "manifest": "libtmux-eio.opam", "repo": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9" + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9" }, { "name": "libtmux-json", "manifest": "libtmux-json.opam", "repo": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9" + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9" }, { "name": "libtmux-unix", "manifest": "libtmux-unix.opam", "repo": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9" + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9" }, { "name": "libtmux-workspace", "manifest": "libtmux-workspace.opam", "repo": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9" + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9" }, { "name": "libtmux-workspace-cli", "manifest": "libtmux-workspace-cli.opam", "repo": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9" + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9" } ], "units": [] diff --git a/site/src/data/port-guides/ocaml.json b/site/src/data/port-guides/ocaml.json index a20bd41e3..8d5c1b77e 100644 --- a/site/src/data/port-guides/ocaml.json +++ b/site/src/data/port-guides/ocaml.json @@ -1,24 +1,24 @@ { "source": { "repository": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9" + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9" }, "guides": [ { "path": "docs/getting-started.md", - "content": "# Install and run your first capture\n\nUse the [README installation](../README.md#install-from-source) with OCaml\n5.5.2, opam and tmux on Linux. The native clients compile a small Linux C helper\nand require a C compiler and system headers. This source checkout installs the\nlibraries; no registry release is available yet.\n\nActivate the local switch in the current shell as shown in the README before\nchanging to a separate project. This exports the switch choice for `opam exec`\nwithout changing shell startup files or the global default switch.\n\n## Link an installed library\n\nFor a blocking program, use a Dune executable with `libtmux` and `libtmux-unix`:\n\n```dune\n(executable\n (name main)\n (libraries libtmux libtmux-unix))\n```\n\nFor the Eio examples, link the Eio backend and the application's runtime entry\npoint instead:\n\n```dune\n(executable\n (name main)\n (libraries libtmux libtmux-eio eio_main))\n```\n\nCreate `dune-project` with `(lang dune 3.24)`, save the\n[graph program](../examples/native_graph.ml) as `main.ml`, and build from that\nproject. The installed-example check does this outside the repository with a\nseparate install prefix; it does not depend on source-tree library resolution.\n\n```console\n$ opam exec -- dune build\n```\n\n## Select an endpoint explicitly\n\n`Endpoint.socket_path` accepts an absolute socket path; `Endpoint.named_socket`\ndescribes tmux's `-L` name. Constructing either performs no I/O. Ordinary\n`Client.connect` attaches to an existing daemon and does not start one.\n\nThe [private demo setup](../README.md#read-a-real-tmux-graph) creates an owned\nsocket and a `cat` pane. Run the graph program with the tmux binary and socket\npath, or copy its complete source into your project. It captures the graph,\ncloses its connection and prints retained observations.\n\nA connection identifies the daemon PID twice around pidfd acquisition. The\nclient and daemon must share a PID namespace and local scratch filesystem;\nan accessible socket by itself does not establish those conditions. A stale\nsource is an error, never permission to reconnect a mutation automatically.\n\n## Run a concurrent application\n\nThe [complete Eio example](../examples/native_watch.ml) calls `Eio_main.run`\nand `Eio.Switch.run`, then supplies `process_mgr` and `mono_clock` from the\napplication environment. Use that outer shape in your application. Capturing\nand querying values does not require adopting Eio in the pure core.\n\nExpected failures return `result` and print with `Error.pp`. Backend\ncancellation propagates separately. Clients and subscriptions belong to their\nconnecting domain; immutable observations can be shared. Close owned resources\nwith `Fun.protect` or the supplied Eio switch.\n\n[Object graph](graph.md) · [Queries](queries.md) · [Control](control.md) ·\n[API](api.md) · [Compatibility](compatibility.md)\n" + "content": "# Install and run your first capture\n\nFollow the [source install](../README.md#install-from-source). You need opam,\ntmux 3.3a or newer and a C compiler on Linux; the native clients build a small\nC helper. Not on opam yet.\n\nActivate the local switch in your shell, as the README shows, before changing to\na separate project. It leaves shell startup files and the default switch alone.\n\n## Link an installed library\n\nFor a blocking program, use a Dune executable with `libtmux` and `libtmux-unix`:\n\n```dune\n(executable\n (name main)\n (libraries libtmux libtmux-unix))\n```\n\nFor the Eio examples, link the Eio backend and the application's runtime entry\npoint instead:\n\n```dune\n(executable\n (name main)\n (libraries libtmux libtmux-eio eio_main))\n```\n\nCreate `dune-project` with `(lang dune 3.24)`, save the\n[graph program](../examples/native_graph.ml) as `main.ml`, and build from that\nproject.\n\n```console\n$ opam exec -- dune build\n```\n\n## Select an endpoint explicitly\n\n`Endpoint.socket_path` accepts an absolute socket path; `Endpoint.named_socket`\ndescribes tmux's `-L` name. Constructing either performs no I/O. Ordinary\n`Client.connect` attaches to an existing daemon and does not start one.\n\nThe graph program takes the tmux binary and a socket path. It captures the\ngraph, closes its connection and prints what it captured. For a self-contained\nrun on a private server, see the\n[README example](../README.md#read-a-real-tmux-graph).\n\nThe client and daemon must share a host, PID namespace and scratch filesystem;\na reachable socket alone does not prove that. A stale connection is an error,\nand nothing reconnects a mutation for you.\n\n## Run a concurrent application\n\nThe [complete Eio example](../examples/native_watch.ml) calls `Eio_main.run`\nand `Eio.Switch.run`, then supplies `process_mgr` and `mono_clock` from the\napplication environment. Use that outer shape in your application. Capturing\nand querying values does not require adopting Eio in the pure core.\n\nExpected failures return `result` and print with `Error.pp`. Backend\ncancellation propagates separately. Clients and subscriptions belong to their\nconnecting domain; immutable observations can be shared. Close owned resources\nwith `Fun.protect` or the supplied Eio switch.\n\n[Object graph](graph.md) · [Queries](queries.md) · [Control](control.md) ·\n[API](api.md) · [Compatibility](compatibility.md)\n" }, { "path": "docs/bootstrap.md", - "content": "# Start a private tmux server from OCaml\n\nUse `Workspace.submit_bootstrap` when the endpoint is known to be missing.\nIt creates the first session and binds a client through the same control\nconnection. The native workspace builder needs no JSON package;\n`Workspace.await` performs startup.\n\nFor an existing daemon, use `Client.connect`, capture its graph, and create a\nsession through that client. See [control and recovery](control.md).\n\n## Run the complete program\n\nComplete the [source installation](getting-started.md), then run from the\ncheckout:\n\n```console\n$ opam exec -- dune exec examples/showcase_bootstrap.exe -- tmux\n```\n\nThe program prints its temporary socket path followed by\n`bootstrapped: 1 session, 1 window, 1 pane`. It creates a `bootstrap-demo` session\nwhose `editor` window runs `/bin/cat -u`, captures the graph, and reads that\nsnapshot after closing its client.\n\nThe [complete source](../examples/showcase_bootstrap.ml) includes its private\ndirectory, tmux configuration, local version discovery and cleanup. To use the\nwhole program outside this checkout, save it as `main.ml` in the Dune project\nfrom [first use](getting-started.md#link-an-installed-library) with:\n\n```dune\n(executable\n (name main)\n (libraries libtmux libtmux-workspace libtmux-unix unix))\n```\n\nCI compiles that complete file against installed packages and checks its exact\noutcome line, graph assertions, directory cleanup and owned process exit on\ntmux 3.3a and 3.8. The [executed inventory](../examples/showcase.json) records\nits command and workflow.\n\n## Build, plan, await and capture\n\nThe central function receives the binary's discovered version and a new private\nsocket path. `Config.make`, `Plan.make` and submission perform no I/O; the\nfunction returns a retained execution handle:\n\n\n\n```ocaml\nlet bootstrap ~binary ~version ~directory endpoint =\n let spawn = Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\" ] }) in\n let config =\n Config.make ~directory ~session:\"bootstrap-demo\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n |> checked Config.pp_error\n in\n let plan =\n Plan.make ~endpoint ~version ~observed:None config |> checked Plan.pp_error\n in\n get (Workspace.submit_bootstrap ~binary plan)\n```\n\nPassing [`None`](https://ocaml.org/manual/5.5/api/Option.html#TYPEELTt.None) as the\n`observed` argument means the endpoint is known to be missing. The full program\nuses a newly created private directory to establish that precondition. A failed\ncapture must remain an error; treating it as a missing observation discards that\nfailure and produces the wrong plan. A plan remains advisory; another process\ncan still change the endpoint before execution.\n\nKeep that handle outside the cleanup scope. Await it, check the receipt, then\nborrow its client for the capture:\n\n\n\n```ocaml\nlet snapshot =\n protect\n ~finally:(fun () -> get (Workspace.close execution))\n (fun () ->\n let receipt = get (Workspace.await execution) in\n require_success receipt;\n let client = Option.get (Workspace.client execution) in\n get (Client.capture client))\n```\n\n`require_success` reports failed steps and compensation before raising. The\n[`protect` helper](../examples/showcase_bootstrap.ml#L14) keeps that primary\nexception if closing also fails, reporting the cleanup failure separately.\nBoth helpers are in the complete source.\n`Workspace.inspect execution` reads the retained journal after closure; inspect\nreported creations and uncertainty before choosing another action. The\nprogram stops without retrying. The\n[workspace guide](workspaces.md#collisions-and-recovery) explains those receipts.\n\n`Workspace.client` borrows the bootstrapped client. Close the workspace handle\nafter using that client; its snapshot stays readable.\n\n## Choose the daemon's lifetime\n\nBootstrapping owns the new client, not the tmux daemon. Closing the handle\nreleases that client. The example explicitly configures its private daemon\nwith `exit-unattached on`, supplied through a small shell exec wrapper. The\ndaemon and its demonstration pane exit after\nthe final client detaches. It then removes only its own temporary files.\n\nFor an application that keeps the server, choose its normal tmux lifetime\npolicy and retain the workspace handle while using the borrowed client. An\nexisting or newly visible daemon does not become owned merely because this\napplication connected to it. Cancellation and a partial bootstrap can leave\neffects; use [retained operation recovery](recovery.md) and the workspace\nreceipt rather than assuming closure undoes them.\n\n[Object graph](graph.md) · [Workspaces](workspaces.md) · [Guide](README.md)\n" + "content": "# Start a private tmux server from OCaml\n\nUse `Workspace.submit_bootstrap` when the endpoint is known to be missing.\nIt creates the first session and binds a client through the same control\nconnection. The native workspace builder needs no JSON package;\n`Workspace.await` performs startup.\n\nFor an existing daemon, use `Client.connect`, capture its graph, and create a\nsession through that client. See [control and recovery](control.md).\n\n## Run the complete program\n\nComplete the [source installation](getting-started.md), then run from the\ncheckout:\n\n```console\n$ opam exec -- dune exec examples/showcase_bootstrap.exe -- tmux\n```\n\nThe program prints its temporary socket path followed by\n`bootstrapped: 1 session, 1 window, 1 pane`. It creates a `bootstrap-demo` session\nwhose `editor` window runs `/bin/cat -u`, captures the graph, and reads that\nsnapshot after closing its client.\n\nThe [complete source](../examples/showcase_bootstrap.ml) includes its private\ndirectory, tmux configuration, local version discovery and cleanup. To use the\nwhole program outside this checkout, save it as `main.ml` in the Dune project\nfrom [first use](getting-started.md#link-an-installed-library) with:\n\n```dune\n(executable\n (name main)\n (libraries libtmux libtmux-workspace libtmux-unix unix))\n```\n\n## Build, plan, await and capture\n\nThe central function receives the binary's discovered version and a new private\nsocket path. `Config.make`, `Plan.make` and submission perform no I/O; the\nfunction returns a retained execution handle:\n\n\n\n```ocaml\nlet bootstrap ~binary ~version ~directory endpoint =\n let spawn = Spawn.make (Exec { program = \"/bin/cat\"; args = [ \"-u\" ] }) in\n let config =\n Config.make ~directory ~session:\"bootstrap-demo\"\n [ Config.window ~name:\"editor\" [ Config.pane ~spawn () ] ]\n |> checked Config.pp_error\n in\n let plan =\n Plan.make ~endpoint ~version ~observed:None config |> checked Plan.pp_error\n in\n get (Workspace.submit_bootstrap ~binary plan)\n```\n\nPassing [`None`](https://ocaml.org/manual/5.5/api/Option.html#TYPEELTt.None) as the\n`observed` argument means the endpoint is known to be missing. The full program\nuses a newly created private directory to establish that precondition. A failed\ncapture must remain an error; treating it as a missing observation discards that\nfailure and produces the wrong plan. A plan remains advisory; another process\ncan still change the endpoint before execution.\n\nKeep that handle outside the cleanup scope. Await it, check the receipt, then\nborrow its client for the capture:\n\n\n\n```ocaml\nlet snapshot =\n protect\n ~finally:(fun () -> get (Workspace.close execution))\n (fun () ->\n let receipt = get (Workspace.await execution) in\n require_success receipt;\n let client = Option.get (Workspace.client execution) in\n get (Client.capture client))\n```\n\n`require_success` reports failed steps and compensation before raising. The\n[`protect` helper](../examples/showcase_bootstrap.ml#L14) keeps that primary\nexception if closing also fails, reporting the cleanup failure separately.\nBoth helpers are in the complete source.\n`Workspace.inspect execution` reads the retained journal after closure; inspect\nreported creations and uncertainty before choosing another action. The\nprogram stops without retrying. The\n[workspace guide](workspaces.md#collisions-and-recovery) explains those receipts.\n\n`Workspace.client` borrows the bootstrapped client. Close the workspace handle\nafter using that client; its snapshot stays readable.\n\n## Choose the daemon's lifetime\n\nBootstrapping owns the new client, not the tmux daemon. Closing the handle\nreleases that client. The example explicitly configures its private daemon\nwith `exit-unattached on`, supplied through a small shell exec wrapper. The\ndaemon and its demonstration pane exit after\nthe final client detaches. It then removes only its own temporary files.\n\nFor an application that keeps the server, choose its normal tmux lifetime\npolicy and retain the workspace handle while using the borrowed client. An\nexisting or newly visible daemon does not become owned merely because this\napplication connected to it. Cancellation and a partial bootstrap can leave\neffects; use [retained operation recovery](recovery.md) and the workspace\nreceipt rather than assuming closure undoes them.\n\n[Object graph](graph.md) · [Workspaces](workspaces.md) · [Guide](README.md)\n" }, { "path": "docs/graph.md", - "content": "# Sessions, window links and panes\n\nA snapshot contains sessions, global windows, session-specific window links,\npanes and captured clients. Entity values are abstract immutable observations.\nThey remain readable after their client closes.\n\n```text\nSession ── Window_link ── Window ── Pane\n index │\n another link can share this window\n```\n\nA window can be linked to multiple sessions, or linked more than once within\none session. `Session.window_links` retains each context and index.\n`Session.windows` returns distinct global windows in first-link order.\n`Window.panes` contains that global window's captured panes. Local traversal\nperforms no I/O, lazy refresh or per-object subprocess calls. Captured client\nrows and attached-client counts include the library's control connection when\nit is present.\n\nThe [graph program](../examples/native_graph.ml) deliberately walks links. To\nsee the same window in two sessions, run the [README setup](../README.md#read-a-real-tmux-graph),\nthen create another session:\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_DEMO_DIR/server\" \\\n new-session \\\n -d \\\n -s linked \\\n -- \"exec cat\"\n```\n\nLink the demo's window at index 7 in the other session:\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_DEMO_DIR/server\" \\\n link-window \\\n -d \\\n -s @0 \\\n -t linked:7\n```\n\n```console\n$ opam exec -- dune exec examples/native_graph.exe -- \\\n tmux \"$LIBTMUX_DEMO_DIR/server\"\n```\n\nThe same window ID and pane ID appear under both sessions, at their respective\nlink indexes. The installed-example check asserts both appearances. Remove\nonly the additional session when finished:\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_DEMO_DIR/server\" \\\n kill-session -t '=linked'\n```\n\nAn entity ID is scoped to a connection source. `same_entity` requires the same\nbound source generation as well as the same entity ID; separate connections\ncompare unequal even when they observe the same daemon. `same_observation`\nalso distinguishes captures. Use those operations or explicit `Id.equal`,\nrather than polymorphic equality over observations. A valid target does not\nmake captured names, geometry or membership current.\nA link context is an observed session/index/window tuple, not a stable link\nincarnation across unlinking or reindexing.\n\nCapture provenance records an acquisition interval. Several tmux commands do\nnot form an atomic server transaction. Disappearing or conflicting objects\nproduce a capture error rather than a fabricated empty relationship.\n\nEach entity retains the complete snapshot graph so its relationships remain\navailable. Retaining one pane from every refresh therefore retains every one\nof those captures. Keep scalar summaries when navigation is unnecessary.\n`Pane.target` omits the graph but remains bound to its original connection\ngeneration; it is not a durable target for a future connection. Relationship\ntraversal can allocate wrapper arrays even when a query stops testing early.\nThe [retained-heap measurements](benchmarking.md#heap-retained-across-captures)\ncompare these choices across repeated real captures.\n\n[Queries](queries.md) · [Recovery](control.md) · [API](api.md)\n" + "content": "# Sessions, window links and panes\n\nA snapshot contains sessions, global windows, session-specific window links,\npanes and captured clients. Entity values are abstract immutable observations.\nThey remain readable after their client closes.\n\n```text\nSession ── Window_link ── Window ── Pane\n index │\n another link can share this window\n```\n\n- A window can be linked to several sessions, or twice in one session.\n `Session.window_links` keeps each link and index; `Session.windows` returns\n distinct windows in first-link order.\n- `Window.panes` holds that window's captured panes. Local traversal does no\n I/O, lazy refresh or per-object subprocess calls.\n- Captured client rows and attached-client counts include the library's own\n control connection when present.\n\nThe [graph program](../examples/showcase_graph.ml) creates a second session and\nlinks the first window into it at index 7. It runs on a private server it\nstarts and removes:\n\n```console\n$ opam exec -- dune exec examples/showcase_graph.exe -- tmux\n```\n\n```text\nsocket=/tmp/libtmux-ocaml-showcase-0cd3a1/server\nlinked/0 linked-home: 1 pane(s)\nlinked/7 editor: 1 pane(s)\nshowcase/0 editor: 1 pane(s)\ngraph: 2 sessions, 2 windows, 3 links, 2 panes\n```\n\nThe `editor` window appears under both sessions, at each link's own index.\n\n- **Identity.** An ID is scoped to a connection source. `same_entity` needs the\n same source generation and entity ID, so separate connections compare unequal\n even on one daemon. `same_observation` also tells captures apart. Use them or\n `Id.equal`, not polymorphic equality.\n- **Currency.** A valid target does not make captured names, geometry or\n membership current. A link context is an observed session/index/window tuple,\n not a stable link across unlinking or reindexing.\n- **Capture.** It spans an interval and is not an atomic transaction. A\n disappearing or conflicting object is a capture error, never an empty\n relationship.\n- **Retention.** Each entity retains its whole snapshot, so keeping one pane\n from every refresh keeps every capture; keep scalar summaries instead.\n `Pane.target` omits the graph but stays bound to its connection generation.\n See the [retained-heap measurements](benchmarking.md#heap-retained-across-captures).\n\n[Queries](queries.md) · [Recovery](control.md) · [API](api.md)\n" }, { "path": "docs/queries.md", - "content": "# Query captured data\n\nCapture once, then use standard collections. The [complete program](../examples/native_query.ml)\ncloses its blocking client before evaluating any of the functions below.\nFollow the [README setup](../README.md#read-a-real-tmux-graph) first.\n\n## Use a native predicate\n\n\n\n```ocaml\nlet active_ids snapshot =\n Snapshot.panes snapshot |> Iarray.to_seq |> Seq.filter Pane.active\n |> Seq.map Pane.id |> List.of_seq\n```\n\n`Snapshot.panes` returns an immutable array of captured panes. Converting it to\na sequence does not acquire anything. Repeated traversal sees captured values;\nstateful callbacks supplied by an application can still behave differently.\n\n## Describe a typed query\n\n\n\n```ocaml\nlet roomy_terminals : Pane.t Expr.t =\n Expr.all\n [\n Expr.Bool.is_true Pane.Fields.active;\n Expr.Text.is_in Pane.Fields.current_command\n [ \"cat\"; \"bash\"; \"zsh\"; \"nvim\" ];\n Expr.Int.ge Pane.Fields.width 80;\n ]\n\nlet roomy_ids snapshot =\n Snapshot.panes snapshot |> Iarray.to_seq\n |> Query.matching roomy_terminals\n |> Seq.map Pane.id |> List.of_seq\n```\n\n`Expr.compile` returns an ordinary predicate. `Query.matching` compiles once\nwhen constructed and preserves order and multiplicity. Field descriptors carry\nboth entity and value types, so invalid entity/operator combinations fail in\nthe compiler. Boolean `Expr.all []` is true and `Expr.any []` is false.\n\n## Follow relationships without fetching\n\n\n\n```ocaml\nlet sessions_with_room snapshot =\n let expression =\n Expr.Rel.any Session.Relations.windows\n (Expr.Rel.any Window.Relations.panes roomy_terminals)\n in\n Snapshot.sessions snapshot |> Iarray.to_seq |> Query.matching expression\n |> Seq.map Session.name |> List.of_seq\n```\n\nRelationships traverse the complete captured graph. `Expr.Rel.any` over no\nchildren is false; `all` and `none` over no children are true. Put conditions\ninside one `any` when the same child must satisfy both. Two independent\nexistentials can match different children.\n\n## Establish cardinality before acting\n\n`Query.exactly_one` returns `No_match` or `Multiple_matches {at_least=2}` instead\nof choosing the first element. It stops once it finds a second match; proving\nuniqueness exhausts the remaining finite sequence. `one_or_none` returns an\noption while retaining an ambiguity error. Duplicate entries count separately.\n\nSelect first, inspect the result, then submit a mutation. Selection does not\nlock tmux; a target can disappear between observation and action. The\n[control guide](control.md) explains that failure boundary.\n\n## Decode portable query data explicitly\n\n`Libtmux_json.Expr.of_string Model.pane` validates the shared scalar pane\nsubset of [`libtmux.filter/1`](query-interchange.md). It rejects duplicate/unknown\nkeys, wrong operand types, invalid UTF-8, oversized/deep documents and Java\nregex. Native closures stay in `Seq.filter`; they have no portable wire identity.\n\n`Libtmux.Plan.panes` compiles a source filter and retains the residual expression\nwithout I/O. Inspect `source_filter` and use `Require_exact` to reject unsupported\nlowering. Current client capture operations acquire the complete graph; they do\nnot execute these plans. The planner is a separate seam for acquisition adapters.\nConjunctions, disjunctions, negation and relationships require different lowering\nrules; local sequence processing never issues a tmux query implicitly.\n\nThe [native reference](../lib/index.mld) executes a pure planning example with MDX.\nThe [architecture capability table](dev/adr/0001-native-ocaml-suite.md#compose-ordinary-predicates-with-typed-query-data)\ndistinguishes observation accessors, native expressions, JSON, planning and\nclient acquisition. An available accessor or format name need not be a\nportable expression field.\n\n[Field reference](fields.md) · [API](api.md) · [Guide](README.md)\n" + "content": "# Query captured data\n\nCapture once, then use standard collections. The [complete program](../examples/native_query.ml)\ncloses its blocking client before evaluating any function below. It takes a tmux\nbinary and a socket path; the [README](../README.md#read-a-real-tmux-graph)\nshows a self-contained run.\n\n## Use a native predicate\n\n\n\n```ocaml\nopen Libtmux\n\nlet active_ids snapshot =\n Snapshot.panes snapshot |> Iarray.to_seq |> Seq.filter Pane.active\n |> Seq.map Pane.id |> List.of_seq\n```\n\n`Snapshot.panes` returns an immutable array of captured panes. Converting it to\na sequence does not acquire anything. Repeated traversal sees captured values;\nstateful callbacks supplied by an application can still behave differently.\n\n## Describe a typed query\n\n\n\n```ocaml\nlet roomy_terminals : Pane.t Expr.t =\n Expr.all\n [\n Expr.Bool.is_true Pane.Fields.active;\n Expr.Text.is_in Pane.Fields.current_command\n [ \"cat\"; \"bash\"; \"zsh\"; \"nvim\" ];\n Expr.Int.ge Pane.Fields.width 80;\n ]\n\nlet roomy_ids snapshot =\n Snapshot.panes snapshot |> Iarray.to_seq\n |> Query.matching roomy_terminals\n |> Seq.map Pane.id |> List.of_seq\n```\n\n`Expr.compile` returns an ordinary predicate. `Query.matching` compiles once\nwhen constructed and preserves order and multiplicity. Field descriptors carry\nboth entity and value types, so invalid entity/operator combinations fail in\nthe compiler. Boolean `Expr.all []` is true and `Expr.any []` is false.\n\n## Follow relationships without fetching\n\n\n\n```ocaml\nlet sessions_with_room snapshot =\n let expression =\n Expr.Rel.any Session.Relations.windows\n (Expr.Rel.any Window.Relations.panes roomy_terminals)\n in\n Snapshot.sessions snapshot |> Iarray.to_seq |> Query.matching expression\n |> Seq.map Session.name |> List.of_seq\n```\n\nRelationships traverse the complete captured graph. `Expr.Rel.any` over no\nchildren is false; `all` and `none` over no children are true. Put conditions\ninside one `any` when the same child must satisfy both. Two independent\nexistentials can match different children.\n\n## Establish cardinality before acting\n\n`Query.exactly_one` returns `No_match` or `Multiple_matches {at_least=2}` instead\nof choosing the first element. It stops once it finds a second match; proving\nuniqueness exhausts the remaining finite sequence. `one_or_none` returns an\noption while retaining an ambiguity error. Duplicate entries count separately.\n\nSelect first, inspect the result, then submit a mutation. Selection does not\nlock tmux; a target can disappear between observation and action. The\n[control guide](control.md) explains that failure boundary.\n\n## Decode portable query data explicitly\n\n`Libtmux_json.Expr.of_string Model.pane` validates the shared scalar pane\nsubset of [`libtmux.filter/1`](query-interchange.md). It rejects duplicate/unknown\nkeys, wrong operand types, invalid UTF-8, oversized/deep documents and Java\nregex. Native closures stay in `Seq.filter`; they have no portable wire identity.\n\n`Libtmux.Plan.panes` compiles a source filter and retains the residual expression\nwithout I/O. Inspect `source_filter` and use `Require_exact` to reject unsupported\nlowering. Current client capture operations acquire the complete graph; they do\nnot execute these plans. The planner is a separate seam for acquisition adapters.\nConjunctions, disjunctions, negation and relationships require different lowering\nrules; local sequence processing never issues a tmux query implicitly.\n\nThe [native reference](../lib/index.mld) executes a pure planning example with MDX.\nThe [architecture capability table](dev/adr/0001-native-ocaml-suite.md#compose-ordinary-predicates-with-typed-query-data)\ndistinguishes observation accessors, native expressions, JSON, planning and\nclient acquisition. An available accessor or format name need not be a\nportable expression field.\n\n[Field reference](fields.md) · [API](api.md) · [Guide](README.md)\n" }, { "path": "docs/query-interchange.md", @@ -26,7 +26,7 @@ }, { "path": "docs/control.md", - "content": "# Submit actions and retain their outcomes\n\nObservations are local values. Client calls perform explicit I/O, and mutations\nuse targets bound to the source that produced them. Closing a client releases\nits own transports. tmux then applies its configured lifetime: for example,\n[the standalone programs](showcases.md) enable `exit-unattached` on their\nprivate daemons so they exit after their final client detaches.\n\nThe [layout program](../examples/native_build.ml) creates a session, splits its\nfirst pane and adds a logs window. It passes argv through `Spawn.Exec`, a working\ndirectory and an environment value. `Spawn.Shell` explicitly requests shell\ncode. `send_text` is literal input; `send_keys [Key.Enter]` is a separate action.\n\nA creation response returns the reported session, window and pane IDs without\nan extra graph capture. Only the resource requested by that command is newly\ncreated. A split's returned session and window are pre-existing containers.\n\n## Choose a backend\n\nUse `Libtmux_unix.Client` in a blocking script. Use `Libtmux_eio.Client` inside\nan application-owned Eio switch, supplying the process manager and monotonic\nclock. Clients are affine to their connecting domain. Immutable captured values\ncan be read from other domains; live client handles cannot move between them.\n\nThe Eio backend has client-owned workers for command draining and stream\nreading. A cancelled waiter does not abandon a written request. Local scratch\nfilesystem work runs on a system thread. The blocking backend supports scoped\ncancellation tokens signalled from another domain or systhread.\n\n| Recovery concern | Eio | Blocking Unix |\n| --- | --- | --- |\n| Cancel one caller | Eio cancellation scope around `Client.await` | `Cancellation.with_` token passed to `Client.await` |\n| Return after cancellation | The waiter raises while a client-owned fiber drains admitted work | The call drains before raising; one exchange timeout after detection bounds transport work |\n| Inspect an outcome | `Operation.inspect`, on the connecting domain | `Operation.inspect`, on the connecting domain |\n| Release resources | Close the client inside its application-owned switch | Close the client after the call returns |\n\nThe blocking bound covers transport draining. Local scratch I/O must still\nfinish before the call returns.\n\nCaptures, reads and subscriptions share the client's payload budget and process\nslots. The [capacity guide](streaming.md#plan-shared-capacity) shows their combined\nreservations and how to leave headroom for service operations.\n\nEio `Client.close` rejects new command and subscription admission as soon as\nclosing starts. Concurrent closes wait for the same teardown result. A later\nclose retains an earlier teardown failure; the closed state alone does not\nprove resources were released. Inspect the client's `Cleanup` report for\nsecondary failures. Internal connection teardown also retains one completion,\nso a concurrent failure path cannot skip cleanup already in progress.\n\nThe [complete recovery example](recovery.md) cancels an active waiter, awaits\nthe same retained operation and checks server state before its next mutation.\n\n## Distinguish acknowledgement from completion\n\n`submit` validates and reserves capacity without writing. Retain the operation\nhandle before awaiting it. `Operation.inspect` reads its state without I/O:\nqueued, not started, written, acknowledged, finished, or outcome unknown.\n\nA reply can acknowledge a command while hooks or its completion marker remain\noutstanding. Sending keys confirms tmux accepted input; it does not prove a\nterminal program consumed it or completed work. A detach request does not prove\nthe peer exited. Use the relevant postcondition, rendered wait or external exit\nsignal for the task.\n\nExpected failures use `result` and `Error.t`. Backend cancellation propagates\nas cancellation. An uncertain result retains reported creation IDs and unresolved\nowned buffers; it never becomes an instruction to retry the mutation.\n\nWhen Eio's daemon watcher closes a connection, an in-flight operation retains\n`Error.Disconnected` as its cause. An idle-reader failure retains its library\nerror. Explicit client closure uses `Error.Closed`. Inspect the retained receipt\nto distinguish these reasons; each can leave an admitted mutation uncertain.\n\n`Client.cleanup` retains process and descriptor cleanup diagnostics after\nclosure. Supply a `Cleanup.create ()` report through `~cleanup` before connecting\nwhen diagnostics must survive failed setup or cancellation. The same option is\navailable on terminal attachment and workspace bootstrap. `Cleanup.inspect`\nreturns the cleanup phase, typed library error when available, original\nexception and backtrace without I/O. The report retains at most 64 entries and\ncounts further issues; exception payloads can still retain substantial memory.\nReports and their diagnostics belong to the creating domain.\n\nCleanup attempts independent releases even when one fails. A primary exception\nkeeps its identity and backtrace; secondary failures go to the report. If there\nis no primary failure, the first unrecovered cleanup failure is returned or\nraised normally. A recovered fallback can still leave a diagnostic after a\nsuccessful return: failure to open a child pidfd skips TERM grace, forces\ntermination and reaps, while retaining the `Open_pidfd` issue.\nFailed forced termination produces an `Unreaped_child` issue when exit cannot\nbe established without blocking. That issue does not prove resource release.\nThe [recovery example](recovery.md) keeps its report outside connection lifetime.\n\n## Recover deliberately\n\nA replacement daemon retires the connection generation. Reconnect explicitly,\ncapture again and establish cardinality before choosing a fresh target.\nOld captured values remain readable, but their targets cannot silently move to\nthe new server.\n\nPartial effects can remain after a later hook or command failure. Inspect the\nretained receipt and current server state. Compensate only resources whose\ncreation is proven. A snapshot is an observation over an interval, and a\nselection followed by mutation is not an atomic transaction.\n\nUse the [recovery walkthrough](recovery.md) to follow this sequence through a\ncomplete installed program, including cleanup of its own pane.\n\nSee [streaming](streaming.md) for Data/Gap/End and bounded queues, and\n[compatibility](compatibility.md) for hook, PID-namespace and scratch-file\nconstraints. [Guide](README.md) · [API](api.md)\n" + "content": "# Submit actions and retain their outcomes\n\nObservations are local values. Client calls perform explicit I/O, and mutations\nuse targets bound to the source that produced them. Closing a client releases\nits own transports. tmux then applies its configured lifetime: for example,\n[the standalone programs](showcases.md) enable `exit-unattached` on their\nprivate daemons so they exit after their final client detaches.\n\nThe [layout program](../examples/native_build.ml) creates a session, splits its\nfirst pane and adds a logs window. It passes argv through `Spawn.Exec`, a working\ndirectory and an environment value. `Spawn.Shell` explicitly requests shell\ncode. `send_text` is literal input; `send_keys [Key.Enter]` is a separate action.\n\nA creation response returns the reported session, window and pane IDs without\nan extra graph capture. Only the resource requested by that command is newly\ncreated. A split's returned session and window are pre-existing containers.\n\n## Choose a backend\n\nUse `Libtmux_unix.Client` in a blocking script. Use `Libtmux_eio.Client` inside\nan application-owned Eio switch, supplying the process manager and monotonic\nclock. Clients are affine to their connecting domain. Immutable captured values\ncan be read from other domains; live client handles cannot move between them.\n\nThe Eio backend has client-owned workers for command draining and stream\nreading. A cancelled waiter does not abandon a written request. Local scratch\nfilesystem work runs on a system thread. The blocking backend supports scoped\ncancellation tokens signalled from another domain or systhread.\n\n| Recovery concern | Eio | Blocking Unix |\n| --- | --- | --- |\n| Cancel one caller | Eio cancellation scope around `Client.await` | `Cancellation.with_` token passed to `Client.await` |\n| Return after cancellation | The waiter raises while a client-owned fiber drains admitted work | The call drains before raising; one exchange timeout after detection bounds transport work |\n| Inspect an outcome | `Operation.inspect`, on the connecting domain | `Operation.inspect`, on the connecting domain |\n| Release resources | Close the client inside its application-owned switch | Close the client after the call returns |\n\nThe blocking bound covers transport draining. Local scratch I/O must still\nfinish before the call returns.\n\nCaptures, reads and subscriptions share the client's payload budget and process\nslots. The [capacity guide](streaming.md#plan-shared-capacity) shows their combined\nreservations and how to leave headroom for service operations.\n\nEio `Client.close` rejects new commands and subscriptions as soon as it starts.\nConcurrent closes wait for one shared teardown, and a later close keeps an\nearlier failure, so a closed client does not prove its resources were released.\nCheck the client's `Cleanup` report for secondary failures.\n\nThe [complete recovery example](recovery.md) cancels an active waiter, awaits\nthe same retained operation and checks server state before its next mutation.\n\n## Distinguish acknowledgement from completion\n\n`submit` validates and reserves capacity without writing. Retain the operation\nhandle before awaiting it. `Operation.inspect` reads its state without I/O:\nqueued, not started, written, acknowledged, finished, or outcome unknown.\n\nA reply can acknowledge a command while hooks or its completion marker remain\noutstanding. Sending keys confirms tmux accepted input; it does not prove a\nterminal program consumed it or completed work. A detach request does not prove\nthe peer exited. Use the relevant postcondition, rendered wait or external exit\nsignal for the task.\n\nExpected failures use `result` and `Error.t`. Backend cancellation propagates\nas cancellation. An uncertain result retains reported creation IDs and unresolved\nowned buffers; it never becomes an instruction to retry the mutation.\n\nWhen Eio's daemon watcher closes a connection, an in-flight operation retains\n`Error.Disconnected` as its cause. An idle-reader failure retains its library\nerror. Explicit client closure uses `Error.Closed`. Inspect the retained receipt\nto distinguish these reasons; each can leave an admitted mutation uncertain.\n\n`Client.cleanup` keeps process and descriptor cleanup diagnostics after closure.\nPass a `Cleanup.create ()` report as `~cleanup` before connecting to keep them\nthrough failed setup or cancellation; terminal attachment and workspace\nbootstrap take the same option. `Cleanup.inspect` returns the phase, typed\nerror, original exception and backtrace without I/O.\n\n- A report holds at most 64 entries, counts the rest, and belongs to its\n creating domain.\n- Cleanup attempts every independent release even when one fails.\n- A primary exception keeps its identity and backtrace; secondary failures go\n to the report. With no primary failure, the first unrecovered cleanup failure\n is returned or raised.\n- A recovered fallback can still leave a diagnostic: failing to open a child\n pidfd skips the TERM grace, forces termination and keeps an `Open_pidfd`\n issue.\n- If forced termination cannot confirm exit without blocking, the report holds\n `Unreaped_child`; that does not prove the resource was released.\n\nThe [recovery example](recovery.md) keeps its report outside connection lifetime.\n\n## Recover deliberately\n\nA replacement daemon retires the connection generation. Reconnect explicitly,\ncapture again and establish cardinality before choosing a fresh target.\nOld captured values remain readable, but their targets cannot silently move to\nthe new server.\n\nPartial effects can remain after a later hook or command failure. Inspect the\nretained receipt and current server state. Compensate only resources whose\ncreation is proven. A snapshot is an observation over an interval, and a\nselection followed by mutation is not an atomic transaction.\n\nUse the [recovery walkthrough](recovery.md) to follow this sequence through a\ncomplete installed program, including cleanup of its own pane.\n\nSee [streaming](streaming.md) for Data/Gap/End and bounded queues, and\n[compatibility](compatibility.md) for hook, PID-namespace and scratch-file\nconstraints. [Guide](README.md) · [API](api.md)\n" }, { "path": "docs/recovery.md", @@ -34,19 +34,19 @@ }, { "path": "docs/streaming.md", - "content": "# Observe output and wait for rendered text\n\nUse [native_watch.ml](../examples/native_watch.ml) for a complete concurrent\nliteral-send, future-byte match and rendered-screen check. Its application owns\nthe Eio scheduler and switch. Use [native_wait.ml](../examples/native_wait.ml) to capture exactly one pane and\nwait until its ordinary screen contains the supplied text. The example imports\nthe installed Eio client, owns its switch, uses an explicit socket, closes its\nclient and prints the matched pane ID. It requires an existing daemon and one\npane; absence and ambiguity remain errors.\n\n`Client.wait_for_text` first subscribes, then captures the screen immediately.\nOutput invalidates that observation. Queued Data events are coalesced before\nthe next bounded capture; a queued Gap stops that coalescing. Membership and\noverflow gaps cause fresh graph acquisition and subscription in the same\nconnection binding. A disconnected daemon or stream fails the wait.\n\nSuccess returns a captured screen containing the text. Text that appears and\ndisappears between captures may be missed. Deadlines are checked between\nacquisitions, whose in-flight I/O keeps the client's exchange timeout. A timed\nout wait does not prove that text was absent in the past.\n\nThe wait releases its temporary subscription on every exit. An earlier error or\ncancellation remains the primary result; `Client.cleanup` retains secondary\ncleanup failures. If cleanup fails after a match or during gap recovery, the\nwait fails instead of reporting success or opening another subscription.\n\nUse `Client.subscribe` and `Subscription.next` for future output bytes. Data\nretains every byte, including NUL and invalid UTF-8. Its cursor records a local\nsubscription generation and an observed byte offset. A cursor is neither a\nsnapshot timestamp nor a server-side history position. `poll` only removes a\nqueued event and performs no I/O.\n\n`Subscription.wait_for_bytes` consumes those future events and matches across\nevent boundaries. Its nonempty pattern is limited to 64 KiB. It returns the\nmatch's end cursor, possibly inside the last consumed Data event. A deadline\nleaves the subscription active. A Gap returns `Output.Ended reason`; later\nmatching requires an explicit fresh capture and new subscription.\n\nThe defaults are 1 MiB and 1024 queued events per subscriber, at most 16 active\nsubscribers, and eight total client lanes including command/wait lanes. Reuse\none verified lane per covered session. Admission reserves bytes against the\nshared 32 MiB budget. A full queue produces Gap then End rather than blocking\nanother subscriber or an independent command. Unknown loss has no byte count.\nThese limits apply together; [plan shared capacity](#plan-shared-capacity)\nbefore combining many observers with captures and reads.\n\nCoverage uses an observed session/window context and revalidates it during\nadmission. Layout or membership changes end continuity conservatively. Detaching\na stream leaves the primary client usable; a daemon replacement retires the\nwhole binding. New coverage always has a new subscription generation.\n\nEio readers belong to the client, use no application callbacks and keep running\nwhen a subscriber stalls. The blocking backend advances all stream lanes during\n`Subscription.next`. Cancellation closes the affected subscription and\npropagates through the backend's cancellation mechanism. Client close releases\nall owned lanes and retains terminal events; it leaves the daemon alive.\n\nWhen a subscription releases the last user of a lane, close waits for its\nowned helper to be reaped. Concurrent Eio subscription closes join that same\ncleanup. Repeated closes preserve the first terminal reason and any cleanup\nfailure; unconsumed terminal events remain readable through `Subscription.poll`.\n\nThe [recovery program](recovery.md) shows how to cancel one operation waiter\nwhile keeping its retained outcome available. Cancelling a subscription closes\nthat subscription; it does not cancel an already admitted command.\n\nNeither interface establishes an atomic capture/stream barrier or reconstructs\nterminal history. An immutable snapshot remains a separate captured value.\n\n## Plan shared capacity\n\nEvery client has its own bounded payload budget and process-slot pool. The\nblocking and Eio clients use the same accounting. An individually valid queue\nor command can still return `Error.Capacity` when another reservation consumes\nthe available headroom:\n\n| Resource | Current limit or reservation |\n| --- | --- |\n| Aggregate client payload | 32 MiB shared by queues, commands and operation scratch space |\n| Admitted commands | 64; encoded payload accounting remains charged until completion or cancellation before writing |\n| Admitted command bytes | 1 MiB shared across admitted operations; submission also temporarily reserves 2 MiB |\n| Client process slots | 8, including the primary control client; each auxiliary slot reserves 128 KiB |\n| Subscriptions | 16 active per client, sharing a verified stream lane per covered session |\n| Subscriber queue | 1 MiB / 1024 events by default; reserve the full configured byte capacity even when empty |\n| Graph or rendered capture | 16 MiB operation scratch reservation plus an 8 MiB control exchange |\n| Option, environment or hook read | 16 MiB scratch reservation plus a temporary process slot |\n\nThe payload budget tracks library reservations. Caller-retained snapshots,\ncompleted operation handles, receipts and exception payloads have their own\nlifetimes, alongside runtime overhead, child-process memory and tmux's\nallocations. See [observation retention](graph.md).\n\nFor example, sixteen default queues on one covered session reserve 16 MiB\nplus that session's auxiliary slot. A subsequent capture or read cannot obtain\nits scratch reservation. Even eight default queues leave insufficient room for\nthe capture's nested control exchange. Closing subscriptions releases their\nreservations; the client remains usable after a capacity error.\n\n| Empty queues, one covered session | Capture | Option read |\n| --- | --- | --- |\n| 16 × 1 MiB | `Capacity` | `Capacity` |\n| 8 × 1 MiB | `Capacity` | Fits the reservation budget |\n| 7 × 1 MiB | Fits the reservation budget | Fits the reservation budget |\n| 16 × 256 KiB | Fits the reservation budget | Fits the reservation budget |\n\nThese examples describe reservation accounting on a fixed one-pane graph.\nAdditional lanes, admitted commands and concurrent work consume more headroom.\nA budget that fits still needs valid targets, available data and a responsive\ndaemon.\n\nThe [complete watcher](../examples/native_watch.ml) chooses its queue explicitly:\n\n\n\n```ocaml\nlet subscription =\n get\n (Client.subscribe ~capacity_bytes:(256 * 1024) ~capacity_events:256 client\n pane)\n```\n\nIts full program includes the client, pane acquisition, result handling, Eio\nswitch and cleanup. Choose a capacity for the burst your application can\nconsume; a smaller queue reaches `Gap Overflow` sooner when its reader stalls.\n\nSlots need their own headroom. The primary client and seven distinct covered\nsessions fill all eight slots, leaving none for a read process or `wait_for`.\nIf an application needs those operations, it can cap distinct covered sessions\nat six while keeping one slot for service, accounting for any waits already\nusing slots. The library currently reserves no slot exclusively for service.\nSeveral panes in the same session can share its stream lane.\n\nReducing queue capacities does not free process slots. Closing the last active\nsubscriber for a covered session releases its lane after owned-helper cleanup.\nA separate client has its own budget and slots, but also its own source\ngeneration: acquire observations on that client before using its targets.\n\n## Recover after a gap\n\nClose the ended subscription, capture the graph again, and establish fresh\ncoverage for the observed pane. This recovers future observation. Bytes lost\nbefore the new subscription are still unavailable; a screen capture cannot\nreconstruct their history.\n\nThe [complete recovery program](../examples/native_stream_recovery.ml) creates\na window running `cat`, observes a reply, then splits the window to trigger a\nmembership gap. It handles that gap, removes the extra pane and closes the old\nsubscription. It captures the original pane again, subscribes, and observes\nnew input with a different cursor generation:\n\n\n\n```ocaml\nlet recover_coverage client id (previous : Output.cursor) =\n let fresh = capture_pane client id in\n let after =\n with_subscription client fresh (fun subscription ->\n echo client fresh subscription \"after-gap\")\n in\n if Generation.equal previous.generation after.generation then\n failwith \"new subscription reused the old cursor generation\";\n print_endline \"coverage=fresh; cursor-generation=new; future=after-gap\"\n```\n\nThe source contains the imports, scheduler, cleanup and matching helpers.\n`capture_pane` fails if the pane disappeared. `with_subscription` admits coverage\nbefore `echo` sends input and awaits its reply concurrently. The\nexample never reconnects, reuses an old cursor or retries an uncertain mutation.\nIt removes only panes whose creation returned successfully, leaving any foreign\npanes untouched. Primary exceptions survive secondary cleanup failures.\n\nCreation here uses convenience calls. Cancellation before one returns can leave\na creation whose ID the caller never received. For creation outcomes that must\nsurvive waiter cancellation, retain `Client.submit`'s handle before `Client.await`,\nas shown in [operation recovery](recovery.md). An uncertain outcome does not\nauthorize a retry or deletion of an unproven resource.\n\nAfter [installing from source](getting-started.md), run this walkthrough from\nthe clone. Create a private seed session:\n\n```console\n$ export LIBTMUX_STREAM_RECOVERY_DIR=\"$(mktemp -d -t libtmux-ocaml-stream-recovery.XXXXXX)\"\n```\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_STREAM_RECOVERY_DIR/server\" \\\n -f /dev/null \\\n new-session \\\n -d \\\n -s stream-demo \\\n -- \"exec cat\"\n```\n\nRun the program against the seed session's literal `$0` ID:\n\n```console\n$ opam exec -- dune exec examples/native_stream_recovery.exe -- \\\n tmux \"$LIBTMUX_STREAM_RECOVERY_DIR/server\" '$0'\n```\n\nExpected output is `gap=membership-changed; history=unavailable`, followed by\n`coverage=fresh; cursor-generation=new; future=after-gap`. The seed session\nremains, with no additional panes or clients. Remove that session and directory:\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_STREAM_RECOVERY_DIR/server\" \\\n kill-session \\\n -t '=stream-demo'\n```\n\n```console\n$ rm -f -- \"$LIBTMUX_STREAM_RECOVERY_DIR/server\"\n```\n\n```console\n$ rmdir \"$LIBTMUX_STREAM_RECOVERY_DIR\"\n```\n\nThis exercise uses a stable private daemon and a deliberate layout change.\nTransport loss, repeated membership changes or a missing pane can prevent fresh\ncoverage. Preserve those failures and choose the next action explicitly.\n\n[First use](getting-started.md) · [Control and recovery](control.md) ·\n[API](api.md) · [Guide](README.md)\n" + "content": "# Observe output and wait for rendered text\n\n- [native_watch.ml](../examples/native_watch.ml): a concurrent literal send,\n future-byte match and rendered-screen check. Your application owns the Eio\n scheduler and switch.\n- [native_wait.ml](../examples/native_wait.ml): capture exactly one pane and\n wait until its screen contains the text. It needs an existing daemon and one\n pane; absence and ambiguity are errors.\n\n`Client.wait_for_text` first subscribes, then captures the screen immediately.\nOutput invalidates that observation. Queued Data events are coalesced before\nthe next bounded capture; a queued Gap stops that coalescing. Membership and\noverflow gaps cause fresh graph acquisition and subscription in the same\nconnection binding. A disconnected daemon or stream fails the wait.\n\nSuccess returns a captured screen containing the text. Text that appears and\ndisappears between captures may be missed. Deadlines are checked between\nacquisitions, whose in-flight I/O keeps the client's exchange timeout. A timed\nout wait does not prove that text was absent in the past.\n\nThe wait releases its temporary subscription on every exit. An earlier error or\ncancellation remains the primary result; `Client.cleanup` retains secondary\ncleanup failures. If cleanup fails after a match or during gap recovery, the\nwait fails instead of reporting success or opening another subscription.\n\nUse `Client.subscribe` and `Subscription.next` for future output bytes. Data\nretains every byte, including NUL and invalid UTF-8. Its cursor records a local\nsubscription generation and an observed byte offset. A cursor is neither a\nsnapshot timestamp nor a server-side history position. `poll` only removes a\nqueued event and performs no I/O.\n\n`Subscription.wait_for_bytes` consumes those future events and matches across\nevent boundaries. Its nonempty pattern is limited to 64 KiB. It returns the\nmatch's end cursor, possibly inside the last consumed Data event. A deadline\nleaves the subscription active. A Gap returns `Output.Ended reason`; later\nmatching requires an explicit fresh capture and new subscription.\n\nThe defaults are 1 MiB and 1024 queued events per subscriber, at most 16 active\nsubscribers, and eight total client lanes including command/wait lanes. Reuse\none verified lane per covered session. Admission reserves bytes against the\nshared 32 MiB budget. A full queue produces Gap then End rather than blocking\nanother subscriber or an independent command. Unknown loss has no byte count.\nThese limits apply together; [plan shared capacity](#plan-shared-capacity)\nbefore combining many observers with captures and reads.\n\nCoverage uses an observed session/window context and revalidates it during\nadmission. Layout or membership changes end continuity conservatively. Detaching\na stream leaves the primary client usable; a daemon replacement retires the\nwhole binding. New coverage always has a new subscription generation.\n\nEio readers belong to the client, use no application callbacks and keep running\nwhen a subscriber stalls. The blocking backend advances all stream lanes during\n`Subscription.next`. Cancellation closes the affected subscription and\npropagates through the backend's cancellation mechanism. Client close releases\nall owned lanes and retains terminal events; it leaves the daemon alive.\n\nWhen a subscription releases the last user of a lane, close waits for its\nowned helper to be reaped. Concurrent Eio subscription closes join that same\ncleanup. Repeated closes preserve the first terminal reason and any cleanup\nfailure; unconsumed terminal events remain readable through `Subscription.poll`.\n\nThe [recovery program](recovery.md) shows how to cancel one operation waiter\nwhile keeping its retained outcome available. Cancelling a subscription closes\nthat subscription; it does not cancel an already admitted command.\n\nNeither interface establishes an atomic capture/stream barrier or reconstructs\nterminal history. An immutable snapshot remains a separate captured value.\n\n## Plan shared capacity\n\nEvery client has its own bounded payload budget and process-slot pool. The\nblocking and Eio clients use the same accounting. An individually valid queue\nor command can still return `Error.Capacity` when another reservation consumes\nthe available headroom:\n\n| Resource | Current limit or reservation |\n| --- | --- |\n| Aggregate client payload | 32 MiB shared by queues, commands and operation scratch space |\n| Admitted commands | 64; encoded payload accounting remains charged until completion or cancellation before writing |\n| Admitted command bytes | 1 MiB shared across admitted operations; submission also temporarily reserves 2 MiB |\n| Client process slots | 8, including the primary control client; each auxiliary slot reserves 128 KiB |\n| Subscriptions | 16 active per client, sharing a verified stream lane per covered session |\n| Subscriber queue | 1 MiB / 1024 events by default; reserve the full configured byte capacity even when empty |\n| Graph or rendered capture | 16 MiB operation scratch reservation plus an 8 MiB control exchange |\n| Option, environment or hook read | 16 MiB scratch reservation plus a temporary process slot |\n\nThe payload budget tracks library reservations. Caller-retained snapshots,\ncompleted operation handles, receipts and exception payloads have their own\nlifetimes, alongside runtime overhead, child-process memory and tmux's\nallocations. See [observation retention](graph.md).\n\nFor example, sixteen default queues on one covered session reserve 16 MiB\nplus that session's auxiliary slot. A subsequent capture or read cannot obtain\nits scratch reservation. Even eight default queues leave insufficient room for\nthe capture's nested control exchange. Closing subscriptions releases their\nreservations; the client remains usable after a capacity error.\n\n| Empty queues, one covered session | Capture | Option read |\n| --- | --- | --- |\n| 16 × 1 MiB | `Capacity` | `Capacity` |\n| 8 × 1 MiB | `Capacity` | Fits the reservation budget |\n| 7 × 1 MiB | Fits the reservation budget | Fits the reservation budget |\n| 16 × 256 KiB | Fits the reservation budget | Fits the reservation budget |\n\nThese examples describe reservation accounting on a fixed one-pane graph.\nAdditional lanes, admitted commands and concurrent work consume more headroom.\nA budget that fits still needs valid targets, available data and a responsive\ndaemon.\n\nThe [complete watcher](../examples/native_watch.ml) chooses its queue explicitly:\n\n\n\n```ocaml\nlet subscription =\n get\n (Client.subscribe ~capacity_bytes:(256 * 1024) ~capacity_events:256 client\n pane)\n```\n\nIts full program includes the client, pane acquisition, result handling, Eio\nswitch and cleanup. Choose a capacity for the burst your application can\nconsume; a smaller queue reaches `Gap Overflow` sooner when its reader stalls.\n\nSlots need their own headroom. The primary client and seven distinct covered\nsessions fill all eight slots, leaving none for a read process or `wait_for`.\nIf an application needs those operations, it can cap distinct covered sessions\nat six while keeping one slot for service, accounting for any waits already\nusing slots. The library currently reserves no slot exclusively for service.\nSeveral panes in the same session can share its stream lane.\n\nReducing queue capacities does not free process slots. Closing the last active\nsubscriber for a covered session releases its lane after owned-helper cleanup.\nA separate client has its own budget and slots, but also its own source\ngeneration: acquire observations on that client before using its targets.\n\n## Recover after a gap\n\nClose the ended subscription, capture the graph again, and establish fresh\ncoverage for the observed pane. This recovers future observation. Bytes lost\nbefore the new subscription are still unavailable; a screen capture cannot\nreconstruct their history.\n\nThe [complete recovery program](../examples/native_stream_recovery.ml) creates\na window running `cat`, observes a reply, then splits the window to trigger a\nmembership gap. It handles that gap, removes the extra pane and closes the old\nsubscription. It captures the original pane again, subscribes, and observes\nnew input with a different cursor generation:\n\n\n\n```ocaml\nlet recover_coverage client id (previous : Output.cursor) =\n let fresh = capture_pane client id in\n let after =\n with_subscription client fresh (fun subscription ->\n echo client fresh subscription \"after-gap\")\n in\n if Generation.equal previous.generation after.generation then\n failwith \"new subscription reused the old cursor generation\";\n print_endline \"coverage=fresh; cursor-generation=new; future=after-gap\"\n```\n\nThe source contains the imports, scheduler, cleanup and matching helpers.\n`capture_pane` fails if the pane disappeared. `with_subscription` admits coverage\nbefore `echo` sends input and awaits its reply concurrently. The\nexample never reconnects, reuses an old cursor or retries an uncertain mutation.\nIt removes only panes whose creation returned successfully, leaving any foreign\npanes untouched. Primary exceptions survive secondary cleanup failures.\n\nCreation here uses convenience calls. Cancellation before one returns can leave\na creation whose ID the caller never received. For creation outcomes that must\nsurvive waiter cancellation, retain `Client.submit`'s handle before `Client.await`,\nas shown in [operation recovery](recovery.md). An uncertain outcome does not\nauthorize a retry or deletion of an unproven resource.\n\nAfter [installing from source](getting-started.md), run this walkthrough from\nthe clone. Create a private seed session:\n\n```console\n$ export LIBTMUX_STREAM_RECOVERY_DIR=\"$(mktemp -d -t libtmux-ocaml-stream-recovery.XXXXXX)\"\n```\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_STREAM_RECOVERY_DIR/server\" \\\n -f /dev/null \\\n new-session \\\n -d \\\n -s stream-demo \\\n -- \"exec cat\"\n```\n\nRun the program against the seed session's literal `$0` ID:\n\n```console\n$ opam exec -- dune exec examples/native_stream_recovery.exe -- \\\n tmux \"$LIBTMUX_STREAM_RECOVERY_DIR/server\" '$0'\n```\n\nExpected output is `gap=membership-changed; history=unavailable`, followed by\n`coverage=fresh; cursor-generation=new; future=after-gap`. The seed session\nremains, with no additional panes or clients. Remove that session and directory:\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_STREAM_RECOVERY_DIR/server\" \\\n kill-session \\\n -t '=stream-demo'\n```\n\n```console\n$ rm -f -- \"$LIBTMUX_STREAM_RECOVERY_DIR/server\"\n```\n\n```console\n$ rmdir \"$LIBTMUX_STREAM_RECOVERY_DIR\"\n```\n\nThis exercise uses a stable private daemon and a deliberate layout change.\nTransport loss, repeated membership changes or a missing pane can prevent fresh\ncoverage. Preserve those failures and choose the next action explicitly.\n\n[First use](getting-started.md) · [Control and recovery](control.md) ·\n[API](api.md) · [Guide](README.md)\n" }, { "path": "docs/showcases.md", - "content": "# Run a complete capability example\n\nEach program creates a private tmux workspace, performs one task, verifies the\nresult and closes its clients. Copy the whole file into a Dune project or run\nit from this checkout after [installation](getting-started.md).\n\nThe programs use a minimal tmux configuration that makes their private daemon\nexit when its last client detaches. They accept an optional tmux binary,\nnot a borrowed server socket. Their setup uses the public workspace API; the\ntask uses the client API. The Eio example starts its scheduler after setup and\nsubscribes before sending the bytes it observes.\n\nFor a separate project, save a program as `main.ml` and use these Dune libraries:\n\n```dune\n(executable\n (name main)\n (libraries libtmux libtmux-workspace libtmux-unix unix))\n```\n\nThe watch program also needs `libtmux-eio` and `eio_main`. The\n[installation guide](getting-started.md) supplies the project and switch setup.\n\n| Task | Complete program | Expected outcome line |\n| --- | --- | --- |\n| Start a private server and its first session | [Bootstrap](../examples/showcase_bootstrap.ml) | `bootstrapped: 1 session, 1 window, 1 pane` |\n| Navigate sessions, shared windows and panes | [Graph](../examples/showcase_graph.ml) | `graph: 2 sessions, 2 windows, 3 links, 2 panes` |\n| Observe future bytes concurrently | [Watch](../examples/showcase_watch.ml) | `observed: changed` |\n| Send literal input and Enter | [Keys](../examples/showcase_send_keys.ml) | `sent: literal: $HOME; #{pane_id}` |\n| Rename a window and retain the old observation | [Rename](../examples/showcase_rename_window.ml) | `renamed: editor-main` |\n| Create a window and recapture its name | [Create](../examples/showcase_create_window.ml) | `created: logs` |\n| Move a window to another session's index | [Move](../examples/showcase_move_window.ml) | `moved: build at 7` |\n| Apply and verify horizontal pane geometry | [Layout](../examples/showcase_layout.ml) | `layout: 3 horizontal panes` |\n\nAll programs print their temporary socket path before the outcome. The\n[bootstrap walkthrough](bootstrap.md) explains the missing-endpoint precondition\nand ownership of the resulting client:\n\n```console\n$ opam exec -- dune exec examples/showcase_bootstrap.exe -- tmux\n```\n\nRun the graph example; it traverses the snapshot after the client and daemon\nclose:\n\n```console\n$ opam exec -- dune exec examples/showcase_graph.exe -- tmux\n```\n\nObserve future output with an application-owned Eio switch:\n\n```console\n$ opam exec -- dune exec examples/showcase_watch.exe -- tmux\n```\n\nSend a literal string containing shell and tmux format characters:\n\n```console\n$ opam exec -- dune exec examples/showcase_send_keys.exe -- tmux\n```\n\nRename the editor window:\n\n```console\n$ opam exec -- dune exec examples/showcase_rename_window.exe -- tmux\n```\n\nCreate a separate logs window:\n\n```console\n$ opam exec -- dune exec examples/showcase_create_window.exe -- tmux\n```\n\nMove a build window to index 7 in another session:\n\n```console\n$ opam exec -- dune exec examples/showcase_move_window.exe -- tmux\n```\n\nSplit a window and apply an even horizontal layout:\n\n```console\n$ opam exec -- dune exec examples/showcase_layout.exe -- tmux\n```\n\nThese examples support tmux 3.3a–3.8 on the qualified Linux environment.\nThe native CI job executes their real entry points on 3.3a and 3.8,\nusing a separate installation and Dune project. A nonzero exit, missing exact\noutcome line, leftover directory or surviving owned process fails the run.\n[`showcase.json`](../examples/showcase.json) records the whole files, commands,\nexpected lines, tmux floor, workflow, job and runner.\n\nSending keys confirms tmux accepted input. The rendered-text example observes\nthe resulting screen; it does not wait for an arbitrary application's exit\ncode. A future-byte subscription has no historical capture barrier. See\n[control outcomes](control.md) and [streaming](streaming.md) for those contracts.\n" + "content": "# Run a complete capability example\n\nEach program creates a private tmux workspace, performs one task, verifies the\nresult and closes its clients. Copy the whole file into a Dune project or run\nit from this checkout after [installation](getting-started.md).\n\n- The private daemon exits when its last client detaches.\n- A program takes an optional tmux binary, never a borrowed server socket.\n- Setup uses the workspace API; the task uses the client API.\n\nFor a separate project, save a program as `main.ml` and use these Dune libraries:\n\n```dune\n(executable\n (name main)\n (libraries libtmux libtmux-workspace libtmux-unix unix))\n```\n\nThe watch program also needs `libtmux-eio` and `eio_main`. The\n[installation guide](getting-started.md) supplies the project and switch setup.\n\n| Task | Complete program | Expected outcome line |\n| --- | --- | --- |\n| Start a private server and its first session | [Bootstrap](../examples/showcase_bootstrap.ml) | `bootstrapped: 1 session, 1 window, 1 pane` |\n| Navigate sessions, shared windows and panes | [Graph](../examples/showcase_graph.ml) | `graph: 2 sessions, 2 windows, 3 links, 2 panes` |\n| Observe future bytes concurrently | [Watch](../examples/showcase_watch.ml) | `observed: changed` |\n| Split a pane, send keys, capture the screen and resize | [Keys](../examples/showcase_send_keys.ml) | `sent: literal: $HOME; #{pane_id}` |\n| Rename a window and retain the old observation | [Rename](../examples/showcase_rename_window.ml) | `renamed: editor-main` |\n| Create a window and recapture its name | [Create](../examples/showcase_create_window.ml) | `created: logs` |\n| Move a window to another session's index | [Move](../examples/showcase_move_window.ml) | `moved: build at 7` |\n| Apply and verify horizontal pane geometry | [Layout](../examples/showcase_layout.ml) | `layout: 3 horizontal panes` |\n\nAll programs print their temporary socket path before the outcome. The\n[bootstrap walkthrough](bootstrap.md) explains the missing-endpoint precondition\nand ownership of the resulting client:\n\n```console\n$ opam exec -- dune exec examples/showcase_bootstrap.exe -- tmux\n```\n\nRun the graph example; it traverses the snapshot after the client and daemon\nclose:\n\n```console\n$ opam exec -- dune exec examples/showcase_graph.exe -- tmux\n```\n\nObserve future output with an application-owned Eio switch:\n\n```console\n$ opam exec -- dune exec examples/showcase_watch.exe -- tmux\n```\n\nSplit a pane, send a literal string containing shell and tmux format\ncharacters, capture the screen and resize:\n\n```console\n$ opam exec -- dune exec examples/showcase_send_keys.exe -- tmux\n```\n\nRename the editor window:\n\n```console\n$ opam exec -- dune exec examples/showcase_rename_window.exe -- tmux\n```\n\nCreate a separate logs window:\n\n```console\n$ opam exec -- dune exec examples/showcase_create_window.exe -- tmux\n```\n\nMove a build window to index 7 in another session:\n\n```console\n$ opam exec -- dune exec examples/showcase_move_window.exe -- tmux\n```\n\nSplit a window and apply an even horizontal layout:\n\n```console\n$ opam exec -- dune exec examples/showcase_layout.exe -- tmux\n```\n\nThey need tmux 3.3a or newer. [`showcase.json`](../examples/showcase.json) lists\neach program, its command and its expected line.\n\nSending keys confirms tmux accepted input, not that a program finished. A\nfuture-byte subscription has no history. See [control outcomes](control.md) and\n[streaming](streaming.md).\n" }, { "path": "docs/packages.md", - "content": "# Choose the packages your application needs\n\nThis repository is one Dune project with separately installable opam packages.\nEach package has an authored manifest. Internal dependencies require the same\npackage version, so a client or workspace adapter uses its matching core.\n\nThe core and pure workspace library have no third-party runtime dependencies.\nThey use OCaml 5.5.2's standard library, including `Iarray`, `Seq`, `List` and\n`result`. Test and documentation tools remain development dependencies.\n\n| Package | Role | Runtime dependencies |\n| --- | --- | --- |\n| `libtmux` | Immutable graph, typed queries, commands and observation values | OCaml standard library |\n| `libtmux-workspace` | Pure configuration validation, plans and execution journals | `libtmux` |\n| `libtmux-unix` | Blocking Linux transport and workspace executor | Core, workspace, standard `Unix`, private Linux bindings |\n| `libtmux-eio` | Concurrent transport and workspace executor | Core, workspace, blocking transport, Eio |\n| `libtmux-json` | Validated query and workspace JSON codecs | Core, workspace, Yojson |\n| `libtmux-workspace-cli` | Installed `tmux-workspace` command | The libraries above, Eio's entry point and Cmdliner |\n\nPure workspace planning depends on captured observations and an explicit tmux\nversion. It does not start a scheduler, read files or contact tmux. Execution\nuses the adapter supplied by `Libtmux_unix.Workspace` or `Libtmux_eio.Workspace`.\nThe CLI combines file loading, JSON decoding, planning and the Eio executor.\n\nAn application querying a captured graph needs only `libtmux`. A blocking\nscript chooses `libtmux-unix`; an Eio application chooses `libtmux-eio` and owns\nits scheduler and switch. Add `libtmux-json` for external query documents or JSON\nworkspaces. These integrations do not add dependencies to the pure core.\n\nSee [installation](getting-started.md), [workspace examples](workspaces.md) and\n[public interfaces](api.md). The source-install walkthrough installs all current\npackages; a consuming Dune project lists only the libraries it uses.\n\n## Scope policy\n\nPrefer standard-library types and ordinary functions. Keep transport, JSON and\nCLI dependencies at their integration boundaries. Use the current stable OCaml\ncompiler in 2026; older-compiler shims and compatibility matrices are excluded.\n\nMCP integration is outside this port's scope. The project does not ship or\nvendor an MCP SDK or server. Native OCaml APIs and the workspace CLI are its\nautomation interfaces; MCP discovery and conformance are excluded from the\nproject's adoption and completion criteria.\n" + "content": "# Choose the packages your application needs\n\nThis repository is one Dune project with separately installable opam packages.\nEach package has an authored manifest. Internal dependencies require the same\npackage version, so a client or workspace adapter uses its matching core.\n\nThe core and pure workspace library have no third-party runtime dependencies.\nThey use only the OCaml standard library, including `Iarray`, `Seq`, `List` and\n`result`. Test and documentation tools are development dependencies.\n\n| Package | Role | Runtime dependencies |\n| --- | --- | --- |\n| `libtmux` | Immutable graph, typed queries, commands and observation values | OCaml standard library |\n| `libtmux-workspace` | Pure configuration validation, plans and execution journals | `libtmux` |\n| `libtmux-unix` | Blocking Linux transport and workspace executor | Core, workspace, standard `Unix`, private Linux bindings |\n| `libtmux-eio` | Concurrent transport and workspace executor | Core, workspace, blocking transport, Eio |\n| `libtmux-json` | Validated query and workspace JSON codecs | Core, workspace, Yojson |\n| `libtmux-workspace-cli` | Installed `tmux-workspace` command | The libraries above, Eio's entry point and Cmdliner |\n\nPure workspace planning depends on captured observations and an explicit tmux\nversion. It does not start a scheduler, read files or contact tmux. Execution\nuses the adapter supplied by `Libtmux_unix.Workspace` or `Libtmux_eio.Workspace`.\nThe CLI combines file loading, JSON decoding, planning and the Eio executor.\n\nAn application querying a captured graph needs only `libtmux`. A blocking\nscript chooses `libtmux-unix`; an Eio application chooses `libtmux-eio` and owns\nits scheduler and switch. Add `libtmux-json` for external query documents or JSON\nworkspaces. These integrations do not add dependencies to the pure core.\n\nSee [installation](getting-started.md), [workspace examples](workspaces.md) and\n[public interfaces](api.md). The source-install walkthrough installs all current\npackages; a consuming Dune project lists only the libraries it uses.\n\n## Scope policy\n\nPrefer standard-library types and ordinary functions. Keep transport, JSON and\nCLI dependencies at their integration boundaries. Target the current stable\nOCaml; older-compiler shims and compatibility matrices are out of scope.\n\nNative OCaml APIs and the workspace CLI are the project's automation\ninterfaces.\n" }, { "path": "docs/compatibility.md", - "content": "# Compatibility\n\nThe compiler target is **OCaml 5.5.2**, exactly pinned. Older compilers are\noutside this implementation's scope. The development tools are Dune 3.24.2\nand opam 2.6.1.\n\nThe implementation supports Linux and **tmux 3.3a–3.8**, including every\nintermediate release. CI tests only the two endpoints, 3.3a and 3.8. Option and\nformat catalogs cover the entire range. Current evidence covers specific\ncomponents; final suite qualification has a separate acceptance gate. The table\nrecords the exercised fixtures, not every possible cleanup path.\n\n| Component | 3.3a | 3.8 |\n| --- | --- | --- |\n| Owned fixture teardown | PASS | PASS |\n| Exact Boolean pane filters | PASS | PASS |\n| Argument and metadata byte codecs | PASS | PASS |\n| Split control framing and command groups | PASS | PASS |\n| Bound graph capture and ordinary client teardown | PASS | PASS |\n| Replacement-daemon rejection | PASS | PASS |\n| Private-file capture and failed-save callbacks | PASS | PASS |\n| Eio waiter cancellation and retained outcomes | PASS | PASS |\n| Blocking cancellation and bounded drain | PASS | PASS |\n| Command and lane admission limits | PASS | PASS |\n| Environment bytes, scopes and read-process lifecycle | PASS | PASS |\n| Scoped options and built-in hook execution | PASS | PASS |\n| Current client names and detach-request semantics | PASS | PASS |\n| Interactive attachment, cancellation and child exit | PASS | PASS |\n| Versioned format availability and generated APIs | PASS | PASS |\n| Native operation inventory | PASS | PASS |\n| Data/Gap/End, stream limits and recovery | PASS | PASS |\n| Installed stream-gap walkthrough | FAIL | FAIL |\n| Rendered waits and future-byte matching | PASS | PASS |\n| Blocking/Eio workspace preconditions and compensation | PASS | PASS |\n| Public workspace bootstrap on fresh/existing daemons | PASS | PASS |\n| Installed workspace CLI, receipts, interruption and output faults | PASS | PASS |\n| Literal workspace guide and owned teardown | PASS | PASS |\n| Native workspace interruption caller and guide | PARTIAL | PASS |\n| Final suite qualification | UNVERIFIED | UNVERIFIED |\n\nThe [stream-gap walkthrough](streaming.md#recover-after-a-gap) reported an\nunknown operation outcome after its recovery output on tmux 3.3a in\n[hosted run 42516374421](https://github.com/libtmux/libtmux-ocaml/actions/runs/42516374421).\nA bounded diagnostic reproduced the failure with the owned daemon no longer\nalive. Its exit cause remains unresolved. Earlier component passes do not\nestablish that the affected workload is safe.\n\nOn tmux 3.8, the same walkthrough exited with status 2 in\n[hosted run 42533145236](https://github.com/libtmux/libtmux-ocaml/actions/runs/42533145236).\nIts harness captured but did not include the program's output in the raised\nexception, so the failure's cause is unestablished. That run passed the ordinary\nnative component suite before failing the installed example. Keep this result\nseparate from the earlier 3.3a daemon-exit evidence; it does not prove the same\ncause. The example runner now includes captured output and the original cause\nwhen a program fails or times out. Later passing runs do not close either\nfinding.\n\nThe [workspace interruption caller](workspace-recovery.md) passes installed\ncompensation and foreign-link preservation checks on both endpoints. Its literal\nguide also passes. An earlier tmux 3.3a consumer-harness readiness command exited\nwith status 1 before releasing the creation hook. That failure did not retain\nthe command's captured output, so its cause remains unestablished. The current\nrunner retains command, consumer and cleanup diagnostics. Later passing cases\ndo not close the earlier readiness finding; the 3.3a cell remains partial.\nInstalled checks verify compensated pane exit, seed topology and client counts.\nThe foreign-link control renames the created session and requires the ID-based\npostcondition to report failure while preserving foreign content.\n\nThe current matrix uses only OCaml 5.5.2 and tmux 3.3a/3.8. Pure assertions\ncheck version rejection and catalog availability across the supported range.\nIntermediate releases remain supported without separate runtime CI cells;\nearlier runtime results remain evidence for their tested workloads. Development\ntmux 3.8a does not replace the published 3.8 cell. PID-acquisition races and\nmalformed replies after writing pass deterministic fault checks with real Linux\nchild processes. Cancellation at each capture transfer step and unresolved-buffer\nreceipts also pass on the\nrecorded release fixtures. Ready I/O still checks its deadline; busy pipes\ncannot bypass the timeout. These results remain evidence for those tested cases.\nMCP integration is outside this port's scope.\n\nOwned-child cleanup sends TERM, allows a 200 ms cooperative grace, then sends\nKILL if necessary and reaps the child. The policy covers control, read-process\nand terminal helpers; it never sends these signals to the daemon. Eio waits\nallow other fibers to progress. The grace applies per helper, not to the whole\nclient, and cannot bound uninterruptible kernel work or scratch-file completion.\nCaller-owned `Cleanup` reports retain secondary process and descriptor failures\nwithout replacing native cancellation or the primary exception. Independent\nreleases are still attempted. A failed KILL only permits a nonblocking exit\ncheck; an unconfirmed exit is reported as `Unreaped_child`. Concurrent Eio\nclient closes await one retained teardown result. The Eio runtime owns its pipe\nends explicitly and joins their readiness waiters before closing them. Process\nI/O rechecks closure after yielding, preventing access to reused descriptors.\nA private Eio process owner keeps its reaper alive through cancellation and\nswitch release; callers join its completed teardown. Shutdown regressions cover\nboth Eio's Linux and POSIX backends on Linux. This does not add platform support.\nNew commands and subscriptions are rejected as soon as client close starts.\nConnection and subscription teardown also retain one completion: overlapping\nEio callers join it, and later calls preserve its failure.\n\nThe shutdown regression checks stopped helpers and helpers that survive TERM\nand input closure, while keeping the parent and its Eio switch alive to verify\nreaping. These are injected helper failures, not naturally reproduced hangs in\na supported tmux daemon. Blocking readiness uses `poll`; ready reads, ready\nwrites and deadlines work above descriptor 1100. Terminal attachment and\ncancellation also have high-descriptor evidence on the previously tested\n3.3/3.3a/3.4/3.8 fixtures. See the\n[architecture's cleanup boundary](dev/adr/0001-native-ocaml-suite.md#share-protocol-semantics-while-preserving-each-runtimes-cancellation).\n\nThe near-limit [mixed workload](benchmarking.md#mixed-commands-stream-pressure-and-membership-changes)\nreproduces a tmux 3.4 daemon crash in the control-client detach notification\npath. The exact 3.8 source includes the upstream null-state guard. An earlier\n3.3 observer-command failure remains unattributed. Passing ordinary client\nchecks does not close either mixed-workload failure.\n\nThe I/O packages require Linux pidfds, the same PID namespace as the daemon,\nand shared local scratch storage. A socket pathname does not prove those\nconditions. Each connection has its own generation; a replacement daemon never\ninherits old targets. Closing a client releases its own processes and leaves\nthe daemon running.\n\nThe blocking client accepts a scoped `Cancellation` token that another domain\nor systhread can cancel. It drains admitted work before raising\n`Cancellation.Cancelled`. The drain has at most one exchange timeout from\ndetection; subsequent owned-child cleanup has its separate cooperative grace.\nThe operation handle retains success, failure or uncertainty. Eio cancellation\nreleases the waiter immediately while a client-owned fiber drains the work.\nLocal scratch I/O must finish in either case; Eio performs it on a system\nthread. Filesystem failures have a distinct error from transport disconnects.\n\nPane PIDs and client terminal heights can be absent. The model exposes these as\noptions; a control client without a started terminal has no reported height.\ntmux itself sanitizes names on older releases and rejects some names on newer\nreleases. Captures preserve the observed value rather than reconstructing the\nargument originally submitted by another client.\n\nControl commands use ASCII escapes for non-ASCII bytes because tmux 3.3's\ncommand-string lexer can confuse a signed `0xff` byte with EOF. Metadata uses\ntmux's `q` format modifier and preserves physical newlines. A fixed read probe\ndetects the additional visual escaping used by tmux 3.4 before decoding it.\nControl clients must request UTF-8 mode so locale-dependent sanitization cannot\nalter captured bytes.\n\nAn end guard acknowledges a command. Completion requires the operation's\npostcondition or a following marker on its lane. A control client may exit\nwith status 1 after an earlier command failed, even when later commands and\nshutdown succeeded. Tests retain that distinction.\n\nThe optional JSON codec supports the scalar pane registry and Boolean nodes\nfrom Java's [`libtmux.filter/1`](query-interchange.md) at revision\n`e8a39689d8d60968ac978a1dd2a89c6112333896`. Both implementations agree on 66\ncaptured-value cases and read each other's encoded queries. Numeric operands\nuse signed 32-bit bounds. Regex, relationship documents, numeric membership\nand native extension fields remain unsupported in this wire schema.\nThe [conformance procedure](../test/conformance/README.md) rebuilds the peers\nfrom identified inputs and retains both codec directions and artifact digests.\nIt is a separate qualification command, not part of ordinary hosted OCaml CI.\n\nReproduce native checks with the commands in\n[CONTRIBUTING.md](../.github/CONTRIBUTING.md). The fixture builders use official\nrelease archives and retain archive and binary digests under `scratch/tmux/`.\n\nEnvironment reads use a bounded read-only process on the same daemon. The\nclient checks its reported PID and the original pidfd after collecting the\ncomplete response. Values may contain control-marker text without entering\nthe control parser. Replacement, malformed data, truncated output and capacity\nfailures never become a successful empty table. This route does not execute\nmutations or reconnect the primary lane.\n\nScoped options preserve scalar types, sparse array indexes and local versus\ninherited entries. Bulk inherited enumeration follows tmux and includes only\nbuilt-ins; `read_option` resolves a named inherited user option. Descriptors are\nrecorded for every supported release in the [option catalog](options.md). tmux\nfills the lowest unused indexes when appending array elements.\n\nHook commands keep names and arguments separate. Built-in hook arrays report\nsynchronous failures; earlier effects remain after a later command fails. Named\n`@` hooks can be configured, read and removed, but `run_hook` rejects them because\ntmux may hide parse failures in the server log. Hooks that print arbitrary output\nremain outside the supported control transport contract.\n\nCaptured client names belong to a connection generation but may be reused within\nit. Operations address the client currently bearing that name. A detach request\nconfirms command processing, not peer exit; callers need separate exit evidence.\nSwitching an existing client does not create a new terminal.\n\n`Terminal.attach_current` opens an interactive terminal against an explicit\nendpoint and session ID. This separate utility is unbound: an ID can refer to a\ndifferent daemon if the endpoint changes. It accepts no captured target and\nnever retries or starts a daemon. Both backends wait for the terminal client to\nexit and reap it on cancellation. Supplied terminal streams remain caller-owned.\n\nThe generated [format catalog](formats.md) records exact-release availability\nand callback contexts. Local `Formats.lookup` distinguishes captured values,\nmissing values, unacquired fields and fields unsupported by that release.\nIt does not perform arbitrary format acquisition. Generated\n[operation conveniences](operations.md) share the same command constructors\nbetween Unix and Eio; the installed-consumer test exercises both adapters.\n" + "content": "# Compatibility\n\nThe compiler target is **OCaml 5.5.2**, exactly pinned. Older compilers are\noutside this implementation's scope. The development tools are Dune 3.24.2\nand opam 2.6.1.\n\nThe implementation supports Linux and **tmux 3.3a–3.8**, including every\nintermediate release. CI tests only the two endpoints, 3.3a and 3.8. Option and\nformat catalogs cover the entire range. Current evidence covers specific\ncomponents; final suite qualification has a separate acceptance gate. The table\nrecords the exercised fixtures, not every possible cleanup path.\n\n| Component | 3.3a | 3.8 |\n| --- | --- | --- |\n| Owned fixture teardown | PASS | PASS |\n| Exact Boolean pane filters | PASS | PASS |\n| Argument and metadata byte codecs | PASS | PASS |\n| Split control framing and command groups | PASS | PASS |\n| Bound graph capture and ordinary client teardown | PASS | PASS |\n| Replacement-daemon rejection | PASS | PASS |\n| Private-file capture and failed-save callbacks | PASS | PASS |\n| Eio waiter cancellation and retained outcomes | PASS | PASS |\n| Blocking cancellation and bounded drain | PASS | PASS |\n| Command and lane admission limits | PASS | PASS |\n| Environment bytes, scopes and read-process lifecycle | PASS | PASS |\n| Scoped options and built-in hook execution | PASS | PASS |\n| Current client names and detach-request semantics | PASS | PASS |\n| Interactive attachment, cancellation and child exit | PASS | PASS |\n| Versioned format availability and generated APIs | PASS | PASS |\n| Native operation inventory | PASS | PASS |\n| Data/Gap/End, stream limits and recovery | PASS | PASS |\n| Installed stream-gap walkthrough | FAIL | FAIL |\n| Rendered waits and future-byte matching | PASS | PASS |\n| Blocking/Eio workspace preconditions and compensation | PASS | PASS |\n| Public workspace bootstrap on fresh/existing daemons | PASS | PASS |\n| Installed workspace CLI, receipts, interruption and output faults | PASS | PASS |\n| Literal workspace guide and owned teardown | PASS | PASS |\n| Native workspace interruption caller and guide | PARTIAL | PASS |\n| Final suite qualification | UNVERIFIED | UNVERIFIED |\n\nThe [stream-gap walkthrough](streaming.md#recover-after-a-gap) reported an\nunknown operation outcome after its recovery output on tmux 3.3a in\n[hosted run 42516374421](https://github.com/libtmux/libtmux-ocaml/actions/runs/42516374421).\nA bounded diagnostic reproduced the failure with the owned daemon no longer\nalive. Its exit cause remains unresolved. Earlier component passes do not\nestablish that the affected workload is safe.\n\nOn tmux 3.8, the same walkthrough exited with status 2 in\n[hosted run 42533145236](https://github.com/libtmux/libtmux-ocaml/actions/runs/42533145236).\nIts harness captured but did not include the program's output in the raised\nexception, so the failure's cause is unestablished. That run passed the ordinary\nnative component suite before failing the installed example. Keep this result\nseparate from the earlier 3.3a daemon-exit evidence; it does not prove the same\ncause. The example runner now includes captured output and the original cause\nwhen a program fails or times out. Later passing runs do not close either\nfinding.\n\nThe [workspace interruption caller](workspace-recovery.md) passes installed\ncompensation and foreign-link preservation checks on both endpoints. Its literal\nguide also passes. An earlier tmux 3.3a consumer-harness readiness command exited\nwith status 1 before releasing the creation hook. That failure did not retain\nthe command's captured output, so its cause remains unestablished. The current\nrunner retains command, consumer and cleanup diagnostics. Later passing cases\ndo not close the earlier readiness finding; the 3.3a cell remains partial.\nInstalled checks verify compensated pane exit, seed topology and client counts.\nThe foreign-link control renames the created session and requires the ID-based\npostcondition to report failure while preserving foreign content.\n\nThe current matrix uses only OCaml 5.5.2 and tmux 3.3a/3.8. Pure assertions\ncheck version rejection and catalog availability across the supported range.\nIntermediate releases remain supported without separate runtime CI cells;\nearlier runtime results remain evidence for their tested workloads. Development\ntmux 3.8a does not replace the published 3.8 cell. PID-acquisition races and\nmalformed replies after writing pass deterministic fault checks with real Linux\nchild processes. Cancellation at each capture transfer step and unresolved-buffer\nreceipts also pass on the\nrecorded release fixtures. Ready I/O still checks its deadline; busy pipes\ncannot bypass the timeout. These results remain evidence for those tested cases.\n\nOwned-child cleanup sends TERM, allows a 200 ms cooperative grace, then sends\nKILL if necessary and reaps the child. The policy covers control, read-process\nand terminal helpers; it never sends these signals to the daemon. Eio waits\nallow other fibers to progress. The grace applies per helper, not to the whole\nclient, and cannot bound uninterruptible kernel work or scratch-file completion.\nCaller-owned `Cleanup` reports retain secondary process and descriptor failures\nwithout replacing native cancellation or the primary exception. Independent\nreleases are still attempted. A failed KILL only permits a nonblocking exit\ncheck; an unconfirmed exit is reported as `Unreaped_child`. Concurrent Eio\nclient closes await one retained teardown result. The Eio runtime owns its pipe\nends explicitly and joins their readiness waiters before closing them. Process\nI/O rechecks closure after yielding, preventing access to reused descriptors.\nA private Eio process owner keeps its reaper alive through cancellation and\nswitch release; callers join its completed teardown. Shutdown regressions cover\nboth Eio's Linux and POSIX backends on Linux. This does not add platform support.\nNew commands and subscriptions are rejected as soon as client close starts.\nConnection and subscription teardown also retain one completion: overlapping\nEio callers join it, and later calls preserve its failure.\n\nThe shutdown regression checks stopped helpers and helpers that survive TERM\nand input closure, while keeping the parent and its Eio switch alive to verify\nreaping. These are injected helper failures, not naturally reproduced hangs in\na supported tmux daemon. Blocking readiness uses `poll`; ready reads, ready\nwrites and deadlines work above descriptor 1100. Terminal attachment and\ncancellation also have high-descriptor evidence on the previously tested\n3.3/3.3a/3.4/3.8 fixtures. See the\n[architecture's cleanup boundary](dev/adr/0001-native-ocaml-suite.md#share-protocol-semantics-while-preserving-each-runtimes-cancellation).\n\nThe near-limit [mixed workload](benchmarking.md#mixed-commands-stream-pressure-and-membership-changes)\nreproduces a tmux 3.4 daemon crash in the control-client detach notification\npath. The exact 3.8 source includes the upstream null-state guard. An earlier\n3.3 observer-command failure remains unattributed. Passing ordinary client\nchecks does not close either mixed-workload failure.\n\ntmux 3.2 through 3.8 also abort the daemon with `fatal: not enough data` when a\ncontrol client leaves, or is set to ignore output, while a queued output block\nis unwritten and its pane prints again. `control_write_output` in `control.c`\nadvances the client's offsets past the pending bytes, and `control_append_data`\nthen finds fewer bytes than the block records. It is a race, so the failure\nrate depends on load: 20 of 20 and 19 of 20 runs of a 100-round\nclose-while-echoing regression killed the daemon on 3.8 and 3.3a, and 8 of\n1200 runs of the stream-recovery walkthrough did under CPU load on 3.8. A\nsubscription lane now pauses each pane it observed before closing; pausing\ndiscards the queued blocks. This guards the port only. Other control clients\nthat disconnect mid-output can still trigger the abort.\n\nThe I/O packages require Linux pidfds, the same PID namespace as the daemon,\nand shared local scratch storage. A socket pathname does not prove those\nconditions. Each connection has its own generation; a replacement daemon never\ninherits old targets. Closing a client releases its own processes and leaves\nthe daemon running.\n\nThe blocking client accepts a scoped `Cancellation` token that another domain\nor systhread can cancel. It drains admitted work before raising\n`Cancellation.Cancelled`. The drain has at most one exchange timeout from\ndetection; subsequent owned-child cleanup has its separate cooperative grace.\nThe operation handle retains success, failure or uncertainty. Eio cancellation\nreleases the waiter immediately while a client-owned fiber drains the work.\nLocal scratch I/O must finish in either case; Eio performs it on a system\nthread. Filesystem failures have a distinct error from transport disconnects.\n\nPane PIDs and client terminal heights can be absent. The model exposes these as\noptions; a control client without a started terminal has no reported height.\ntmux itself sanitizes names on older releases and rejects some names on newer\nreleases. Captures preserve the observed value rather than reconstructing the\nargument originally submitted by another client.\n\nControl commands use ASCII escapes for non-ASCII bytes because tmux 3.3's\ncommand-string lexer can confuse a signed `0xff` byte with EOF. Metadata uses\ntmux's `q` format modifier and preserves physical newlines. A fixed read probe\ndetects the additional visual escaping used by tmux 3.4 before decoding it.\nControl clients must request UTF-8 mode so locale-dependent sanitization cannot\nalter captured bytes.\n\nAn end guard acknowledges a command. Completion requires the operation's\npostcondition or a following marker on its lane. A control client may exit\nwith status 1 after an earlier command failed, even when later commands and\nshutdown succeeded. Tests retain that distinction.\n\nThe optional JSON codec supports the scalar pane registry and Boolean nodes\nfrom Java's [`libtmux.filter/1`](query-interchange.md) at revision\n`e8a39689d8d60968ac978a1dd2a89c6112333896`. Both implementations agree on 66\ncaptured-value cases and read each other's encoded queries. Numeric operands\nuse signed 32-bit bounds. Regex, relationship documents, numeric membership\nand native extension fields remain unsupported in this wire schema.\nThe [conformance procedure](../test/conformance/README.md) rebuilds the peers\nfrom identified inputs and retains both codec directions and artifact digests.\nIt is a separate qualification command, not part of ordinary hosted OCaml CI.\n\nReproduce native checks with the commands in\n[CONTRIBUTING.md](../.github/CONTRIBUTING.md). The fixture builders use official\nrelease archives and retain archive and binary digests under `scratch/tmux/`.\n\nEnvironment reads use a bounded read-only process on the same daemon. The\nclient checks its reported PID and the original pidfd after collecting the\ncomplete response. Values may contain control-marker text without entering\nthe control parser. Replacement, malformed data, truncated output and capacity\nfailures never become a successful empty table. This route does not execute\nmutations or reconnect the primary lane.\n\nScoped options preserve scalar types, sparse array indexes and local versus\ninherited entries. Bulk inherited enumeration follows tmux and includes only\nbuilt-ins; `read_option` resolves a named inherited user option. Descriptors are\nrecorded for every supported release in the [option catalog](options.md). tmux\nfills the lowest unused indexes when appending array elements.\n\nHook commands keep names and arguments separate. Built-in hook arrays report\nsynchronous failures; earlier effects remain after a later command fails. Named\n`@` hooks can be configured, read and removed, but `run_hook` rejects them because\ntmux may hide parse failures in the server log. Hooks that print arbitrary output\nremain outside the supported control transport contract.\n\nCaptured client names belong to a connection generation but may be reused within\nit. Operations address the client currently bearing that name. A detach request\nconfirms command processing, not peer exit; callers need separate exit evidence.\nSwitching an existing client does not create a new terminal.\n\n`Terminal.attach_current` opens an interactive terminal against an explicit\nendpoint and session ID. This separate utility is unbound: an ID can refer to a\ndifferent daemon if the endpoint changes. It accepts no captured target and\nnever retries or starts a daemon. Both backends wait for the terminal client to\nexit and reap it on cancellation. Supplied terminal streams remain caller-owned.\n\nThe generated [format catalog](formats.md) records exact-release availability\nand callback contexts. Local `Formats.lookup` distinguishes captured values,\nmissing values, unacquired fields and fields unsupported by that release.\nIt does not perform arbitrary format acquisition. Generated\n[operation conveniences](operations.md) share the same command constructors\nbetween Unix and Eio; the installed-consumer test exercises both adapters.\n" }, { "path": "docs/testing.md", @@ -58,11 +58,11 @@ }, { "path": "docs/status.md", - "content": "# Current capabilities and adoption gaps\n\nThe immutable model, typed queries, native Linux clients and output observation\nhave real-tmux evidence at the active tmux endpoints, 3.3a and 3.8. Intermediate\nreleases remain supported throughout 3.3a–3.8. The installed\nworkspace CLI also passes those cells. The final suite review remains unfinished.\nNo package or hosted-documentation release has been published.\n\n## What an application can use\n\nCapture a complete graph, retain it after closing the client, traverse shared\nwindows through session-specific links, filter with native predicates or typed\nexpressions, and establish cardinality before an explicit mutation. Native\noperations cover sessions, windows, panes, captured clients, layouts,\nenvironment, options and hooks. Both blocking and Eio transports retain\noperation outcomes and expose bounded subscriptions.\n\nThe [compatibility table](compatibility.md) identifies qualified components.\nThe [examples](README.md) are installed, compiled and executed against owned\nservers; they cover graph links, query results, created resources, literal\ninput, streaming, rendered waits and client teardown.\n\n## What is still missing\n\n| Area | Required evidence before complete-suite adoption |\n| --- | --- |\n| Documentation site | Qualify the final hosted reference and verify its deployed links; public `.cmti` export and local rendering are implemented |\n| Known runtime findings | Account for the [recorded daemon-exit and observer failures](compatibility.md) when choosing a deployment workload |\n| Final qualification | Rerun every required component and exact release cell on the final source revision |\n| Package adoption | Obtain an independent caller-task review and resolve material findings |\n\n[Recorded benchmarks](benchmarking.md) cover blocking/Eio capture, graphs up to\n256 panes, concurrent requests, OCaml heap allocation, client/daemon CPU,\nfuture-output latency and cancellation cleanup. Their raw data preserves the\nworkload, source identities and host conditions.\n\nThe workspace model, JSON loader, blocking/Eio executors and installed CLI are\nimplemented. The [workspace guide](workspaces.md) executes the installed command\nthrough validation, planning, apply, receipt inspection and owned cleanup.\nLive tests cover partial effects, compensation, append isolation, stale plans,\ncancellation journals and bootstrap on fresh and existing daemons. Cleanup\ntargets only proven newly created panes; foreign panes moved into a new window\nremain. Versioned advisory plans and execution receipts preserve errors,\ncreation IDs and cleanup outcomes; output documents cannot be replayed as\noperational input. CLI checks also cover malformed input, collisions, missing\nendpoints, interrupted apply, changed documents and stalled or broken stdout.\n\n## Engineering assessment\n\nFor a Linux application needing immutable tmux observations and explicit native\ncontrol, the model and clients are candidates for adoption with the documented\nconstraints. Suite adoption still needs the documentation and qualification\nabove. Maintainer count and alpha status do not decide that\nassessment; observable behavior and recovery do.\n\nAn adopting engineer should expect explicit endpoint selection, client lifetime,\ncommand uncertainty and stream gaps. The package should keep these visible.\nImplicit reconnects, callback-driven property acquisition, a mandatory query\nwrapper or a required runtime for pure filtering would make the API harder to\nreason about.\n\nA 9.5/10 whole-package rating is not established. Hosted documentation and\nfinal qualification have open gates. Documentation\nquality cannot substitute for those results. [Testing](testing.md) describes\ncurrent evidence and how examples are kept in sync with source.\n\nMCP integration is excluded by project policy. Its SDK, conformance and host\nintegration are outside the adoption criteria. The supported automation\nsurfaces are native OCaml APIs and the workspace CLI; see\n[package boundaries](packages.md).\n" + "content": "# Current capabilities and adoption gaps\n\n- The model, typed queries, native Linux clients, output observation and\n workspace CLI are tested against real tmux 3.3a and 3.8. Releases in between\n are supported but not run in CI.\n- The [guide and API reference](https://libtmux.org/en/ocaml/) are hosted.\n- Not on opam yet. The final suite review is unfinished.\n\n## What an application can use\n\n- Capture a graph, keep it after closing the client, and walk shared windows\n through session links.\n- Filter with native predicates or typed expressions; check cardinality before\n a mutation.\n- Run native operations on sessions, windows, panes, clients, layouts,\n environment, options and hooks.\n- Keep operation outcomes and watch bounded subscriptions from the blocking or\n Eio client.\n\nThe [compatibility table](compatibility.md) lists qualified components; the\n[examples](README.md) run against servers they own.\n\n## What is still missing\n\n| Area | Required evidence before complete-suite adoption |\n| --- | --- |\n| Documentation site | Qualify the final hosted reference and verify its deployed links; public `.cmti` export and local rendering are implemented |\n| Known runtime findings | Account for the [recorded daemon-exit and observer failures](compatibility.md) when choosing a deployment workload |\n| Final qualification | Rerun every required component and exact release cell on the final source revision |\n| Package adoption | Obtain an independent caller-task review and resolve material findings |\n\n[Recorded benchmarks](benchmarking.md) cover capture, concurrency, memory, CPU,\noutput latency and cancellation cleanup.\n\nThe workspace model, JSON loader, blocking and Eio executors and the CLI are\nimplemented; the [workspace guide](workspaces.md) walks through them.\n\n- Live tests cover partial effects, compensation, append isolation, stale\n plans, cancellation journals and bootstrap on fresh and existing daemons.\n- Cleanup removes only panes whose creation is proven. Foreign panes moved into\n a new window remain.\n- Plans and receipts record errors, creation IDs and cleanup outcomes. They are\n output, not input to replay.\n\n## Engineering assessment\n\n- For a Linux application that needs immutable tmux observations and explicit\n native control, the model and clients are candidates for adoption within the\n documented limits. Suite adoption needs the gates above.\n- Expect explicit endpoints, client lifetimes, command uncertainty and stream\n gaps. The API keeps them visible and never reconnects for you.\n- The supported surfaces are the native OCaml APIs and the workspace CLI; see\n [package boundaries](packages.md) and [testing](testing.md).\n" }, { "path": "docs/workspaces.md", - "content": "# Create a workspace from JSON\n\n`tmux-workspace` validates a JSON configuration, previews an advisory plan, and\napplies a fresh plan to an explicit socket. Install it through the\n[source installation](../README.md#install-from-source); `opam install .`\nincludes the CLI. Run this guide from the repository root.\n\n`check` performs no tmux I/O. `plan` observes the endpoint and never starts a\ndaemon. `apply` rereads the document, checks current state, then executes ordered\nactions. A preview is not a transaction or an executable target.\n\n## Define the layout\n\nThe shipped [project.json](../examples/workspace/project.json) creates an\n`editor` window with two panes and a `logs` window with one. Each pane runs\n`/bin/cat -u` directly, keeping the demonstration alive without a shell command.\n\n\n\n```json\n{\n \"schema\": \"libtmux.workspace/1\",\n \"session\": \"ocaml-project\",\n \"cwd\": \".\",\n \"width\": 120,\n \"height\": 40,\n \"environment\": {\"PROJECT\": \"ocaml\"},\n \"options\": [{\"name\": \"@project\", \"kind\": \"text\", \"value\": \"ocaml\"}],\n \"windows\": [\n {\n \"name\": \"editor\",\n \"layout\": \"even-horizontal\",\n \"panes\": [\n {\"exec\": [\"/bin/cat\", \"-u\"]},\n {\"exec\": [\"/bin/cat\", \"-u\"], \"direction\": \"right\"}\n ]\n },\n {\"name\": \"logs\", \"panes\": [{\"exec\": [\"/bin/cat\", \"-u\"]}]}\n ]\n}\n```\n\nRelative directories resolve against the JSON file's directory. Environment\nvalues merge from session to window to pane. `exec` supplies literal argv;\n`shell` explicitly requests shell interpretation. They are mutually exclusive.\nOmitting both uses tmux's default command. `startup` entries send literal text\nfollowed by Enter; they do not wait for a command to finish.\n\n## Validate, preview and apply\n\nThis walkthrough uses a private server and an empty tmux configuration. The\n`seed` session keeps the server alive while the CLI creates the project.\nInherited `TMUX` and `TMUX_PANE` do not select the endpoint.\n\n\n\n```console\n$ export LIBTMUX_WORKSPACE_DIR=\"$(mktemp -d -t libtmux-ocaml-workspace.XXXXXX)\"\n```\n\nCopying the file also makes its working directory the private directory:\n\n```console\n$ cp examples/workspace/project.json \"$LIBTMUX_WORKSPACE_DIR/project.json\"\n```\n\n```console\n$ opam exec -- tmux-workspace check \"$LIBTMUX_WORKSPACE_DIR/project.json\"\n```\n\nExpected output: `Valid workspace \"ocaml-project\": 2 windows, 3 panes`.\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n -f /dev/null \\\n new-session \\\n -d \\\n -s seed \\\n -- \"exec cat\"\n```\n\n```console\n$ opam exec -- tmux-workspace plan \\\n --socket \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n --require-existing \\\n \"$LIBTMUX_WORKSPACE_DIR/project.json\"\n```\n\nThe plan lists session creation, settings, the split and layout, and the logs\nwindow. Applying it requires the original configuration:\n\n```console\n$ opam exec -- tmux-workspace apply \\\n --socket \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n --require-existing \\\n --json \\\n \"$LIBTMUX_WORKSPACE_DIR/project.json\" \\\n > \"$LIBTMUX_WORKSPACE_DIR/receipt.json\"\n```\n\nThe receipt uses [`libtmux.workspace-receipt/1`](../json/libtmux_json.mli).\nOn success, `status` is\n`succeeded`; `failed`, `uncertain` and `skipped` are empty. Each creation records\nthe IDs returned by tmux. Check the resulting windows independently:\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n list-windows \\\n -t '=ocaml-project' \\\n -F '#{window_name}:#{window_panes}'\n```\n\nExpected output is `editor:2` followed by `logs:1`.\n\nRemove only the sessions this walkthrough created:\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n kill-session \\\n -t '=ocaml-project'\n```\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n kill-session \\\n -t '=seed'\n```\n\n```console\n$ rm -f -- \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n \"$LIBTMUX_WORKSPACE_DIR/project.json\" \\\n \"$LIBTMUX_WORKSPACE_DIR/receipt.json\"\n```\n\n```console\n$ rmdir \"$LIBTMUX_WORKSPACE_DIR\"\n```\n\n\n\nWithout `--require-existing`, `apply` can start a missing endpoint by creating\nthe requested session. That server uses the normal tmux configuration. Closing\nthe CLI's client leaves the server running; its appearance does not grant\ndaemon ownership. `plan` on a missing endpoint checks the local tmux version\nand returns a bootstrap plan without creating the socket.\n\n## Collisions and recovery\n\nAn existing session name fails with exit 4 by default. `--append` adds new\nwindows to that session and rejects window-name collisions. Append never\nchanges the existing session's options or environment; omit those session\nsettings from an append document. It preserves existing panes.\n\nUse `--json` on `check` or `plan` to obtain `document_digest`, then pass that\nvalue through `--expect-document` on apply. A changed document fails before\nendpoint I/O. The digest does not lock tmux state. Each apply builds and\nrechecks its own plan on the current connection generation.\n\nOn failure or SIGINT, inspect the receipt before deciding what to do next.\nDefault compensation kills only panes whose creation the journal proved, in\nreverse order. A foreign pane moved into a new window remains. `--keep-partial`\nretains proven creations instead. Cleanup failures and creations whose IDs\ncould not be bound remain explicit. Never rerun an uncertain mutation solely\nbecause its caller was interrupted.\n\nThe [retained-operation example](recovery.md) demonstrates waiter recovery.\nThe [native workspace example](workspace-recovery.md) interrupts an apply,\ninspects its journal after client cleanup and verifies compensation. Read the\navailable journal, identify proven effects, then choose another explicit action.\nA saved JSON receipt describes observations; it is not an executable target or\na transaction to replay.\n\nThe execution journal is retained in process memory. `await` initiates steps\nonly once for a particular execution handle; a new handle or CLI invocation\nstarts a new execution. Operation IDs correlate receipts and do not suppress\nduplicates. Neither a retained handle nor an exported receipt is a durable\nwrite-ahead log. Compensation cannot undo files, network requests or other\neffects of the programs launched in panes.\n\n| Exit | Meaning |\n| --- | --- |\n| 0 | Validation, planning or apply succeeded |\n| 2 | Invalid arguments or document |\n| 3 | Required endpoint missing |\n| 4 | Collision, changed document or stale plan |\n| 5 | Failed, partial or uncertain apply; inspect the receipt |\n| 6 | Transport, capability or result-delivery failure |\n| 130 | SIGINT; the available journal is emitted within the cleanup bound |\n\nSIGINT does not undo admitted commands. Receipt output is bounded; a blocked or\nbroken stdout cannot produce a successful exit. Forced process termination\ncannot promise a delivered receipt. Expected failures are distinct from Eio\ncancellation in the native API, which propagates cancellation to the caller.\n\n## Bounds and native callers\n\nDocuments use UTF-8 JSON with a 64 KiB input bound and depth limit 32. Unknown\nand duplicate properties fail. Configurations allow at most 64 windows and 256\npanes; a plan allows at most 4096 actions. Plans and receipts have a 4 MiB output\nbound. Plans omit environment values, option values and startup text. They can\nstill contain command arguments and paths; treat them as application data.\n\nFor native code, use `Libtmux_json.Workspace.of_string`,\n`Libtmux_workspace.Plan.make`, and the backend's `Workspace.submit` or\n`Workspace.submit_bootstrap`. `inspect` reads the retained journal locally;\n`await` performs I/O. The application owns the Eio switch and scheduler.\nThe [native bootstrap walkthrough](bootstrap.md) starts one private session\nwithout a JSON dependency and captures its graph through the resulting client.\nSee the [API reference](api.md), [control outcomes](control.md) and\n[compatibility evidence](compatibility.md).\n" + "content": "# Create a workspace from JSON\n\n`tmux-workspace` validates a JSON configuration, previews an advisory plan, and\napplies a fresh plan to an explicit socket. Install it through the\n[source installation](../README.md#install-from-source); `opam install .`\nincludes the CLI. Run this guide from the repository root.\n\n`check` performs no tmux I/O. `plan` observes the endpoint and never starts a\ndaemon. `apply` rereads the document, checks current state, then executes ordered\nactions. A preview is not a transaction or an executable target.\n\n## Define the layout\n\nThe shipped [project.json](../examples/workspace/project.json) creates an\n`editor` window with two panes and a `logs` window with one. Each pane runs\n`/bin/cat -u` directly, keeping the demonstration alive without a shell command.\n\n\n\n```json\n{\n \"schema\": \"libtmux.workspace/1\",\n \"session\": \"ocaml-project\",\n \"cwd\": \".\",\n \"width\": 120,\n \"height\": 40,\n \"environment\": {\"PROJECT\": \"ocaml\"},\n \"options\": [{\"name\": \"@project\", \"kind\": \"text\", \"value\": \"ocaml\"}],\n \"windows\": [\n {\n \"name\": \"editor\",\n \"layout\": \"even-horizontal\",\n \"panes\": [\n {\"exec\": [\"/bin/cat\", \"-u\"]},\n {\"exec\": [\"/bin/cat\", \"-u\"], \"direction\": \"right\"}\n ]\n },\n {\"name\": \"logs\", \"panes\": [{\"exec\": [\"/bin/cat\", \"-u\"]}]}\n ]\n}\n```\n\nRelative directories resolve against the JSON file's directory. Environment\nvalues merge from session to window to pane. `exec` supplies literal argv;\n`shell` explicitly requests shell interpretation. They are mutually exclusive.\nOmitting both uses tmux's default command. `startup` entries send literal text\nfollowed by Enter; they do not wait for a command to finish.\n\n## Validate, preview and apply\n\nThis walkthrough uses a private server and an empty tmux configuration. The\n`seed` session keeps the server alive while the CLI creates the project.\nInherited `TMUX` and `TMUX_PANE` do not select the endpoint.\n\n\n\n```console\n$ export LIBTMUX_WORKSPACE_DIR=\"$(mktemp -d -t libtmux-ocaml-workspace.XXXXXX)\"\n```\n\nCopying the file also makes its working directory the private directory:\n\n```console\n$ cp examples/workspace/project.json \"$LIBTMUX_WORKSPACE_DIR/project.json\"\n```\n\n```console\n$ opam exec -- tmux-workspace check \"$LIBTMUX_WORKSPACE_DIR/project.json\"\n```\n\nExpected output: `Valid workspace \"ocaml-project\": 2 windows, 3 panes`.\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n -f /dev/null \\\n new-session \\\n -d \\\n -s seed \\\n -- \"exec cat\"\n```\n\n```console\n$ opam exec -- tmux-workspace plan \\\n --socket \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n --require-existing \\\n \"$LIBTMUX_WORKSPACE_DIR/project.json\"\n```\n\nThe plan lists session creation, settings, the split and layout, and the logs\nwindow. Applying it requires the original configuration:\n\n```console\n$ opam exec -- tmux-workspace apply \\\n --socket \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n --require-existing \\\n --json \\\n \"$LIBTMUX_WORKSPACE_DIR/project.json\" \\\n > \"$LIBTMUX_WORKSPACE_DIR/receipt.json\"\n```\n\nThe receipt uses [`libtmux.workspace-receipt/1`](../json/libtmux_json.mli).\nOn success, `status` is\n`succeeded`; `failed`, `uncertain` and `skipped` are empty. Each creation records\nthe IDs returned by tmux. Check the resulting windows independently:\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n list-windows \\\n -t '=ocaml-project' \\\n -F '#{window_name}:#{window_panes}'\n```\n\nExpected output is `editor:2` followed by `logs:1`.\n\nRemove only the sessions this walkthrough created:\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n kill-session \\\n -t '=ocaml-project'\n```\n\n```console\n$ env -u TMUX -u TMUX_PANE tmux \\\n -S \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n kill-session \\\n -t '=seed'\n```\n\n```console\n$ rm -f -- \"$LIBTMUX_WORKSPACE_DIR/server\" \\\n \"$LIBTMUX_WORKSPACE_DIR/project.json\" \\\n \"$LIBTMUX_WORKSPACE_DIR/receipt.json\"\n```\n\n```console\n$ rmdir \"$LIBTMUX_WORKSPACE_DIR\"\n```\n\n\n\nWithout `--require-existing`, `apply` can start a missing endpoint by creating\nthe requested session. That server uses the normal tmux configuration. Closing\nthe CLI's client leaves the server running; its appearance does not grant\ndaemon ownership. `plan` on a missing endpoint checks the local tmux version\nand returns a bootstrap plan without creating the socket.\n\n## Collisions and recovery\n\nAn existing session name fails with exit 4 by default. `--append` adds new\nwindows to that session and rejects window-name collisions. Append never\nchanges the existing session's options or environment; omit those session\nsettings from an append document. It preserves existing panes.\n\nUse `--json` on `check` or `plan` to obtain `document_digest`, then pass that\nvalue through `--expect-document` on apply. A changed document fails before\nendpoint I/O. The digest does not lock tmux state. Each apply builds and\nrechecks its own plan on the current connection generation.\n\nOn failure or SIGINT, inspect the receipt before deciding what to do next.\nDefault compensation kills only panes whose creation the journal proved, in\nreverse order. A foreign pane moved into a new window remains. `--keep-partial`\nretains proven creations instead. Cleanup failures and creations whose IDs\ncould not be bound remain explicit. Never rerun an uncertain mutation solely\nbecause its caller was interrupted.\n\nThe [retained-operation example](recovery.md) demonstrates waiter recovery.\nThe [native workspace example](workspace-recovery.md) interrupts an apply,\ninspects its journal after client cleanup and verifies compensation. Read the\navailable journal, identify proven effects, then choose another explicit action.\nA saved JSON receipt describes observations; it is not an executable target or\na transaction to replay.\n\nThe execution journal is retained in process memory. `await` initiates steps\nonly once for a particular execution handle; a new handle or CLI invocation\nstarts a new execution. Operation IDs correlate receipts and do not suppress\nduplicates. Neither a retained handle nor an exported receipt is a durable\nwrite-ahead log. Compensation cannot undo files, network requests or other\neffects of the programs launched in panes.\n\n| Exit | Meaning |\n| --- | --- |\n| 0 | Validation, planning or apply succeeded |\n| 2 | Invalid arguments or document |\n| 3 | Required endpoint missing |\n| 4 | Collision, changed document or stale plan |\n| 5 | Failed, partial or uncertain apply; inspect the receipt |\n| 6 | Transport, capability or result-delivery failure |\n| 130 | SIGINT; the available journal is emitted within the cleanup bound |\n\nSIGINT does not undo admitted commands. Receipt output is bounded; a blocked or\nbroken stdout cannot produce a successful exit. Forced process termination\ncannot promise a delivered receipt. Expected failures are distinct from Eio\ncancellation in the native API, which propagates cancellation to the caller.\n\n## Bounds and native callers\n\nDocuments use UTF-8 JSON with a 64 KiB input bound and depth limit 32. Unknown\nand duplicate properties fail. Configurations allow at most 64 windows and 256\npanes; a plan allows at most 4096 actions. Plans and receipts have a 4 MiB output\nbound. Plans omit environment values, option values and startup text. They can\nstill contain command arguments and paths; treat them as application data.\n\nFor native code, use `Libtmux_json.Workspace.of_string`,\n`Libtmux_workspace.Plan.make`, and the backend's `Workspace.submit` or\n`Workspace.submit_bootstrap`. `inspect` reads the retained journal locally;\n`await` performs I/O. The application owns the Eio switch and scheduler.\nThe [native bootstrap walkthrough](bootstrap.md) starts one private session\nwithout a JSON dependency and captures its graph through the resulting client.\nSee the [API reference](api.md), [control outcomes](control.md) and\n[compatibility](compatibility.md).\n" }, { "path": "docs/workspace-recovery.md", diff --git a/site/src/data/tmux-usage/ocaml.json b/site/src/data/tmux-usage/ocaml.json index 58bb35084..5a2d74a97 100644 --- a/site/src/data/tmux-usage/ocaml.json +++ b/site/src/data/tmux-usage/ocaml.json @@ -94,7 +94,7 @@ ], "port": "ocaml", "repo": "libtmux/libtmux-ocaml", - "revision": "205dfda49742592b479247049d186956e4a4cfe9", + "revision": "ca4b6c0cb8ccccfe54d93ec67067070a9d33aeb9", "schemaVersion": 1, "symbols": { "Libtmux_eio.Client.break_pane": [ @@ -906,7 +906,7 @@ { "command": "display-message", "evidence": [ - "unix/streaming.ml:374", + "unix/streaming.ml:402", "eio/libtmux_eio.ml:368" ], "scope": null @@ -914,7 +914,7 @@ { "command": "refresh-client", "evidence": [ - "unix/streaming.ml:390", + "unix/streaming.ml:418", "eio/libtmux_eio.ml:368" ], "scope": null, @@ -1849,7 +1849,7 @@ { "command": "display-message", "evidence": [ - "unix/streaming.ml:374", + "unix/streaming.ml:402", "unix/libtmux_unix.ml:106" ], "scope": null @@ -1857,7 +1857,7 @@ { "command": "refresh-client", "evidence": [ - "unix/streaming.ml:390", + "unix/streaming.ml:418", "unix/libtmux_unix.ml:106" ], "scope": null, diff --git a/site/test/port-examples-index.test.ts b/site/test/port-examples-index.test.ts index 9fbf1b057..9e32a3bc0 100644 --- a/site/test/port-examples-index.test.ts +++ b/site/test/port-examples-index.test.ts @@ -15,7 +15,7 @@ const INDEXES = [ { path: 'lisp/examples/index.md', repo: 'libtmux-lisp', revision: lispModel.revision, programs: 6 + 4 }, { path: 'clojure/examples.md', repo: 'libtmux-java', revision: clojureModel.revision, programs: 13 }, { path: 'haskell/examples/index.md', repo: 'libtmux-haskell', revision: haskellModel.revision, programs: 6 }, - { path: 'ocaml/examples/index.md', repo: 'libtmux-ocaml', revision: ocamlModel.revision, programs: 20 }, + { path: 'ocaml/examples/index.md', repo: 'libtmux-ocaml', revision: ocamlModel.revision, programs: 22 }, ] it.each(INDEXES)('lists $programs source files of $repo at the model revision', ({ path, repo, revision, programs }) => { From dc87fa92ecab9be89df3f2811851aadf813001f2 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 10:46:41 -0600 Subject: [PATCH 08/13] lisp(chore[pin]) Pin Common Lisp to the client class capability directory why: The Common Lisp reference page cannot show the "What is on here" capability directory until the model carries the prose it is built from, and the client class cannot list its operations as members until the model is regenerated with the reparenting the extractor now applies. libtmux-lisp PR #10 adds the directory to the client class docstring, and the committed model, guide cache and manifest still described the pre-PR master e6f319c42. The pin is the PR head, which merges into master with a merge commit, so the revision stays reachable after the merge. what: - Pin Common Lisp to libtmux/libtmux-lisp@a29c6b96e and regenerate its model, sidebar and path data (exported with SBCL 2.6.10 and ASDF 3.3.7, the runtime recorded in the previous model, from a clean checkout with the locked dependencies), tmux usage, guide cache, manifest packages and mention index with the repository's generators - Adopt the source change between the pins: the client class docstring gains the capability directory, and the 86 client-first functions now have the client class as their parent, which is the only other model difference besides line numbers - Keep every reviewed tmux usage claim: no source file under src/ moved a cited line, so only the usage file's revision binding changes - Take the rewritten README and reader guides into the guide cache: the README gains linked API sections and the guides break their paragraphs into bullets - Refresh the workspace example cached for the landing page at the model revision: workspace.lisp gained package and explain regions, and the excerpted lines are unchanged - Add the program the repository gained, drive-panes.lisp, to the examples index, link all eleven files at the new revision, and expect seven programs and four support files in the index test - Leave the Core player recording at the revision where it was recorded: re-recording the quickstart is a separate step Source refs: libtmux/libtmux-lisp PR #10 head a29c6b96e1c78501dff5073b538ae3180b0e63e3, previous pin e6f319c4257789cfe39547af001c718975f0a2ef. --- .../content/docs/ports/lisp/examples/index.md | 21 ++- site/src/data/api/lisp.json | 2 +- site/src/data/api/lisp.nav.json | 2 +- site/src/data/api/lisp.paths.json | 2 +- site/src/data/example-sources.json | 6 +- site/src/data/manifest-packages.json | 4 +- site/src/data/mentions.json | 175 ++++++++++++++++++ site/src/data/port-guides/lisp.json | 26 +-- site/src/data/tmux-usage/lisp.json | 2 +- site/test/port-examples-index.test.ts | 2 +- 10 files changed, 209 insertions(+), 33 deletions(-) diff --git a/site/src/content/docs/ports/lisp/examples/index.md b/site/src/content/docs/ports/lisp/examples/index.md index cc9dcea58..f1caf0a8c 100644 --- a/site/src/content/docs/ports/lisp/examples/index.md +++ b/site/src/content/docs/ports/lisp/examples/index.md @@ -9,7 +9,7 @@ sidebar: order: 1 --- -The repository ships six programs under `examples/`. The test runner executes +The repository ships seven programs under `examples/`. The test runner executes each one against a private tmux daemon, and each prints or asserts the result it is meant to show. Run one from a source checkout with the pinned toolchain, for example `mise exec -- tools/lisp.sh examples/managed-daemon.lisp`. The @@ -18,18 +18,19 @@ program up in steps. | Program | What it demonstrates | Guide | | --- | --- | --- | -| [quickstart.lisp](https://github.com/libtmux/libtmux-lisp/blob/e6f319c4257789cfe39547af001c718975f0a2ef/examples/quickstart.lisp) | Split a pane in the `demo` session of a private socket you supply, add a window, send text, capture it and traverse the snapshot. | [Getting started](../guides/getting-started/) | -| [managed-daemon.lisp](https://github.com/libtmux/libtmux-lisp/blob/e6f319c4257789cfe39547af001c718975f0a2ef/examples/managed-daemon.lisp) | Start an isolated daemon, create a session and return pane data after closing the client and daemon. | [Getting started](../guides/getting-started/) | -| [configuration.lisp](https://github.com/libtmux/libtmux-lisp/blob/e6f319c4257789cfe39547af001c718975f0a2ef/examples/configuration.lisp) | Start an isolated daemon, read false and inherited options, inspect a hook and read a hidden environment entry. | Source only | -| [control.lisp](https://github.com/libtmux/libtmux-lisp/blob/e6f319c4257789cfe39547af001c718975f0a2ef/examples/control.lisp) | Own a daemon, queue input over one control connection and read pane output notifications until the expected bytes arrive. The control system refuses an older daemon before it starts; see [Capabilities and limits](../guides/capabilities/). | Source only | -| [workspace.lisp](https://github.com/libtmux/libtmux-lisp/blob/e6f319c4257789cfe39547af001c718975f0a2ef/examples/workspace.lisp) | Describe a topology as native data, create it, rename a shared window and report configuration. `run.lisp` loads it and asserts the result. | [REPL tutorial](../guides/tutorial/) | -| [owned-workspace.lisp](https://github.com/libtmux/libtmux-lisp/blob/e6f319c4257789cfe39547af001c718975f0a2ef/examples/owned-workspace.lisp) | Create an owned workspace, reapply it without changes, reconcile an edit, and end one apply with a bad layout checksum to inspect the stopped work. | [Workspace guide](../workspace/source-guide/) | +| [quickstart.lisp](https://github.com/libtmux/libtmux-lisp/blob/a29c6b96e1c78501dff5073b538ae3180b0e63e3/examples/quickstart.lisp) | Split a pane in the `demo` session of a private socket you supply, add a window, send text, capture it and traverse the snapshot. | [Getting started](../guides/getting-started/) | +| [managed-daemon.lisp](https://github.com/libtmux/libtmux-lisp/blob/a29c6b96e1c78501dff5073b538ae3180b0e63e3/examples/managed-daemon.lisp) | Start an isolated daemon, create a session and return pane data after closing the client and daemon. | [Getting started](../guides/getting-started/) | +| [drive-panes.lisp](https://github.com/libtmux/libtmux-lisp/blob/a29c6b96e1c78501dff5073b538ae3180b0e63e3/examples/drive-panes.lisp) | Start an isolated daemon, split a pane, send it text, capture its screen and resize the window and pane. | [Getting started](../guides/getting-started/) | +| [configuration.lisp](https://github.com/libtmux/libtmux-lisp/blob/a29c6b96e1c78501dff5073b538ae3180b0e63e3/examples/configuration.lisp) | Start an isolated daemon, read false and inherited options, inspect a hook and read a hidden environment entry. | Source only | +| [control.lisp](https://github.com/libtmux/libtmux-lisp/blob/a29c6b96e1c78501dff5073b538ae3180b0e63e3/examples/control.lisp) | Own a daemon, queue input over one control connection and read pane output notifications until the expected bytes arrive. The control system refuses an older daemon before it starts; see [Capabilities and limits](../guides/capabilities/). | Source only | +| [workspace.lisp](https://github.com/libtmux/libtmux-lisp/blob/a29c6b96e1c78501dff5073b538ae3180b0e63e3/examples/workspace.lisp) | Describe a topology as native data, create it, rename a shared window and report configuration. `run.lisp` loads it and asserts the result. | [REPL tutorial](../guides/tutorial/) | +| [owned-workspace.lisp](https://github.com/libtmux/libtmux-lisp/blob/a29c6b96e1c78501dff5073b538ae3180b0e63e3/examples/owned-workspace.lisp) | Create an owned workspace, reapply it without changes, reconcile an edit, and end one apply with a bad layout checksum to inspect the stopped work. | [Workspace guide](../workspace/source-guide/) | ## Support files -- [run.lisp](https://github.com/libtmux/libtmux-lisp/blob/e6f319c4257789cfe39547af001c718975f0a2ef/examples/run.lisp) loads `workspace.lisp` against a caller-supplied socket and +- [run.lisp](https://github.com/libtmux/libtmux-lisp/blob/a29c6b96e1c78501dff5073b538ae3180b0e63e3/examples/run.lisp) loads `workspace.lisp` against a caller-supplied socket and asserts the graph it creates. -- [worker.sh](https://github.com/libtmux/libtmux-lisp/blob/e6f319c4257789cfe39547af001c718975f0a2ef/examples/worker.sh) is the small application the REPL tutorial's pane runs: it +- [worker.sh](https://github.com/libtmux/libtmux-lisp/blob/a29c6b96e1c78501dff5073b538ae3180b0e63e3/examples/worker.sh) is the small application the REPL tutorial's pane runs: it signals that it initialized, consumes one request and prints a receipt. -- [workspace.json](https://github.com/libtmux/libtmux-lisp/blob/e6f319c4257789cfe39547af001c718975f0a2ef/examples/workspace.json) and [owned-workspace.json](https://github.com/libtmux/libtmux-lisp/blob/e6f319c4257789cfe39547af001c718975f0a2ef/examples/owned-workspace.json) are the JSON +- [workspace.json](https://github.com/libtmux/libtmux-lisp/blob/a29c6b96e1c78501dff5073b538ae3180b0e63e3/examples/workspace.json) and [owned-workspace.json](https://github.com/libtmux/libtmux-lisp/blob/a29c6b96e1c78501dff5073b538ae3180b0e63e3/examples/owned-workspace.json) are the JSON documents the workspace command validates and plans. diff --git a/site/src/data/api/lisp.json b/site/src/data/api/lisp.json index 2f6e07194..efccb54a6 100644 --- a/site/src/data/api/lisp.json +++ b/site/src/data/api/lisp.json @@ -1 +1 @@ -{"port":"lisp","repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractor":"libtmux.documentation/1","nativeProvenance":{"files":[{"path":"libtmux.asd","sha256":"05f54488a04811aef300afd0fa3afe826ce7e00ea4f1ec45fc0bd461971ed2fd"},{"path":"src/backend-sbcl.lisp","sha256":"50cf025093f8a0cc1d9449ea5885736f1131c64f485d1ad903be323129436ab7"},{"path":"src/buffers.lisp","sha256":"9780f7d7b752f2d5060c17b46a4da842bcc78e89d698715465d796c35d8b6280"},{"path":"src/capture.lisp","sha256":"11395529a9d163843f56a8a66c5962762f773fe95ee36e4f291ce3ffab07d4e9"},{"path":"src/client-operations.lisp","sha256":"d7016fc6fbd208129ba2a537237cb3466a7663db8f5bbae864c874eaa70fce86"},{"path":"src/client.lisp","sha256":"cc131e1ca096ba22135a058936b6a6475d1f87d581834f7d10d02b8c4eb32e00"},{"path":"src/command-encoding.lisp","sha256":"9f318f1cd9b3305f1344f7e9824b73356e296aac1ca724d4521071649c12b0d4"},{"path":"src/command-policy.lisp","sha256":"2858a47e7dfae75dd60f6878c1aeb2ad2539570ad2a76a1f2cbee8e303ec719d"},{"path":"src/conditions.lisp","sha256":"da64f16c565705503948e138f84900cfda248c141665d62661c9e12512c6c11b"},{"path":"src/configuration-acquisition.lisp","sha256":"34f586139992b3397c69ef8e3a06120ab902431b4e00f0f89156253aca307328"},{"path":"src/configuration-codec.lisp","sha256":"cfdeabfc6f0647b3b64f3b24bbbd55e06b11f983cc94033ccf549f8e615c8c91"},{"path":"src/configuration-operations.lisp","sha256":"d0fa012efd91fab9ebd8fa3b54e39bf31ec785ff0abac88a055dac706d44e8cd"},{"path":"src/configuration-options.lisp","sha256":"2751fa1db4d8e65943e08b6634940d280c951ff3cccb9e4a93f8e08ccae439c2"},{"path":"src/configuration-registry.lisp","sha256":"309891a4eef1ab0db3ea91d549e263dbdbe83de8623e107a1d73d9b0074a2da5"},{"path":"src/control-codec.lisp","sha256":"59ef8cb67a9c717dd78bff05971a7844856829b77830b462b1a216c6580deba6"},{"path":"src/control-peer.lisp","sha256":"f5eeba9ab181eb3b323f2e33aaaff6be080a14bdb82403d977c32341b7d04036"},{"path":"src/control-reconnect.lisp","sha256":"50d4a8cb3463ad4061aacb36bc26d8c4cbbedc223100b34ba3b41f81b94f00d7"},{"path":"src/control.lisp","sha256":"1c41cd13562cd46a4884747322d1e72638a2292769f93ddf8b832169c5d41c32"},{"path":"src/creation.lisp","sha256":"8a5b3d3a4cd9083d307b9de720f3b5fe1b810140b75fff73f64e16b3e30b43f5"},{"path":"src/daemon-sbcl.lisp","sha256":"8caed4b4b396ad305e855cd2b3698a301fe70055eba8003049e1c48983993ec6"},{"path":"src/daemon.lisp","sha256":"0e8a46340c2cf4dd1cfd0fa32bcf1f5fedf2841d4be8cb9885827ada82d932ac"},{"path":"src/dispatch.lisp","sha256":"ca5ce6c7fb77b23b0e8139314d25c6d9084566016fec04055959beafa57747fd"},{"path":"src/geometry.lisp","sha256":"e42bd9db5c6622bb0be8af9f3b3d7baa2b7ca96d515320033614ea54010dd2ea"},{"path":"src/graph.lisp","sha256":"834525d51cc9a27a9825a728628a1038aa0c7644dfb21131c3d4ca2ebdb12371"},{"path":"src/json.lisp","sha256":"7e150f6e444b1442038876d571e39b4ecb044b4628293f34e1079712ce60e022"},{"path":"src/key-bindings.lisp","sha256":"1f31bd4c35814dc4a9148238bc11966cf16a09bc9adfce4a40c8f20fcd3da9c9"},{"path":"src/model.lisp","sha256":"023bedb185e21a055791154471238c2b8d683a18518a22e331424ff253240400"},{"path":"src/operations.lisp","sha256":"b43e9ed34c077b8d7923f1bc1dd16ac932c5d7ee4c30f89dc724ca5e593c3164"},{"path":"src/options-catalog.lisp","sha256":"533a6d516533b8f68cc19fdef4e1ffd65d4dc246531c42aa7786def597180608"},{"path":"src/package.lisp","sha256":"e85f5703ba781e6a14b7383f085b3a67f668f811cb85ddbd1755d40f52bf640f"},{"path":"src/placement.lisp","sha256":"02448dfd39fd8efbb5c71a5c2756098990f614538232f7697e934d333ca7b1b0"},{"path":"src/process-operations.lisp","sha256":"aeb98fb595e892efc16843967115d011e30555a46f9412119e1670ddc8f3a806"},{"path":"src/process-sbcl.lisp","sha256":"38086686cdc72a1d04540b168af2f6b9f230451d65c4f6c58af8e1900268325b"},{"path":"src/query-source.lisp","sha256":"74df790beb76b11e6d10a9a99b37be94d6082a61ee641d7925fa6ca5a699cdfe"},{"path":"src/query.lisp","sha256":"c367cba6f86b3fa955537f7f65b696383b6a78865609c33c1e333c963f8aaa02"},{"path":"src/records.lisp","sha256":"8385bd722ec57035dd314ff26cf3fb341f3139ce6bd6dd573aa4c58563734d63"},{"path":"src/regex.lisp","sha256":"4c7e0c014b5da0e11142e6b00df8fc9726cb6babb96497492216980e4f2f13f0"},{"path":"src/registry.lisp","sha256":"75c2c5e2f7ee7f76ae05586fadfbb036dff6b2d648452e59105ac0881c3f419f"},{"path":"src/selection.lisp","sha256":"09ea8529a693d18536c70a2c97ef1b0e7d51ba99251baf5ca38582c1fab16741"},{"path":"src/server-operations.lisp","sha256":"799b14c63b2ee3a08c1afb78c43dccc5d4e027666d874c40a38f824bdbcbd8c0"},{"path":"src/terminal-operations.lisp","sha256":"4014261a3de439b8390560500d753bb9f41cd33e51493f33081a531b6f0771ac"},{"path":"src/termination.lisp","sha256":"51eb12f82b8afe1ceeb482d41c009eb5a992aec722170d5ed6c64a5d1faf9535"},{"path":"src/transport.lisp","sha256":"150dd6b0377b72d6d39de9132fd1d6b6a8564226871c753bddb867b7a9d34d36"},{"path":"src/witness-sbcl.lisp","sha256":"a36ecdb0918adfc8a7df66dad9c30f5be1efb75df9b0e9c16d1f1727b148ecb3"},{"path":"src/workspace-api.lisp","sha256":"ec61436c00a55e5bc69c962188a0161c74cc1a849b7f205bbb5a760fdf3b0bd2"},{"path":"src/workspace-apply.lisp","sha256":"16d0d48d6fec1599f9fe850810da598c1f2479c509ee3a954b89ac67c5e6c260"},{"path":"src/workspace-cli.lisp","sha256":"f553411d6fa8f04b7584dd253bdb9f3351fdd224fc7aa3a8dc71d13ad0970156"},{"path":"src/workspace-geometry.lisp","sha256":"2a6ac72eb7ec1c5cb7bcb7c60aa3100b45db60bbcab23281bd5e6dbba9831ea7"},{"path":"src/workspace-inspection.lisp","sha256":"9c2847872dd65d1faf878c44019c1c03250f44f6640dccc753e1ae4de2a3e827"},{"path":"src/workspace-owned.lisp","sha256":"2c8b5fa3a5d36708d140a4b41c4d6c7903853cfd7b31700aa6efdf82a846eebc"},{"path":"src/workspace-plan.lisp","sha256":"7e384ce5e63962e268c43ae430ad7afab585f0ae19310e334ca5f2f13f870948"},{"path":"src/workspace-state.lisp","sha256":"3db4eb6f0de97074a92f4f7497a8ded801a3cee875db4c7c584b8011bd7af775"},{"path":"src/workspace-writer.lisp","sha256":"a1ebeb5f79e32e66055792f0768ba41e37b05052fcb0f9eb730594ef9911f1e1"},{"path":"src/workspace.lisp","sha256":"a315a15ad3753ae01745a05fdbdf1c30f8961d3fc24dd010d776ec864de27ce8"},{"path":"tools/documentation.lisp","sha256":"1f68cd1990e8ddaa20b73f32a6e858f2879f47fc71af8958f8df36a65220493b"}],"exporter":{"name":"libtmux.documentation","version":1,"revision":"f487e91f2635f4949cfbbaf08d47a3da70539858","dirty":false,"runtime":{"implementation":"SBCL","implementationVersion":"2.6.10","asdfVersion":"3.3.7"},"library":{"version":"0.1.0"}}},"sources":[{"product":"core","package":"libtmux","repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef","version":"0.1.0"},{"product":"core","package":"libtmux/control","repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef","version":"0.1.0"},{"product":"core","package":"libtmux/json","repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef","version":"0.1.0"},{"product":"core","package":"libtmux/query","repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef","version":"0.1.0"},{"product":"workspace","package":"libtmux/workspace","repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef","version":"0.1.0"},{"product":"workspace","package":"libtmux/workspace/cli","repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef","version":"0.1.0"}],"symbols":[{"id":"libtmux","publicId":"libtmux","qualifiedName":"libtmux","namespace":"","name":"libtmux","kind":"module","modifiers":[],"signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Native Common Lisp captured tmux graphs and explicit external operations.\nOPEN-CLIENT/WITH-CLIENT establish connection scopes without starting a daemon.\nFETCH-SNAPSHOT acquires sessions, physical windows, panes, window links and\nattached clients. Captured getters, traversal and ENTITY-DATA are local and\nremain usable after closure; captured strings and containers are owned copies. REFRESH returns\na new observation. Named mutators take CLIENT first and return COMMAND-OUTCOME;\nOUTCOME-VALUE and FIELD-VALUE return value and presence as two values.\nOperations are synchronous, bounded and cancellable, with one active operation\nper client. Typed LIBTMUX-ERROR conditions retain diagnostic outcome and cause.\nClosing a client releases owned resources and leaves the daemon alive.\nSTART-DAEMON/WITH-DAEMON separately own a new empty-config foreground daemon;\nSTOP-DAEMON releases that owner, with incomplete cleanup retained for retry.\nSee docs/index.md for the tutorial, API reference and current capability limits."},"source":{"file":"src/package.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux"},{"id":"libtmux:active-p","publicId":"libtmux:active-p","qualifiedName":"libtmux:active-p","namespace":"libtmux","name":"active-p","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(active-p entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:active-p\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(active-p (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"},{"identity":"[\"libtmux:active-p\",[],[\"libtmux:window-link\"]]","methodKind":"function","raw":"(active-p (entity libtmux:window-link))","params":[{"name":"entity","type":"libtmux:window-link"}],"label":"Primary method: libtmux:window-link"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return captured active state and presence, without I/O. False is NIL,T."},"source":{"file":"src/model.lisp","line":176,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-active-p"},{"id":"libtmux:attached-client","publicId":"libtmux:attached-client","qualifiedName":"libtmux:attached-client","namespace":"libtmux","name":"attached-client","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"One captured attached-tmux-client row; identity is observation-scoped."},"source":{"file":"src/model.lisp","line":30,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:entity"],"slug":"libtmux-attached-client"},{"id":"libtmux:bind-key","publicId":"libtmux:bind-key","qualifiedName":"libtmux:bind-key","namespace":"libtmux","name":"bind-key","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(bind-key client key &key (table \"prefix\") repeat note (command nil command-p) (command-source nil source-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"key"},{"name":"table","default":"\"prefix\"","optional":true,"keywordOnly":true},{"name":"repeat","optional":true,"keywordOnly":true},{"name":"note","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"command-source","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Replace TABLE's KEY binding and return a COMMAND-OUTCOME.\nTABLE defaults to prefix. KEY, TABLE and optional NOTE are literal strings.\nREPEAT enables native key repetition. Supply exactly one of COMMAND argv or\nCOMMAND-SOURCE, explicit tmux parser source. COMMAND argv owns each argument\nand preserves its token boundary; its first token must not contain =.","body":"Tmux parses the binding immediately. Assignments/directives in COMMAND-SOURCE\ncan change daemon environment before a later parse error. Aliases expand during\nbinding in both forms and can also introduce parser side effects. Failure is\nnot rollback. Ordinary stored command nodes run later on a key event with its\nnative target context; this does not retain captured-handle authority.\n\nSuccess acknowledges the binding and its hooks, not later key execution.\nBlocks under shared preflight/dispatch limits, acquires no observation and\nnever retries. Native key/source errors and uncertain outcomes remain inspectable.\n\nSee also: `libtmux:error-outcome`, `libtmux:list-keys`, `libtmux:send-keys`, `libtmux:unbind-key`.","seeAlso":["libtmux:error-outcome","libtmux:list-keys","libtmux:send-keys","libtmux:unbind-key"]},"source":{"file":"src/key-bindings.lisp","line":67,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-bind-key"},{"id":"libtmux:break-pane","publicId":"libtmux:break-pane","qualifiedName":"libtmux:break-pane","namespace":"libtmux","name":"break-pane","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(break-pane client pane source-link session index &key name (detached t) (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"source-link"},{"name":"session"},{"name":"index"},{"name":"name","optional":true,"keywordOnly":true},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Break PANE from SOURCE-LINK into SESSION's free INDEX; return an outcome.\nSOURCE-LINK fixes the session context when breaking the window's only pane;\ntmux moves that link instead of creating another physical window. NAME is\nliteral. DETACHED defaults true. OBSERVE supplies the destination window link.\nOn tmux 3.7, a new named window requires a following RENAME-WINDOW in the same\nguarded request; its configured hooks can run. Failure can leave the pane moved.\nThe pane keeps its identity. Signals INVALID-ARGUMENT, STALE-TARGET or an\noperational condition. Occupied indexes are never overwritten."},"source":{"file":"src/placement.lisp","line":123,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-break-pane"},{"id":"libtmux:cancel","publicId":"libtmux:cancel","qualifiedName":"libtmux:cancel","namespace":"libtmux","name":"cancel","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(cancel token)","params":[{"name":"token"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Cancel registered operations and return true only for the first request.\nCancellation wakes each active owner. It does not wait for completion or undo\na mutation. Inspect the operation's outcome and dispatch phase."},"source":{"file":"src/transport.lisp","line":87,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-cancel"},{"id":"libtmux:cancellation-token","publicId":"libtmux:cancellation-token","qualifiedName":"libtmux:cancellation-token","namespace":"libtmux","name":"cancellation-token","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"One-way cancellation state; idle tokens own no OS descriptors."},"source":{"file":"src/transport.lisp","line":68,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-cancellation-token"},{"id":"libtmux:cancelled-p","publicId":"libtmux:cancelled-p","qualifiedName":"libtmux:cancelled-p","namespace":"libtmux","name":"cancelled-p","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(cancelled-p token)","params":[{"name":"token"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return whether TOKEN has been cancelled, without external I/O."},"source":{"file":"src/transport.lisp","line":81,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-cancelled-p"},{"id":"libtmux:capture-pane","publicId":"libtmux:capture-pane","qualifiedName":"libtmux:capture-pane","namespace":"libtmux","name":"capture-pane","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(capture-pane client pane &rest options)","params":[{"name":"client"},{"name":"pane"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Read PANE now; return strict UTF-8 text and the diagnostic command outcome.\nPreserve whitespace and trailing lines.\nOPTIONS are the CAPTURE-PANE-BYTES options. Invalid UTF-8 signals DECODING-ERROR;\ncall CAPTURE-PANE-BYTES when byte preservation is required."},"source":{"file":"src/operations.lisp","line":74,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-capture-pane"},{"id":"libtmux:capture-pane-bytes","publicId":"libtmux:capture-pane-bytes","qualifiedName":"libtmux:capture-pane-bytes","namespace":"libtmux","name":"capture-pane-bytes","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(capture-pane-bytes client pane &key start end join-lines escape-sequences escape-controls alternate pending-output cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"start","optional":true,"keywordOnly":true},{"name":"end","optional":true,"keywordOnly":true},{"name":"join-lines","optional":true,"keywordOnly":true},{"name":"escape-sequences","optional":true,"keywordOnly":true},{"name":"escape-controls","optional":true,"keywordOnly":true},{"name":"alternate","optional":true,"keywordOnly":true},{"name":"pending-output","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Read PANE now; return owned output octets and the diagnostic command outcome.\nSTART/END accept signed line numbers or :ALL for the corresponding history edge.\nJOIN-LINES joins wrapped rows; ESCAPE-SEQUENCES retains terminal styles;\nESCAPE-CONTROLS asks tmux to render controls as octal; ALTERNATE selects its\nalternate screen; PENDING-OUTPUT requests tmux's pending input bytes. Tmux owns\nthese capture modes and may reject unavailable combinations. Does not decode or\ntrim bytes. Signals STALE-TARGET or an operational condition with its outcome."},"source":{"file":"src/operations.lisp","line":50,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-capture-pane-bytes"},{"id":"libtmux:cleanup-failed","publicId":"libtmux:cleanup-failed","qualifiedName":"libtmux:cleanup-failed","namespace":"libtmux","name":"cleanup-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Owned resources could not be released within the cleanup bound."},"source":{"file":"src/conditions.lisp","line":72,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-cleanup-failed"},{"id":"libtmux:clear-history","publicId":"libtmux:clear-history","qualifiedName":"libtmux:clear-history","namespace":"libtmux","name":"clear-history","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(clear-history client pane &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Clear PANE's retained tmux history; return a COMMAND-OUTCOME.\nCaptured observations remain unchanged. This does not promise to clear the\napplication's current screen. Signals STALE-TARGET or an operational condition."},"source":{"file":"src/terminal-operations.lisp","line":44,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-clear-history"},{"id":"libtmux:client","publicId":"libtmux:client","qualifiedName":"libtmux:client","namespace":"libtmux","name":"client","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A connection scope with one external-operation lease.\nClosing cancels owned work and leaves the tmux daemon alive. Captured data may\noutlive the client. Public operations never expose its mutable storage."},"source":{"file":"src/client.lisp","line":51,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-client"},{"id":"libtmux:client-busy","publicId":"libtmux:client-busy","qualifiedName":"libtmux:client-busy","namespace":"libtmux","name":"client-busy","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Another external operation already owns the client's lease."},"source":{"file":"src/conditions.lisp","line":70,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-client-busy"},{"id":"libtmux:client-cleanup-failures","publicId":"libtmux:client-cleanup-failures","qualifiedName":"libtmux:client-cleanup-failures","namespace":"libtmux","name":"client-cleanup-failures","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(client-cleanup-failures client)","params":[{"name":"client"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of secondary cleanup conditions, newest first. No I/O."},"source":{"file":"src/client.lisp","line":86,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-client-cleanup-failures"},{"id":"libtmux:client-closed","publicId":"libtmux:client-closed","qualifiedName":"libtmux:client-closed","namespace":"libtmux","name":"client-closed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"An external operation was attempted on a closing/closed client."},"source":{"file":"src/conditions.lisp","line":68,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-client-closed"},{"id":"libtmux:client-open-p","publicId":"libtmux:client-open-p","qualifiedName":"libtmux:client-open-p","namespace":"libtmux","name":"client-open-p","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(client-open-p client)","params":[{"name":"client"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return whether CLIENT's lifecycle is open; no tmux I/O.\nAn active operation may still cause CLIENT-BUSY when new work is attempted."},"source":{"file":"src/client.lisp","line":80,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-client-open-p"},{"id":"libtmux:clients","publicId":"libtmux:clients","qualifiedName":"libtmux:clients","namespace":"libtmux","name":"clients","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(clients observation)","params":[{"name":"observation"}]},{"identity":"[\"libtmux:clients\",[],[\"libtmux:session/type\"]]","methodKind":"function","raw":"(clients (session libtmux:session))","params":[{"name":"session","type":"libtmux:session"}],"label":"Primary method: libtmux:session"},{"identity":"[\"libtmux:clients\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(clients (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of attached-client observations, without I/O.\nPreserve listing order and multiplicity, including repeated target names."},"source":{"file":"src/model.lisp","line":58,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-clients"},{"id":"libtmux:close-client","publicId":"libtmux:close-client","qualifiedName":"libtmux:close-client","namespace":"libtmux","name":"close-client","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(close-client client)","params":[{"name":"client"}]},{"identity":"[\"libtmux:close-client\",[],[\"libtmux:client\"]]","methodKind":"function","raw":"(close-client (client libtmux:client))","params":[{"name":"client","type":"libtmux:client"}],"label":"Primary method: libtmux:client"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Reject new work, cancel active work and release owned resources.\nThe operation is idempotent and does not kill the daemon. A bounded teardown\nfailure signals CLEANUP-FAILED; the active owner still retains cleanup duty."},"source":{"file":"src/client.lisp","line":97,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-close-client"},{"id":"libtmux:command-cancelled","publicId":"libtmux:command-cancelled","qualifiedName":"libtmux:command-cancelled","namespace":"libtmux","name":"command-cancelled","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Cancellation stopped an operation; inspect dispatch phase."},"source":{"file":"src/conditions.lisp","line":79,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:outcome-unknown"],"slug":"libtmux-command-cancelled"},{"id":"libtmux:command-failed","publicId":"libtmux:command-failed","qualifiedName":"libtmux:command-failed","namespace":"libtmux","name":"command-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The command failed; ERROR-OUTCOME retains diagnostics."},"source":{"file":"src/conditions.lisp","line":75,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-command-failed"},{"id":"libtmux:command-outcome","publicId":"libtmux:command-outcome","qualifiedName":"libtmux:command-outcome","namespace":"libtmux","name":"command-outcome","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A retained command result; byte and argument readers copy storage.\nSTATUS is :SUCCEEDED, :FAILED, :UNKNOWN or :NOT-DISPATCHED. PHASE is separate\ndispatch evidence. An observation error does not erase a successful mutation."},"source":{"file":"src/transport.lisp","line":28,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-command-outcome"},{"id":"libtmux:configuration-error-name","publicId":"libtmux:configuration-error-name","qualifiedName":"libtmux:configuration-error-name","namespace":"libtmux","name":"configuration-error-name","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(configuration-error-name condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the owned active name at failure, or NIL before name resolution. No I/O.","body":"See also: `libtmux:configuration-error-scope`, `libtmux:configuration-read-failed`.","seeAlso":["libtmux:configuration-error-scope","libtmux:configuration-read-failed"]},"source":{"file":"src/configuration-acquisition.lisp","line":284,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-configuration-error-name"},{"id":"libtmux:configuration-error-scope","publicId":"libtmux:configuration-error-scope","qualifiedName":"libtmux:configuration-error-scope","namespace":"libtmux","name":"configuration-error-scope","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(configuration-error-scope condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the active native table scope at acquisition failure. No I/O.\nThis may be an ancestor table used for inherited lookup.","body":"See also: `libtmux:configuration-error-name`, `libtmux:configuration-read-failed`.","seeAlso":["libtmux:configuration-error-name","libtmux:configuration-read-failed"]},"source":{"file":"src/configuration-acquisition.lisp","line":289,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-configuration-error-scope"},{"id":"libtmux:configuration-partial-records","publicId":"libtmux:configuration-partial-records","qualifiedName":"libtmux:configuration-partial-records","namespace":"libtmux","name":"configuration-partial-records","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(configuration-partial-records condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return owned copies of records fully resolved before acquisition failed. No I/O.\nInspect CONFIGURATION-READ-OUTCOMES for valid individual observations from a\nfailing or incomplete name. No partial record proves a complete acquisition.","body":"See also: `libtmux:configuration-read-failed`, `libtmux:outcome-value`.","seeAlso":["libtmux:configuration-read-failed","libtmux:outcome-value"]},"source":{"file":"src/configuration-acquisition.lisp","line":295,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-configuration-partial-records"},{"id":"libtmux:configuration-read-failed","publicId":"libtmux:configuration-read-failed","qualifiedName":"libtmux:configuration-read-failed","namespace":"libtmux","name":"configuration-read-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A decoded acquisition failed, retaining prior records and native outcomes.\nERROR-CAUSE identifies the failure. ERROR-OUTCOME retains cause-associated or current\nleaf evidence, possibly NIL before the associated read. Its status can be success\nwhen decoding or diagnostics failed. No transport failure becomes absence.\nNo mutation is retried.","body":"See also: `libtmux:configuration-error-name`, `libtmux:configuration-error-scope`, `libtmux:configuration-partial-records`, `libtmux:configuration-read-outcomes`, `libtmux:error-cause`.","seeAlso":["libtmux:configuration-error-name","libtmux:configuration-error-scope","libtmux:configuration-partial-records","libtmux:configuration-read-outcomes","libtmux:error-cause"]},"source":{"file":"src/configuration-acquisition.lisp","line":273,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:command-failed"],"slug":"libtmux-configuration-read-failed"},{"id":"libtmux:configuration-read-outcomes","publicId":"libtmux:configuration-read-outcomes","qualifiedName":"libtmux:configuration-read-outcomes","namespace":"libtmux","name":"configuration-read-outcomes","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(configuration-read-outcomes condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of all retained read outcomes, in acquisition order.\nOutcome objects retain identity. OUTCOME-VALUE exposes any valid decoded leaf\nobservation, independently of the native outcome's success status. Preflight\nfailures can have no selected read outcome. No I/O.","body":"See also: `libtmux:configuration-partial-records`, `libtmux:error-outcome`, `libtmux:outcome-value`.","seeAlso":["libtmux:configuration-partial-records","libtmux:error-outcome","libtmux:outcome-value"]},"source":{"file":"src/configuration-acquisition.lisp","line":302,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-configuration-read-outcomes"},{"id":"libtmux:copy-mode","publicId":"libtmux:copy-mode","qualifiedName":"libtmux:copy-mode","namespace":"libtmux","name":"copy-mode","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(copy-mode client pane &key exit page-up cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"exit","optional":true,"keywordOnly":true},{"name":"page-up","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Enter PANE's tmux copy mode, or EXIT it; return a COMMAND-OUTCOME.\nPAGE-UP scrolls up on entry and cannot be combined with EXIT. This addresses an\nexisting pane and does not create an interactive terminal frontend. Signals\nSTALE-TARGET or an operational condition."},"source":{"file":"src/terminal-operations.lisp","line":52,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-copy-mode"},{"id":"libtmux:current-command","publicId":"libtmux:current-command","qualifiedName":"libtmux:current-command","namespace":"libtmux","name":"current-command","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(current-command entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:current-command\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(current-command (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return copied captured command text and presence, without I/O."},"source":{"file":"src/model.lisp","line":184,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-current-command"},{"id":"libtmux:current-path","publicId":"libtmux:current-path","qualifiedName":"libtmux:current-path","namespace":"libtmux","name":"current-path","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(current-path entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:current-path\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(current-path (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return copied captured path text and presence, without local pathname conversion."},"source":{"file":"src/model.lisp","line":186,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-current-path"},{"id":"libtmux:daemon","publicId":"libtmux:daemon","qualifiedName":"libtmux:daemon","namespace":"libtmux","name":"daemon","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"An explicitly owned foreground tmux daemon and its supervisor.\nCreate it with START-DAEMON and release it with STOP-DAEMON or WITH-DAEMON.\nOrdinary connection clients are separate resources; closing one leaves this\ndaemon alive. The owner retains failed cleanup work until an explicit retry.","body":"See also: `libtmux:start-daemon`, `libtmux:stop-daemon`, `libtmux:with-daemon`.","seeAlso":["libtmux:start-daemon","libtmux:stop-daemon","libtmux:with-daemon"]},"source":{"file":"src/daemon.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-daemon"},{"id":"libtmux:daemon-cleanup-failed","publicId":"libtmux:daemon-cleanup-failed","qualifiedName":"libtmux:daemon-cleanup-failed","namespace":"libtmux","name":"daemon-cleanup-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Owned daemon cleanup is incomplete and remains retryable.\nERROR-DAEMON retains the owner. Inspect DAEMON-CLEANUP-FAILURES and retry\nSTOP-DAEMON; no replacement daemon is started.","body":"See also: `libtmux:daemon-cleanup-failures`, `libtmux:error-daemon`, `libtmux:stop-daemon`.","seeAlso":["libtmux:daemon-cleanup-failures","libtmux:error-daemon","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":65,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:cleanup-failed"],"slug":"libtmux-daemon-cleanup-failed"},{"id":"libtmux:daemon-cleanup-failures","publicId":"libtmux:daemon-cleanup-failures","qualifiedName":"libtmux:daemon-cleanup-failures","namespace":"libtmux","name":"daemon-cleanup-failures","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(daemon-cleanup-failures daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of retained secondary cleanup conditions. No I/O.\nConditions are shared diagnostics, newest first, bounded to sixteen entries.","body":"See also: `libtmux:daemon-failure`, `libtmux:pending-daemon-cleanups`, `libtmux:stop-daemon`.","seeAlso":["libtmux:daemon-failure","libtmux:pending-daemon-cleanups","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":101,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-daemon-cleanup-failures"},{"id":"libtmux:daemon-failure","publicId":"libtmux:daemon-failure","qualifiedName":"libtmux:daemon-failure","namespace":"libtmux","name":"daemon-failure","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(daemon-failure daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return DAEMON's retained primary failure condition, or NIL. No I/O.\nThis shared diagnostic can describe background failure after startup returned.","body":"See also: `libtmux:daemon-cleanup-failures`, `libtmux:daemon-state`.","seeAlso":["libtmux:daemon-cleanup-failures","libtmux:daemon-state"]},"source":{"file":"src/daemon.lisp","line":94,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-daemon-failure"},{"id":"libtmux:daemon-program","publicId":"libtmux:daemon-program","qualifiedName":"libtmux:daemon-program","namespace":"libtmux","name":"daemon-program","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(daemon-program daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned copy of DAEMON's resolved tmux executable path. No I/O.\nPass it as OPEN-CLIENT's :PROGRAM when connecting through DAEMON-SOCKET-PATH.","body":"See also: `libtmux:daemon-socket-path`, `libtmux:open-client`.","seeAlso":["libtmux:daemon-socket-path","libtmux:open-client"]},"source":{"file":"src/daemon.lisp","line":80,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-daemon-program"},{"id":"libtmux:daemon-socket-path","publicId":"libtmux:daemon-socket-path","qualifiedName":"libtmux:daemon-socket-path","namespace":"libtmux","name":"daemon-socket-path","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(daemon-socket-path daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned copy of DAEMON's private socket path, or NIL before allocation.\nNo I/O. An ordinary client may connect while the owner is READY. Closing that\nclient leaves the daemon alive; STOP-DAEMON releases the daemon itself.","body":"See also: `libtmux:daemon-program`, `libtmux:open-client`, `libtmux:stop-daemon`.","seeAlso":["libtmux:daemon-program","libtmux:open-client","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":86,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-daemon-socket-path"},{"id":"libtmux:daemon-start-failed","publicId":"libtmux:daemon-start-failed","qualifiedName":"libtmux:daemon-start-failed","namespace":"libtmux","name":"daemon-start-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Managed startup failed; ERROR-CAUSE and ERROR-DAEMON retain evidence.\nStartup attempts cleanup before propagating this condition. Incomplete cleanup\nalso remains discoverable through PENDING-DAEMON-CLEANUPS.","body":"See also: `libtmux:error-cause`, `libtmux:error-daemon`, `libtmux:stop-daemon`.","seeAlso":["libtmux:error-cause","libtmux:error-daemon","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":58,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-daemon-start-failed"},{"id":"libtmux:daemon-state","publicId":"libtmux:daemon-state","qualifiedName":"libtmux:daemon-state","namespace":"libtmux","name":"daemon-state","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(daemon-state daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return DAEMON's observed lifecycle state without I/O.\nStates are :STARTING, :READY, :STOPPING, :FAILED and :CLOSED. READY records\ncompleted startup verification, not a promise of future process liveness.","body":"See also: `libtmux:daemon-failure`, `libtmux:stop-daemon`.","seeAlso":["libtmux:daemon-failure","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":72,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-daemon-state"},{"id":"libtmux:dead-p","publicId":"libtmux:dead-p","qualifiedName":"libtmux:dead-p","namespace":"libtmux","name":"dead-p","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(dead-p entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:dead-p\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(dead-p (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return tmux's captured dead flag and presence, without inferring it from PID."},"source":{"file":"src/model.lisp","line":190,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-dead-p"},{"id":"libtmux:deadline-exceeded","publicId":"libtmux:deadline-exceeded","qualifiedName":"libtmux:deadline-exceeded","namespace":"libtmux","name":"deadline-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The command exceeded its absolute deadline."},"source":{"file":"src/conditions.lisp","line":81,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:outcome-unknown"],"slug":"libtmux-deadline-exceeded"},{"id":"libtmux:decoding-error","publicId":"libtmux:decoding-error","qualifiedName":"libtmux:decoding-error","namespace":"libtmux","name":"decoding-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Captured bytes do not satisfy the expected text/record codec."},"source":{"file":"src/conditions.lisp","line":85,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-decoding-error"},{"id":"libtmux:delete-buffer","publicId":"libtmux:delete-buffer","qualifiedName":"libtmux:delete-buffer","namespace":"libtmux","name":"delete-buffer","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(delete-buffer client &key name cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Delete the literal named buffer, or the current top buffer; return an outcome.\nNamed deletion requires a live tmux 3.4+ daemon because 3.3a can delete the top\nbuffer when the supplied name is missing. On 3.3a, an explicit NAME signals\nUNSUPPORTED-CAPABILITY before payload dispatch; omission still deletes the top\nbuffer. A name identifies the buffer at dispatch, not an earlier incarnation.\nSignals an operational condition on failure; never retries an unknown deletion."},"source":{"file":"src/buffers.lisp","line":146,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-delete-buffer"},{"id":"libtmux:detach-client","publicId":"libtmux:detach-client","qualifiedName":"libtmux:detach-client","namespace":"libtmux","name":"detach-client","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(detach-client client target &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"target"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request detachment of captured terminal TARGET; return a COMMAND-OUTCOME.\nCLIENT must own the observation. Success acknowledges the server's request,\nnot frontend process exit or terminal restoration. Returns no replacement.\nBlocks under the supplied limits. The unique name/PID/creation/tty preflight\ncannot exclude replacement between validation and dispatch. Missing or foreign\ntargets signal STALE-TARGET; external failures retain their outcome. Never\nretries, detaches other clients, kills a parent, or starts a shell command.","body":"See also: `libtmux:fetch-clients`, `libtmux:outcome-status`, `libtmux:switch-client`.","seeAlso":["libtmux:fetch-clients","libtmux:outcome-status","libtmux:switch-client"]},"source":{"file":"src/client-operations.lisp","line":65,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-detach-client"},{"id":"libtmux:display-message","publicId":"libtmux:display-message","qualifiedName":"libtmux:display-message","namespace":"libtmux","name":"display-message","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(display-message client message &key target format-p cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"message"},{"name":"target","optional":true,"keywordOnly":true},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Print MESSAGE through tmux; return owned UTF-8 text and a COMMAND-OUTCOME.\nAlways uses the ordinary -p printer, preserving its whitespace and trailing lines.\nNative versions can escape output, so it is not a byte-identical echo. MESSAGE\nis literal by default. FORMAT-P enables tmux format and time expansion;\n#() may start shell jobs but does not wait for their output. Fresh requests can\nprint empty or incomplete job results. The native command client owns those\njobs; its disconnect cleans them up.","body":"TARGET may be a captured session, window, pane or window-link owned by CLIENT.\nUse a window-link for exact session/index context. With no target, tmux selects\nthe context; physical windows and panes also leave their session context to\ntmux. Foreign, replaced or vanished targets signal STALE-TARGET.\n\nThe result includes after-hook printer output; it is not a decoded scalar or\nconfiguration record. Hooks may also have effects. The call blocks under shared\npreflight/dispatch limits, acquires no replacement and never retries. Tmux 3.3a\nliteral fallback limits the escaped intermediate text to 8,191 UTF-8 bytes;\nnewer daemons use native literal printing. Encoded command limits also apply.\nInvalid UTF-8 signals DECODING-ERROR with its outcome; other failures retain\ntheir diagnostic outcome. Local validation signals INVALID-ARGUMENT.\n\nSee also: `libtmux:capture-pane`, `libtmux:error-outcome`, `libtmux:outcome-stdout`, `libtmux:run-command`, `libtmux:set-hook`.","seeAlso":["libtmux:capture-pane","libtmux:error-outcome","libtmux:outcome-stdout","libtmux:run-command","libtmux:set-hook"]},"source":{"file":"src/server-operations.lisp","line":52,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-display-message"},{"id":"libtmux:entity","publicId":"libtmux:entity","qualifiedName":"libtmux:entity","namespace":"libtmux","name":"entity","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"An owned observation from one snapshot; construct through acquisition.\nPrivate slot mutation is unsupported. Refresh returns another observation."},"source":{"file":"src/model.lisp","line":17,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-entity"},{"id":"libtmux:entity-data","publicId":"libtmux:entity-data","qualifiedName":"libtmux:entity-data","namespace":"libtmux","name":"entity-data","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(entity-data entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:entity-data\",[],[\"libtmux:entity\"]]","methodKind":"function","raw":"(entity-data (entity libtmux:entity))","params":[{"name":"entity","type":"libtmux:entity"}],"label":"Primary method: libtmux:entity"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh finite plist of captured fields and provenance.\nRelationships contain identifiers, not operational handles. Absent optional\nfields are omitted; present false values remain in the plist. No tmux I/O."},"source":{"file":"src/model.lisp","line":37,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-entity-data"},{"id":"libtmux:entity-model","publicId":"libtmux:entity-model","qualifiedName":"libtmux:entity-model","namespace":"libtmux","name":"entity-model","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(entity-model entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:entity-model\",[],[\"libtmux:entity\"]]","methodKind":"function","raw":"(entity-model (entity libtmux:entity))","params":[{"name":"entity","type":"libtmux:entity"}],"label":"Primary method: libtmux:entity"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return :SESSION, :WINDOW, :PANE, :WINDOW-LINK or :CLIENT. No I/O.\n:CLIENT denotes an attached tmux client observation, not a connection scope."},"source":{"file":"src/model.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-entity-model"},{"id":"libtmux:error-actual-version","publicId":"libtmux:error-actual-version","qualifiedName":"libtmux:error-actual-version","namespace":"libtmux","name":"error-actual-version","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-actual-version condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned copy of the live daemon release that failed the capability check."},"source":{"file":"src/conditions.lisp","line":57,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-actual-version"},{"id":"libtmux:error-cause","publicId":"libtmux:error-cause","qualifiedName":"libtmux:error-cause","namespace":"libtmux","name":"error-cause","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-cause condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-cause\",[],[\"libtmux:libtmux-error\"]]","methodKind":"function","raw":"(error-cause (condition libtmux:libtmux-error))","params":[{"name":"condition","type":"libtmux:libtmux-error"}],"label":"Primary method: libtmux:libtmux-error"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the original underlying condition, or NIL. No I/O; may be shared."},"source":{"file":"src/conditions.lisp","line":5,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-cause"},{"id":"libtmux:error-client","publicId":"libtmux:error-client","qualifiedName":"libtmux:error-client","namespace":"libtmux","name":"error-client","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-client condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-client\",[],[\"libtmux:libtmux-error\"]]","methodKind":"function","raw":"(error-client (condition libtmux:libtmux-error))","params":[{"name":"condition","type":"libtmux:libtmux-error"}],"label":"Primary method: libtmux:libtmux-error"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the connection client associated with the failure, or NIL.\nA partially opened client may still own cleanup work; retry CLOSE-CLIENT if\ncleanup failed. Reading this slot performs no I/O."},"source":{"file":"src/conditions.lisp","line":10,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-client"},{"id":"libtmux:error-commands","publicId":"libtmux:error-commands","qualifiedName":"libtmux:error-commands","namespace":"libtmux","name":"error-commands","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-commands condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned vector of command spellings implicated in the configuration failure."},"source":{"file":"src/conditions.lisp","line":65,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-commands"},{"id":"libtmux:error-daemon","publicId":"libtmux:error-daemon","qualifiedName":"libtmux:error-daemon","namespace":"libtmux","name":"error-daemon","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-daemon condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-daemon\",[],[\"libtmux:daemon-cleanup-failed\"]]","methodKind":"function","raw":"(error-daemon (condition libtmux:daemon-cleanup-failed))","params":[{"name":"condition","type":"libtmux:daemon-cleanup-failed"}],"label":"Primary method: libtmux:daemon-cleanup-failed"},{"identity":"[\"libtmux:error-daemon\",[],[\"libtmux:daemon-start-failed\"]]","methodKind":"function","raw":"(error-daemon (condition libtmux:daemon-start-failed))","params":[{"name":"condition","type":"libtmux:daemon-start-failed"}],"label":"Primary method: libtmux:daemon-start-failed"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the daemon owner retained by a startup or cleanup failure.\nThe owner may need STOP-DAEMON even when START-DAEMON did not return. No I/O.","body":"See also: `libtmux:daemon-cleanup-failed`, `libtmux:daemon-start-failed`, `libtmux:pending-daemon-cleanups`.","seeAlso":["libtmux:daemon-cleanup-failed","libtmux:daemon-start-failed","libtmux:pending-daemon-cleanups"]},"source":{"file":"src/daemon.lisp","line":53,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-daemon"},{"id":"libtmux:error-feature","publicId":"libtmux:error-feature","qualifiedName":"libtmux:error-feature","namespace":"libtmux","name":"error-feature","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-feature condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-feature\",[],[\"libtmux:unsupported-capability\"]]","methodKind":"function","raw":"(error-feature (condition libtmux:unsupported-capability))","params":[{"name":"condition","type":"libtmux:unsupported-capability"}],"label":"Primary method: libtmux:unsupported-capability"},{"identity":"[\"libtmux:error-feature\",[],[\"libtmux:unsupported-platform\"]]","methodKind":"function","raw":"(error-feature (condition libtmux:unsupported-platform))","params":[{"name":"condition","type":"libtmux:unsupported-platform"}],"label":"Primary method: libtmux:unsupported-platform"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the unsupported capability's keyword identifier. No I/O."},"source":{"file":"src/conditions.lisp","line":14,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-feature"},{"id":"libtmux:error-field","publicId":"libtmux:error-field","qualifiedName":"libtmux:error-field","namespace":"libtmux","name":"error-field","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-field condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-field\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-field (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"},{"identity":"[\"libtmux:error-field\",[],[\"libtmux:field-unavailable\"]]","methodKind":"function","raw":"(error-field (condition libtmux:field-unavailable))","params":[{"name":"condition","type":"libtmux:field-unavailable"}],"label":"Primary method: libtmux:field-unavailable"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the requested field key, including an unregistered key. No I/O.\nAn invalid caller value is retained as supplied; it need not be a keyword."},"source":{"file":"src/conditions.lisp","line":19,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-field"},{"id":"libtmux:error-message","publicId":"libtmux:error-message","qualifiedName":"libtmux:error-message","namespace":"libtmux","name":"error-message","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-message condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-message\",[],[\"libtmux:libtmux-error\"]]","methodKind":"function","raw":"(error-message (condition libtmux:libtmux-error))","params":[{"name":"condition","type":"libtmux:libtmux-error"}],"label":"Primary method: libtmux:libtmux-error"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the failure's diagnostic string. No I/O; treat it as read-only."},"source":{"file":"src/conditions.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-message"},{"id":"libtmux:error-model","publicId":"libtmux:error-model","qualifiedName":"libtmux:error-model","namespace":"libtmux","name":"error-model","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-model condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-model\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-model (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"},{"identity":"[\"libtmux:error-model\",[],[\"libtmux.query:invalid-query-target\"]]","methodKind":"function","raw":"(error-model (condition libtmux.query:invalid-query-target))","params":[{"name":"condition","type":"libtmux.query:invalid-query-target"}],"label":"Primary method: libtmux.query:invalid-query-target"},{"identity":"[\"libtmux:error-model\",[],[\"libtmux:field-unavailable\"]]","methodKind":"function","raw":"(error-model (condition libtmux:field-unavailable))","params":[{"name":"condition","type":"libtmux:field-unavailable"}],"label":"Primary method: libtmux:field-unavailable"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the captured model keyword implicated in a field failure. No I/O."},"source":{"file":"src/conditions.lisp","line":22,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-model"},{"id":"libtmux:error-outcome","publicId":"libtmux:error-outcome","qualifiedName":"libtmux:error-outcome","namespace":"libtmux","name":"error-outcome","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-outcome condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-outcome\",[],[\"libtmux:libtmux-error\"]]","methodKind":"function","raw":"(error-outcome (condition libtmux:libtmux-error))","params":[{"name":"condition","type":"libtmux:libtmux-error"}],"label":"Primary method: libtmux:libtmux-error"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return retained COMMAND-OUTCOME evidence, or NIL before one exists.\nInspect dispatch phase and status before deciding how to recover. No I/O."},"source":{"file":"src/conditions.lisp","line":7,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-outcome"},{"id":"libtmux:error-required-version","publicId":"libtmux:error-required-version","qualifiedName":"libtmux:error-required-version","namespace":"libtmux","name":"error-required-version","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-required-version condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned copy of the capability's minimum tmux release."},"source":{"file":"src/conditions.lisp","line":53,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-required-version"},{"id":"libtmux:error-setting","publicId":"libtmux:error-setting","qualifiedName":"libtmux:error-setting","namespace":"libtmux","name":"error-setting","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-setting condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-setting\",[],[\"libtmux:unsupported-configuration\"]]","methodKind":"function","raw":"(error-setting (condition libtmux:unsupported-configuration))","params":[{"name":"condition","type":"libtmux:unsupported-configuration"}],"label":"Primary method: libtmux:unsupported-configuration"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the daemon setting that violates a named command contract.\nThe captured diagnostic value may be shared; treat it as read-only. No I/O."},"source":{"file":"src/conditions.lisp","line":16,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-setting"},{"id":"libtmux:error-target","publicId":"libtmux:error-target","qualifiedName":"libtmux:error-target","namespace":"libtmux","name":"error-target","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-target condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-target\",[],[\"libtmux:stale-target\"]]","methodKind":"function","raw":"(error-target (condition libtmux:stale-target))","params":[{"name":"condition","type":"libtmux:stale-target"}],"label":"Primary method: libtmux:stale-target"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the captured target associated with a dispatch refusal, or NIL. No I/O."},"source":{"file":"src/conditions.lisp","line":24,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-error-target"},{"id":"libtmux:fetch-clients","publicId":"libtmux:fetch-clients","qualifiedName":"libtmux:fetch-clients","namespace":"libtmux","name":"fetch-clients","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(fetch-clients client &rest options)","params":[{"name":"client"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire a complete snapshot and return every attached-client row. OPTIONS go to FETCH-SNAPSHOT."},"source":{"file":"src/capture.lisp","line":197,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-fetch-clients"},{"id":"libtmux:fetch-panes","publicId":"libtmux:fetch-panes","qualifiedName":"libtmux:fetch-panes","namespace":"libtmux","name":"fetch-panes","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(fetch-panes client &rest options)","params":[{"name":"client"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire a complete snapshot and return physical panes once each. OPTIONS go to FETCH-SNAPSHOT."},"source":{"file":"src/capture.lisp","line":194,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-fetch-panes"},{"id":"libtmux:fetch-sessions","publicId":"libtmux:fetch-sessions","qualifiedName":"libtmux:fetch-sessions","namespace":"libtmux","name":"fetch-sessions","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(fetch-sessions client &rest options)","params":[{"name":"client"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire a complete snapshot and return its fresh session vector. OPTIONS go to FETCH-SNAPSHOT."},"source":{"file":"src/capture.lisp","line":188,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-fetch-sessions"},{"id":"libtmux:fetch-snapshot","publicId":"libtmux:fetch-snapshot","qualifiedName":"libtmux:fetch-snapshot","namespace":"libtmux","name":"fetch-snapshot","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(fetch-snapshot client &key cancel-token (timeout (slot-value client (quote timeout))) (output-limit (slot-value client (quote output-limit))) (row-limit 100000) (entity-limit 100000) (field-limit 1048576))","params":[{"name":"client"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","default":"(slot-value client (quote timeout))","optional":true,"keywordOnly":true},{"name":"output-limit","default":"(slot-value client (quote output-limit))","optional":true,"keywordOnly":true},{"name":"row-limit","default":"100000","optional":true,"keywordOnly":true},{"name":"entity-limit","default":"100000","optional":true,"keywordOnly":true},{"name":"field-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire an eager native graph; all later accessors on it are local.\nTIMEOUT controls one acquisition deadline and OUTPUT-LIMIT caps combined output,\nincluding at most two retries after contradictory observations. Synchronous\nsetup and additional cleanup can extend caller wall time. ROW-LIMIT bounds each listing;\nENTITY-LIMIT bounds the complete graph; FIELD-LIMIT bounds encoded field bytes.\nNo daemon is started. A live daemon with zero sessions yields empty vectors;\nconnection/listing failures remain errors. Closing CLIENT leaves this snapshot\nusable. This is an interval observation, not a transactional snapshot.","body":"See also: `libtmux:error-outcome`, `libtmux:fetch-panes`, `libtmux:provenance`, `libtmux:refresh`.","seeAlso":["libtmux:error-outcome","libtmux:fetch-panes","libtmux:provenance","libtmux:refresh"]},"source":{"file":"src/capture.lisp","line":161,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-fetch-snapshot"},{"id":"libtmux:fetch-windows","publicId":"libtmux:fetch-windows","qualifiedName":"libtmux:fetch-windows","namespace":"libtmux","name":"fetch-windows","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(fetch-windows client &rest options)","params":[{"name":"client"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire a complete snapshot and return physical windows once each. OPTIONS go to FETCH-SNAPSHOT."},"source":{"file":"src/capture.lisp","line":191,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-fetch-windows"},{"id":"libtmux:field-unavailable","publicId":"libtmux:field-unavailable","qualifiedName":"libtmux:field-unavailable","namespace":"libtmux","name":"field-unavailable","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The field is unregistered for this model or its relation is unloaded."},"source":{"file":"src/conditions.lisp","line":91,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-field-unavailable"},{"id":"libtmux:field-value","publicId":"libtmux:field-value","qualifiedName":"libtmux:field-value","namespace":"libtmux","name":"field-value","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(field-value entity field)","params":[{"name":"entity"},{"name":"field"}]},{"identity":"[\"libtmux:field-value\",[],[\"libtmux:entity\",\"common-lisp:t\"]]","methodKind":"function","raw":"(field-value (entity libtmux:entity) (field common-lisp:t))","params":[{"name":"entity","type":"libtmux:entity"},{"name":"field","type":"common-lisp:t"}],"label":"Primary method: libtmux:entity, common-lisp:t"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a captured field and presence as two values, without I/O.\nPresent false is NIL,T; absence is NIL,NIL. Strings and relation containers are\ncopied. Unknown fields and unloaded relations signal FIELD-UNAVAILABLE."},"source":{"file":"src/model.lisp","line":33,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-field-value"},{"id":"libtmux:height","publicId":"libtmux:height","qualifiedName":"libtmux:height","namespace":"libtmux","name":"height","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(height entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:height\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(height (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"},{"identity":"[\"libtmux:height\",[],[\"libtmux:window/type\"]]","methodKind":"function","raw":"(height (entity libtmux:window))","params":[{"name":"entity","type":"libtmux:window"}],"label":"Primary method: libtmux:window"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the positive captured height and presence, without I/O."},"source":{"file":"src/model.lisp","line":180,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-height"},{"id":"libtmux:id","publicId":"libtmux:id","qualifiedName":"libtmux:id","namespace":"libtmux","name":"id","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(id entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:id\",[],[\"libtmux:entity\"]]","methodKind":"function","raw":"(id (entity libtmux:entity))","params":[{"name":"entity","type":"libtmux:entity"}],"label":"Primary method: libtmux:entity"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the captured identity, copying mutable components. No I/O.\nPhysical IDs are strings; a link ID is (session-ID index window-ID). Attached\nclient IDs identify rows within a single observation, not stable daemon clients."},"source":{"file":"src/model.lisp","line":41,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-id"},{"id":"libtmux:incomplete-snapshot","publicId":"libtmux:incomplete-snapshot","qualifiedName":"libtmux:incomplete-snapshot","namespace":"libtmux","name":"incomplete-snapshot","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Captured rows contradict each other or lack required references."},"source":{"file":"src/conditions.lisp","line":88,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-incomplete-snapshot"},{"id":"libtmux:index","publicId":"libtmux:index","qualifiedName":"libtmux:index","namespace":"libtmux","name":"index","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(index entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:index\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(index (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"},{"identity":"[\"libtmux:index\",[],[\"libtmux:window-link\"]]","methodKind":"function","raw":"(index (entity libtmux:window-link))","params":[{"name":"entity","type":"libtmux:window-link"}],"label":"Primary method: libtmux:window-link"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the nonnegative captured index and presence, without I/O."},"source":{"file":"src/model.lisp","line":182,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-index"},{"id":"libtmux:invalid-argument","publicId":"libtmux:invalid-argument","qualifiedName":"libtmux:invalid-argument","namespace":"libtmux","name":"invalid-argument","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"An argument violates the operation's declared contract."},"source":{"file":"src/conditions.lisp","line":37,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-invalid-argument"},{"id":"libtmux:join-pane","publicId":"libtmux:join-pane","qualifiedName":"libtmux:join-pane","namespace":"libtmux","name":"join-pane","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(join-pane client source destination &key (direction :vertical) size percent before full-size (detached t) (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"source"},{"name":"destination"},{"name":"direction","default":":vertical","optional":true,"keywordOnly":true},{"name":"size","optional":true,"keywordOnly":true},{"name":"percent","optional":true,"keywordOnly":true},{"name":"before","optional":true,"keywordOnly":true},{"name":"full-size","optional":true,"keywordOnly":true},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Join SOURCE pane beside DESTINATION using tmux's join-pane command.\nArguments, outcomes, emptied-window effects and observation semantics match\nMOVE-PANE. Both targets are captured physical panes. Signals STALE-TARGET or an\noperational condition; a failed follow-up is distinct from mutation failure."},"source":{"file":"src/placement.lisp","line":113,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-join-pane"},{"id":"libtmux:kill-pane","publicId":"libtmux:kill-pane","qualifiedName":"libtmux:kill-pane","namespace":"libtmux","name":"kill-pane","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(kill-pane client pane &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Delete exactly the captured physical PANE and return a COMMAND-OUTCOME.\nThe live pane identity is checked before dispatch. Other panes are preserved.\nSignals STALE-TARGET when PANE disappeared or belongs to another generation.\nNever retries the mutation.","body":"See also: `libtmux:kill-server`, `libtmux:kill-session`, `libtmux:kill-window`.","seeAlso":["libtmux:kill-server","libtmux:kill-session","libtmux:kill-window"]},"source":{"file":"src/termination.lisp","line":119,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-kill-pane"},{"id":"libtmux:kill-server","publicId":"libtmux:kill-server","qualifiedName":"libtmux:kill-server","namespace":"libtmux","name":"kill-server","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(kill-server client &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Terminate CLIENT's preflight-accepted daemon and return a COMMAND-OUTCOME.\nSuccess requires both a pre-dispatch receipt and observed exit of the server\nprocess accepted during this call. Missing evidence signals OUTCOME-UNKNOWN;\ncancellation or a deadline never causes an automatic retry. The connection\nCLIENT stays open but its generation is invalidated after observed server death.\nA failed exit wait retains :SERVER-EXIT-UNOBSERVED and the underlying\nERROR-CAUSE. CLOSE-CLIENT never calls this function.","body":"See also: `libtmux:close-client`, `libtmux:kill-session`, `libtmux:outcome-phase`, `libtmux:outcome-status`.","seeAlso":["libtmux:close-client","libtmux:kill-session","libtmux:outcome-phase","libtmux:outcome-status"]},"source":{"file":"src/termination.lisp","line":150,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-kill-server"},{"id":"libtmux:kill-session","publicId":"libtmux:kill-session","qualifiedName":"libtmux:kill-session","namespace":"libtmux","name":"kill-session","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(kill-session client session &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Delete exactly the captured SESSION and return a COMMAND-OUTCOME.\nTmux removes that session's links and panes no longer referenced elsewhere.\nThe live identity is checked before dispatch; the mutation is never retried.","body":"See also: `libtmux:kill-pane`, `libtmux:kill-server`, `libtmux:kill-window`.","seeAlso":["libtmux:kill-pane","libtmux:kill-server","libtmux:kill-window"]},"source":{"file":"src/termination.lisp","line":140,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-kill-session"},{"id":"libtmux:kill-window","publicId":"libtmux:kill-window","qualifiedName":"libtmux:kill-window","namespace":"libtmux","name":"kill-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(kill-window client window &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Delete exactly the captured physical WINDOW and return a COMMAND-OUTCOME.\nEvery link to that physical window is removed by tmux. Other windows remain.\nThe live identity is checked before dispatch; the mutation is never retried.","body":"See also: `libtmux:kill-pane`, `libtmux:kill-server`, `libtmux:kill-session`.","seeAlso":["libtmux:kill-pane","libtmux:kill-server","libtmux:kill-session"]},"source":{"file":"src/termination.lisp","line":130,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-kill-window"},{"id":"libtmux:last-pane","publicId":"libtmux:last-pane","qualifiedName":"libtmux:last-pane","namespace":"libtmux","name":"last-pane","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(last-pane client window &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select WINDOW's last active pane; return an outcome with that observed pane.\nOBSERVE may omit follow-up acquisition. Tmux reports an error when no last\npane exists. Signals STALE-TARGET or an operational condition. Earlier\ncaptures retain their original selection."},"source":{"file":"src/selection.lisp","line":47,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-last-pane"},{"id":"libtmux:last-window","publicId":"libtmux:last-window","qualifiedName":"libtmux:last-window","namespace":"libtmux","name":"last-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(last-window client session &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select SESSION's last active link; return an outcome with that observed link.\nOBSERVE may omit follow-up acquisition. Tmux reports an error when no last\nwindow exists. Signals STALE-TARGET or an operational condition. Earlier\ncaptures retain their original selection."},"source":{"file":"src/selection.lisp","line":38,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-last-window"},{"id":"libtmux:libtmux-error","publicId":"libtmux:libtmux-error","qualifiedName":"libtmux:libtmux-error","namespace":"libtmux","name":"libtmux-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A library failure with a message, original cause and outcome."},"source":{"file":"src/conditions.lisp","line":27,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:error"],"slug":"libtmux-libtmux-error"},{"id":"libtmux:link-window","publicId":"libtmux:link-window","qualifiedName":"libtmux:link-window","namespace":"libtmux","name":"link-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(link-window client source-link session index &key (detached t) (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"source-link"},{"name":"session"},{"name":"index"},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Link SOURCE-LINK's physical window into SESSION at the free INDEX.\nReturn a COMMAND-OUTCOME with the new window link when OBSERVE is true.\nSOURCE-LINK preserves the source session context, including tmux group rules.\nDETACHED defaults true. Never overwrites an occupied index. Signals STALE-TARGET\nor an operational condition; observation failure is retained separately."},"source":{"file":"src/placement.lisp","line":42,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-link-window"},{"id":"libtmux:list-buffers","publicId":"libtmux:list-buffers","qualifiedName":"libtmux:list-buffers","namespace":"libtmux","name":"list-buffers","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(list-buffers client &key (row-limit 10000) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"row-limit","default":"10000","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire buffer metadata; return a fresh simple vector of owned plists and an outcome.\nEach plist has :BUFFER/NAME, :BUFFER/SIZE (bytes) and :BUFFER/CREATED (Unix\nseconds). Preserve tmux's listing order; buffer names are mutable locators,\nnot captured entity identities. Empty listing returns #(). ROW-LIMIT bounds\ndecoding. Signals an operational or decoding condition with the raw outcome."},"source":{"file":"src/buffers.lisp","line":44,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-list-buffers"},{"id":"libtmux:list-commands","publicId":"libtmux:list-commands","qualifiedName":"libtmux:list-commands","namespace":"libtmux","name":"list-commands","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(list-commands client &key command format cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"command","optional":true,"keywordOnly":true},{"name":"format","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Inspect built-in tmux commands; return owned UTF-8 printer text and an outcome.\nOmit COMMAND to list all built-ins. COMMAND is an exact name or built-in alias\nthrough tmux 3.5a; unknown selectors produce no rows. From 3.6, unique prefixes\nare accepted and unknown/ambiguous selectors fail. Configured command-alias\nentries are not listed or expanded by this selector.","body":"FORMAT is explicit tmux format source, without time expansion. #() can start\nasynchronous jobs owned by this command client; results may be incomplete and\ndisconnect cleans up those jobs. Omission uses tmux's human-readable format.\nPreserve native escaping, whitespace and after-hook output; this is not a\ndecoded registry.\nBlocks under shared preflight/dispatch limits, never retries and starts no\ndaemon. Failures retain their outcome; invalid UTF-8 signals DECODING-ERROR.\n\nSee also: `libtmux:display-message`, `libtmux:error-outcome`, `libtmux:list-keys`, `libtmux:outcome-stdout`.","seeAlso":["libtmux:display-message","libtmux:error-outcome","libtmux:list-keys","libtmux:outcome-stdout"]},"source":{"file":"src/key-bindings.lisp","line":19,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-list-commands"},{"id":"libtmux:list-keys","publicId":"libtmux:list-keys","qualifiedName":"libtmux:list-keys","namespace":"libtmux","name":"list-keys","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(list-keys client &key table key format cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"table","optional":true,"keywordOnly":true},{"name":"key","optional":true,"keywordOnly":true},{"name":"format","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Inspect key bindings; return owned UTF-8 printer text and a command outcome.\nOmit TABLE to list every key table. TABLE and KEY are literal strings; native\nunknown-table and invalid-key failures remain errors. An unbound valid KEY is\nan error except on tmux 3.7 through 3.7c, which return empty text. Those releases\nalso send a single matching row to the server message log and any selected\nfrontend's status line instead of stdout. Empty text does not prove absence.\nFORMAT is explicit tmux format source\nand requires live tmux 3.7 or newer; older daemons signal UNSUPPORTED-CAPABILITY\nbefore payload dispatch. Omission uses the native human-readable listing.","body":"FORMAT has no time expansion. #() can start asynchronous command-client jobs,\nwhose output may be incomplete and whose cleanup follows client disconnect.\nEmpty expanded lines may be omitted. Native escaping, whitespace and after-hook\noutput are preserved; the text is not a parsed or replayable configuration.\nBlocks under shared preflight/dispatch limits and never retries. Invalid UTF-8 signals\nDECODING-ERROR; operational failures retain their outcome.\n\nSee also: `libtmux:bind-key`, `libtmux:error-outcome`, `libtmux:list-commands`, `libtmux:unbind-key`.","seeAlso":["libtmux:bind-key","libtmux:error-outcome","libtmux:list-commands","libtmux:unbind-key"]},"source":{"file":"src/key-bindings.lisp","line":41,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-list-keys"},{"id":"libtmux:list-server-access","publicId":"libtmux:list-server-access","qualifiedName":"libtmux:list-server-access","namespace":"libtmux","name":"list-server-access","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(list-server-access client &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Print the daemon ACL; return owned UTF-8 text and a COMMAND-OUTCOME.\nThe ordinary native listing preserves escaping and whitespace. Before 3.8,\nrows use (R)/(W); from 3.8 they include U/G account kinds. UID 0 is omitted and\nunresolvable names print as unknown. An empty listing does not prove that no\naccount has access. This is printer output, not a decoded authorization model.\nBlocks under shared preflight/dispatch limits and never retries or acquires an\nobservation. Invalid UTF-8 signals DECODING-ERROR; native and operational\nfailures retain their outcomes.","body":"See also: `libtmux:error-outcome`, `libtmux:outcome-stdout`, `libtmux:server-access`.","seeAlso":["libtmux:error-outcome","libtmux:outcome-stdout","libtmux:server-access"]},"source":{"file":"src/server-operations.lisp","line":38,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-list-server-access"},{"id":"libtmux:load-buffer","publicId":"libtmux:load-buffer","qualifiedName":"libtmux:load-buffer","namespace":"libtmux","name":"load-buffer","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(load-buffer client path &key name cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"path"},{"name":"name","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Load a file's bytes into a literal named or automatic buffer; return an outcome.\nPATH is literal path text, not a format. Relative paths follow the tmux command\nclient's cwd. An empty file is tmux's no-op and preserves an existing buffer.\nNew names reject backslashes, ASCII controls and DEL before I/O.\nUse SET-BUFFER for in-memory bytes. Signals INVALID-ARGUMENT or an operational\ncondition; a failure after dispatch may have an uncertain outcome."},"source":{"file":"src/buffers.lisp","line":99,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-load-buffer"},{"id":"libtmux:lock-client","publicId":"libtmux:lock-client","qualifiedName":"libtmux:lock-client","namespace":"libtmux","name":"lock-client","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(lock-client client target &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"target"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request locking of captured terminal TARGET; return a COMMAND-OUTCOME.\nThe frontend runs the session's configured lock-command through its shell.\nSuccess acknowledges the request, not lock startup, completion or authentication.\nAn already suspended frontend or an empty/oversized lock command can be a no-op.\nCLIENT must own TARGET.\nBlocks under shared preflight/dispatch limits; returns no replacement. Stale or\nforeign targets signal STALE-TARGET; other failures retain their outcome.\nPreflight cannot exclude client replacement before dispatch. Never retries.","body":"See also: `libtmux:fetch-clients`, `libtmux:lock-server`, `libtmux:lock-session`, `libtmux:outcome-status`, `libtmux:set-option`, `libtmux:suspend-client`.","seeAlso":["libtmux:fetch-clients","libtmux:lock-server","libtmux:lock-session","libtmux:outcome-status","libtmux:set-option","libtmux:suspend-client"]},"source":{"file":"src/client-operations.lisp","line":105,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-lock-client"},{"id":"libtmux:lock-server","publicId":"libtmux:lock-server","qualifiedName":"libtmux:lock-server","namespace":"libtmux","name":"lock-server","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(lock-server client &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request locking of all attached frontends on CLIENT's daemon.\nReturn a COMMAND-OUTCOME after guarded dispatch. Live frontend membership\ndetermines the recipients; this is wider than one captured session. Each\nfrontend runs its configured lock-command. Control clients, suspended\nfrontends and empty/oversized commands are skipped. Success acknowledges\nthe request, not startup, completion or authentication. Blocks under shared\npreflight/dispatch limits and returns no replacement. Failures retain their\noutcome. Lock programs belong to the frontends; closing CLIENT leaves them\nrunning. Never retries.","body":"See also: `libtmux:error-outcome`, `libtmux:lock-client`, `libtmux:lock-session`, `libtmux:outcome-status`, `libtmux:set-option`.","seeAlso":["libtmux:error-outcome","libtmux:lock-client","libtmux:lock-session","libtmux:outcome-status","libtmux:set-option"]},"source":{"file":"src/server-operations.lisp","line":114,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-lock-server"},{"id":"libtmux:lock-session","publicId":"libtmux:lock-session","qualifiedName":"libtmux:lock-session","namespace":"libtmux","name":"lock-session","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(lock-session client session &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request locking of SESSION's attached frontends; return a COMMAND-OUTCOME.\nCLIENT must own the captured SESSION. The live session membership determines\nwhich frontends receive the request. Each runs its configured lock-command;\ncontrol clients, suspended frontends and empty/oversized commands are skipped.\nSuccess acknowledges the request, not startup, completion or authentication.\nBlocks under shared preflight/dispatch limits and returns no replacement.\nForeign or vanished sessions signal STALE-TARGET; other failures retain their\noutcome. Lock programs belong to the frontends; closing CLIENT leaves them\nrunning. Never retries.","body":"See also: `libtmux:error-outcome`, `libtmux:lock-client`, `libtmux:lock-server`, `libtmux:outcome-status`, `libtmux:set-option`.","seeAlso":["libtmux:error-outcome","libtmux:lock-client","libtmux:lock-server","libtmux:outcome-status","libtmux:set-option"]},"source":{"file":"src/server-operations.lisp","line":98,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-lock-session"},{"id":"libtmux:make-cancellation-token","publicId":"libtmux:make-cancellation-token","qualifiedName":"libtmux:make-cancellation-token","namespace":"libtmux","name":"make-cancellation-token","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(make-cancellation-token)","params":[]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Create a token for one or more operations. CANCEL is idempotent.\nSignals UNSUPPORTED-PLATFORM outside the qualified runtime profile.","body":"See also: `libtmux:cancel`, `libtmux:cancelled-p`, `libtmux:open-client`.","seeAlso":["libtmux:cancel","libtmux:cancelled-p","libtmux:open-client"]},"source":{"file":"src/transport.lisp","line":74,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-make-cancellation-token"},{"id":"libtmux:move-pane","publicId":"libtmux:move-pane","qualifiedName":"libtmux:move-pane","namespace":"libtmux","name":"move-pane","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(move-pane client source destination &key (direction :vertical) size percent before full-size (detached t) (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"source"},{"name":"destination"},{"name":"direction","default":":vertical","optional":true,"keywordOnly":true},{"name":"size","optional":true,"keywordOnly":true},{"name":"percent","optional":true,"keywordOnly":true},{"name":"before","optional":true,"keywordOnly":true},{"name":"full-size","optional":true,"keywordOnly":true},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Move SOURCE pane beside DESTINATION; return an outcome with the moved pane.\nDIRECTION is :HORIZONTAL or :VERTICAL. SIZE is cells; PERCENT is 1..100,\nmutually exclusive with SIZE. BEFORE changes placement and FULL-SIZE spans the\nwindow. Percent sizing retains tmux's version semantics: with FULL-SIZE, 3.3a\nuses destination-pane dimensions and 3.8 uses whole-window dimensions. Use SIZE\nfor cell-based control. DETACHED defaults true.\nAn emptied source window is destroyed, including all its links. With DETACHED\nfalse, tmux chooses the session context of the physical destination. OBSERVE\nsupplies a replacement source pane; its old observation retains its old window.\nSignals STALE-TARGET or an operational condition."},"source":{"file":"src/placement.lisp","line":97,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-move-pane"},{"id":"libtmux:move-window","publicId":"libtmux:move-window","qualifiedName":"libtmux:move-window","namespace":"libtmux","name":"move-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(move-window client source-link session index &key (detached t) (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"source-link"},{"name":"session"},{"name":"index"},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Move SOURCE-LINK into SESSION at the free INDEX; return a COMMAND-OUTCOME.\nOther links to the physical window survive. Removing a session's last link can\ndestroy that session, following tmux semantics. OBSERVE supplies the destination\nlink. DETACHED defaults true; occupied indexes are never overwritten. Signals\nSTALE-TARGET or an operational condition; older link observations stay unchanged."},"source":{"file":"src/placement.lisp","line":53,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-move-window"},{"id":"libtmux:name","publicId":"libtmux:name","qualifiedName":"libtmux:name","namespace":"libtmux","name":"name","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(name entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:name\",[],[\"libtmux:attached-client\"]]","methodKind":"function","raw":"(name (entity libtmux:attached-client))","params":[{"name":"entity","type":"libtmux:attached-client"}],"label":"Primary method: libtmux:attached-client"},{"identity":"[\"libtmux:name\",[],[\"libtmux:session/type\"]]","methodKind":"function","raw":"(name (entity libtmux:session))","params":[{"name":"entity","type":"libtmux:session"}],"label":"Primary method: libtmux:session"},{"identity":"[\"libtmux:name\",[],[\"libtmux:window/type\"]]","methodKind":"function","raw":"(name (entity libtmux:window))","params":[{"name":"entity","type":"libtmux:window"}],"label":"Primary method: libtmux:window"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the captured name and presence, without I/O; text is copied."},"source":{"file":"src/model.lisp","line":173,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-name"},{"id":"libtmux:new-session","publicId":"libtmux:new-session","qualifiedName":"libtmux:new-session","namespace":"libtmux","name":"new-session","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(new-session client &key name window-name width height cwd environment (command nil command-p) (shell-command nil shell-command-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name","optional":true,"keywordOnly":true},{"name":"window-name","optional":true,"keywordOnly":true},{"name":"width","optional":true,"keywordOnly":true},{"name":"height","optional":true,"keywordOnly":true},{"name":"cwd","optional":true,"keywordOnly":true},{"name":"environment","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"shell-command","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Create a detached session on the selected live daemon; return a COMMAND-OUTCOME.\nNAME, WINDOW-NAME and CWD are literal. WIDTH/HEIGHT are positive initial cell\ndimensions through 65535. ENVIRONMENT, COMMAND and SHELL-COMMAND follow\nNEW-WINDOW. OUTCOME-VALUE supplies the created session; acquisition failure is\nretained separately. This operation requires an existing daemon and never\nsilently starts or replaces one.","body":"See also: `libtmux:new-window`, `libtmux:start-daemon`, `libtmux:with-daemon`.","seeAlso":["libtmux:new-window","libtmux:start-daemon","libtmux:with-daemon"]},"source":{"file":"src/creation.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-new-session"},{"id":"libtmux:new-window","publicId":"libtmux:new-window","qualifiedName":"libtmux:new-window","namespace":"libtmux","name":"new-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(new-window client session &key name index cwd environment (command nil command-p) (shell-command nil shell-command-p) (detached t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"name","optional":true,"keywordOnly":true},{"name":"index","optional":true,"keywordOnly":true},{"name":"cwd","optional":true,"keywordOnly":true},{"name":"environment","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"shell-command","default":"nil","optional":true,"keywordOnly":true},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Create a physical window in captured SESSION and return a COMMAND-OUTCOME.\nNAME and CWD are literal strings. INDEX chooses a free link index; omission uses\ntmux's next available index. DETACHED defaults true. ENVIRONMENT is a list/vector\nof (name . value) string pairs. COMMAND is nonempty argv; SHELL-COMMAND is a\nseparate, mutually exclusive shell string. Omit both for tmux's default shell.\nOUTCOME-VALUE supplies the resulting window; observation failure is separate.\nNever replaces an occupied index or retries a mutation. Limits cover all I/O."},"source":{"file":"src/creation.lisp","line":23,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-new-window"},{"id":"libtmux:next-layout","publicId":"libtmux:next-layout","qualifiedName":"libtmux:next-layout","namespace":"libtmux","name":"next-layout","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(next-layout client window &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Cycle WINDOW to tmux's next layout; return an outcome and optional replacement.\nUnzooms the window. Captured values remain unchanged. Signals STALE-TARGET or\nan operational condition; follow-up acquisition failure is retained separately."},"source":{"file":"src/geometry.lisp","line":94,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-next-layout"},{"id":"libtmux:next-window","publicId":"libtmux:next-window","qualifiedName":"libtmux:next-window","namespace":"libtmux","name":"next-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(next-window client session &key activity (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"activity","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select SESSION's next window link; return a COMMAND-OUTCOME.\nACTIVITY restricts selection to windows with an alert. OBSERVE supplies the\nnewly captured active link through OUTCOME-VALUE, or records an observation\nfailure separately. Signals STALE-TARGET or an operational condition."},"source":{"file":"src/selection.lisp","line":20,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-next-window"},{"id":"libtmux:open-client","publicId":"libtmux:open-client","qualifiedName":"libtmux:open-client","namespace":"libtmux","name":"open-client","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(open-client &key (program \"tmux\") socket-name socket-path config-file (timeout 30) (output-limit (* 16 1024 1024)))","params":[{"name":"program","default":"\"tmux\"","optional":true,"keywordOnly":true},{"name":"socket-name","optional":true,"keywordOnly":true},{"name":"socket-path","optional":true,"keywordOnly":true},{"name":"config-file","optional":true,"keywordOnly":true},{"name":"timeout","default":"30","optional":true,"keywordOnly":true},{"name":"output-limit","default":"(* 16 1024 1024)","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Open an SBCL/Linux subprocess client and check its tmux version.\nChecks the runtime profile and required OS facilities before resolving PROGRAM.\nAn unsupported profile or facility signals UNSUPPORTED-PLATFORM; ERROR-FEATURE\nidentifies the requirement. PROGRAM must resolve to a native x86_64 ELF tmux\nexecutable; pass the underlying binary when PATH selects a script or shim.\nSOCKET-NAME and SOCKET-PATH are mutually exclusive; omission selects tmux's\ndefault socket. No daemon is started. TIMEOUT is seconds; OUTPUT-LIMIT bounds\ncombined stdout/stderr bytes per command. Signals an operational condition on\nversion/launch failure. Returned configuration strings are owned by the client.","body":"See also: `libtmux:close-client`, `libtmux:error-feature`, `libtmux:unsupported-platform`, `libtmux:with-client`.","seeAlso":["libtmux:close-client","libtmux:error-feature","libtmux:unsupported-platform","libtmux:with-client"]},"source":{"file":"src/client.lisp","line":225,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-open-client"},{"id":"libtmux:outcome-arguments","publicId":"libtmux:outcome-arguments","qualifiedName":"libtmux:outcome-arguments","namespace":"libtmux","name":"outcome-arguments","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-arguments outcome)","params":[{"name":"outcome"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned vector of the effective argv strings. No external I/O."},"source":{"file":"src/transport.lisp","line":46,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-outcome-arguments"},{"id":"libtmux:outcome-cleanup-failures","publicId":"libtmux:outcome-cleanup-failures","qualifiedName":"libtmux:outcome-cleanup-failures","namespace":"libtmux","name":"outcome-cleanup-failures","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-cleanup-failures outcome)","params":[{"name":"outcome"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of conditions encountered while releasing the process."},"source":{"file":"src/transport.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-outcome-cleanup-failures"},{"id":"libtmux:outcome-elapsed","publicId":"libtmux:outcome-elapsed","qualifiedName":"libtmux:outcome-elapsed","namespace":"libtmux","name":"outcome-elapsed","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-elapsed outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-elapsed\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-elapsed (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return elapsed monotonic seconds for this retained result. No I/O.\nRaw RUN-COMMAND measures its subprocess operation. Named operations include\npreflight, dispatch and follow-up acquisition in their retained outcome timing."},"source":{"file":"src/transport.lisp","line":19,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-outcome-elapsed"},{"id":"libtmux:outcome-exit-code","publicId":"libtmux:outcome-exit-code","qualifiedName":"libtmux:outcome-exit-code","namespace":"libtmux","name":"outcome-exit-code","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-exit-code outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-exit-code\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-exit-code (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the subprocess's integer exit status, or NIL if unknown. No I/O."},"source":{"file":"src/transport.lisp","line":14,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-outcome-exit-code"},{"id":"libtmux:outcome-observation-error","publicId":"libtmux:outcome-observation-error","qualifiedName":"libtmux:outcome-observation-error","namespace":"libtmux","name":"outcome-observation-error","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-observation-error outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-observation-error\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-observation-error (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the condition from follow-up acquisition, or NIL. No I/O.\nA successful mutation remains :SUCCEEDED when its replacement observation\nfails. Do not repeat the mutation merely to obtain a replacement observation."},"source":{"file":"src/transport.lisp","line":23,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-outcome-observation-error"},{"id":"libtmux:outcome-phase","publicId":"libtmux:outcome-phase","qualifiedName":"libtmux:outcome-phase","namespace":"libtmux","name":"outcome-phase","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-phase outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-phase\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-phase (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return retained dispatch evidence, without I/O.\nRaw process phases are :PREPARED, :LAUNCHING, :DISPATCHED and :EXITED. Named\noperations may also report :PREFLIGHT or :GUARD-REJECTED before payload dispatch.\nExplicit server termination reports :SERVER-TERMINATED only after retained\npidfd readiness proves exit. Phase is separate from OUTCOME-STATUS; an exited\nqueue can have partially completed effects even when it reported failure."},"source":{"file":"src/transport.lisp","line":7,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-outcome-phase"},{"id":"libtmux:outcome-reason","publicId":"libtmux:outcome-reason","qualifiedName":"libtmux:outcome-reason","namespace":"libtmux","name":"outcome-reason","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-reason outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-reason\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-reason (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the retained failure reason keyword, or NIL. No I/O.\nExamples include :DEADLINE and :CANCELLED; inspect the condition and phase too."},"source":{"file":"src/transport.lisp","line":16,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-outcome-reason"},{"id":"libtmux:outcome-status","publicId":"libtmux:outcome-status","qualifiedName":"libtmux:outcome-status","namespace":"libtmux","name":"outcome-status","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-status outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-status\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-status (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return :SUCCEEDED, :FAILED, :UNKNOWN or :NOT-DISPATCHED. No I/O.\nThese describe retained evidence, not rollback. Observation failure is separate\nfrom mutation success; inspect OUTCOME-OBSERVATION-ERROR and OUTCOME-VALUE."},"source":{"file":"src/transport.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-outcome-status"},{"id":"libtmux:outcome-stderr","publicId":"libtmux:outcome-stderr","qualifiedName":"libtmux:outcome-stderr","namespace":"libtmux","name":"outcome-stderr","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-stderr outcome)","params":[{"name":"outcome"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh octet vector containing retained diagnostic output."},"source":{"file":"src/transport.lisp","line":54,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-outcome-stderr"},{"id":"libtmux:outcome-stdout","publicId":"libtmux:outcome-stdout","qualifiedName":"libtmux:outcome-stdout","namespace":"libtmux","name":"outcome-stdout","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-stdout outcome)","params":[{"name":"outcome"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh octet vector containing retained standard output."},"source":{"file":"src/transport.lisp","line":50,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-outcome-stdout"},{"id":"libtmux:outcome-unknown","publicId":"libtmux:outcome-unknown","qualifiedName":"libtmux:outcome-unknown","namespace":"libtmux","name":"outcome-unknown","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A dispatched operation did not establish its final outcome."},"source":{"file":"src/conditions.lisp","line":77,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:command-failed"],"slug":"libtmux-outcome-unknown"},{"id":"libtmux:outcome-value","publicId":"libtmux:outcome-value","qualifiedName":"libtmux:outcome-value","namespace":"libtmux","name":"outcome-value","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-value outcome)","params":[{"name":"outcome"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the resulting value and presence as two values, without I/O.\nCopy data containers and strings; captured entity observations may be shared."},"source":{"file":"src/transport.lisp","line":58,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-outcome-value"},{"id":"libtmux:output-limit-exceeded","publicId":"libtmux:output-limit-exceeded","qualifiedName":"libtmux:output-limit-exceeded","namespace":"libtmux","name":"output-limit-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Combined stdout/stderr exceeded the configured byte limit."},"source":{"file":"src/conditions.lisp","line":83,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:outcome-unknown"],"slug":"libtmux-output-limit-exceeded"},{"id":"libtmux:pane","publicId":"libtmux:pane","qualifiedName":"libtmux:pane","namespace":"libtmux","name":"pane","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A physical pane belonging to one captured window."},"source":{"file":"src/model.lisp","line":27,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:entity"],"slug":"libtmux-pane"},{"id":"libtmux:panes","publicId":"libtmux:panes","qualifiedName":"libtmux:panes","namespace":"libtmux","name":"panes","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(panes observation)","params":[{"name":"observation"}]},{"identity":"[\"libtmux:panes\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(panes (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"},{"identity":"[\"libtmux:panes\",[],[\"libtmux:window/type\"]]","methodKind":"function","raw":"(panes (window libtmux:window))","params":[{"name":"window","type":"libtmux:window"}],"label":"Primary method: libtmux:window"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of captured physical panes, without I/O.\nSnapshots preserve first occurrence; windows preserve the captured pane order."},"source":{"file":"src/model.lisp","line":53,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-panes"},{"id":"libtmux:paste-buffer","publicId":"libtmux:paste-buffer","qualifiedName":"libtmux:paste-buffer","namespace":"libtmux","name":"paste-buffer","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(paste-buffer client pane &key name separator raw bracketed verbatim delete cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"name","optional":true,"keywordOnly":true},{"name":"separator","optional":true,"keywordOnly":true},{"name":"raw","optional":true,"keywordOnly":true},{"name":"bracketed","optional":true,"keywordOnly":true},{"name":"verbatim","optional":true,"keywordOnly":true},{"name":"delete","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Paste a named or top buffer into PANE; return a COMMAND-OUTCOME.\nNewlines become Return by default. RAW preserves newlines; SEPARATOR explicitly\nreplaces each newline with literal text and is mutually exclusive with RAW.\nVERBATIM preserves every byte, implies RAW and disables tmux's newer control-byte\nsanitization; it cannot be combined with a separator or bracket markers.\nBRACKETED uses bracketed paste when the pane enabled it. DELETE removes the\nselected buffer afterward. Tmux may accept without sending when input is\ndisabled; success does not prove application consumption. Signals STALE-TARGET\nor an operational condition."},"source":{"file":"src/buffers.lisp","line":123,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-paste-buffer"},{"id":"libtmux:pending-daemon-cleanups","publicId":"libtmux:pending-daemon-cleanups","qualifiedName":"libtmux:pending-daemon-cleanups","namespace":"libtmux","name":"pending-daemon-cleanups","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(pending-daemon-cleanups)","params":[]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of owners with incomplete cleanup, without daemon I/O.\nThe library retains them even when startup leaves through a nonlocal exit.\nSuccessful STOP-DAEMON removes an owner from this collection.","body":"See also: `libtmux:error-daemon`, `libtmux:stop-daemon`.","seeAlso":["libtmux:error-daemon","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":109,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-pending-daemon-cleanups"},{"id":"libtmux:pipe-pane","publicId":"libtmux:pipe-pane","qualifiedName":"libtmux:pipe-pane","namespace":"libtmux","name":"pipe-pane","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(pipe-pane client pane &key shell-command format-p (direction :output) toggle cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"shell-command","optional":true,"keywordOnly":true},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"direction","default":":output","optional":true,"keywordOnly":true},{"name":"toggle","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Configure PANE's tmux-owned pipe and return a COMMAND-OUTCOME.\nSHELL-COMMAND is shell source, literal to tmux by default; FORMAT-P explicitly\nenables tmux format and time expansion before shell execution. DIRECTION is\n:OUTPUT (pane to shell), :INPUT (shell to pane), or :BOTH. Omit SHELL-COMMAND,\nor pass an empty string, to close the pipe. TOGGLE closes an existing pipe\nwithout starting its replacement. Replacing a pipe closes the previous one.\nCompletion acknowledges configuration, not shell startup, success or output\nconsumption. The daemon owns the pipe child; closing CLIENT leaves it running.\nLiteral commands exceeding tmux's time-format capacity fail before I/O.\nSignals STALE-TARGET or an operational condition; never retries configuration."},"source":{"file":"src/process-operations.lisp","line":41,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-pipe-pane"},{"id":"libtmux:previous-layout","publicId":"libtmux:previous-layout","qualifiedName":"libtmux:previous-layout","namespace":"libtmux","name":"previous-layout","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(previous-layout client window &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Cycle WINDOW to tmux's previous layout; return an outcome and optional replacement.\nUnzooms the window. Captured values remain unchanged. Signals STALE-TARGET or\nan operational condition; follow-up acquisition failure is retained separately."},"source":{"file":"src/geometry.lisp","line":102,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-previous-layout"},{"id":"libtmux:previous-window","publicId":"libtmux:previous-window","qualifiedName":"libtmux:previous-window","namespace":"libtmux","name":"previous-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(previous-window client session &key activity (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"activity","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select SESSION's previous window link; return a COMMAND-OUTCOME.\nACTIVITY restricts selection to windows with an alert. OBSERVE supplies the\nnewly captured active link through OUTCOME-VALUE, or records an observation\nfailure separately. Signals STALE-TARGET or an operational condition."},"source":{"file":"src/selection.lisp","line":29,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-previous-window"},{"id":"libtmux:provenance","publicId":"libtmux:provenance","qualifiedName":"libtmux:provenance","namespace":"libtmux","name":"provenance","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(provenance observation)","params":[{"name":"observation"}]},{"identity":"[\"libtmux:provenance\",[],[\"libtmux:entity\"]]","methodKind":"function","raw":"(provenance (entity libtmux:entity))","params":[{"name":"entity","type":"libtmux:entity"}],"label":"Primary method: libtmux:entity"},{"identity":"[\"libtmux:provenance\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(provenance (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return fresh captured provenance and acquisition bounds, without I/O."},"source":{"file":"src/model.lisp","line":45,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-provenance"},{"id":"libtmux:refresh","publicId":"libtmux:refresh","qualifiedName":"libtmux:refresh","namespace":"libtmux","name":"refresh","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(refresh client observation &rest options)","params":[{"name":"client"},{"name":"observation"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire a replacement observation, leaving the earlier capture unchanged.\nCLIENT must own the original context/generation. Missing or replaced targets\nsignal STALE-TARGET. Attached-client refresh requires one unique live target\nname with the same PID/creation/tty fingerprint; its observation identity changes."},"source":{"file":"src/capture.lisp","line":201,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-refresh"},{"id":"libtmux:refresh-client","publicId":"libtmux:refresh-client","qualifiedName":"libtmux:refresh-client","namespace":"libtmux","name":"refresh-client","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(refresh-client client target &key status-only cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"target"},{"name":"status-only","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request a redraw of captured terminal TARGET; return a COMMAND-OUTCOME.\nSTATUS-ONLY requests only the status line; NIL requests the whole display.\nSuccess acknowledges scheduling, not completed terminal rendering. This is an\nexternal operation; REFRESH instead acquires a replacement observation.\nCLIENT must own TARGET. Blocks under shared preflight/dispatch limits. A stale\nor foreign target signals STALE-TARGET; other failures retain their outcome.\nThe client fingerprint is checked before dispatch, with a remaining replacement\nrace. Returns no replacement and never retries the request.","body":"See also: `libtmux:fetch-clients`, `libtmux:outcome-status`, `libtmux:refresh`.","seeAlso":["libtmux:fetch-clients","libtmux:outcome-status","libtmux:refresh"]},"source":{"file":"src/client-operations.lisp","line":78,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-refresh-client"},{"id":"libtmux:remove-environment","publicId":"libtmux:remove-environment","qualifiedName":"libtmux:remove-environment","namespace":"libtmux","name":"remove-environment","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(remove-environment client name &key scope target cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Store tmux's removal marker for NAME and return its COMMAND-OUTCOME.\nSCOPE/TARGET follow SET-ENVIRONMENT. A removal marker is distinct from absence\nand from a present empty string. UNSET-ENVIRONMENT deletes the entry instead.\nNever retries the mutation.","body":"See also: `libtmux:set-environment`, `libtmux:unset-environment`.","seeAlso":["libtmux:set-environment","libtmux:unset-environment"]},"source":{"file":"src/configuration-operations.lisp","line":253,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-remove-environment"},{"id":"libtmux:rename-session","publicId":"libtmux:rename-session","qualifiedName":"libtmux:rename-session","namespace":"libtmux","name":"rename-session","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(rename-session client session text &key format-p (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"text"},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Rename SESSION with literal TEXT, or an explicit FORMAT-P expression.\nReturn a COMMAND-OUTCOME. OBSERVE defaults true and supplies a replacement\nthrough OUTCOME-VALUE; observation failure is retained separately. Tmux enforces\nsession-name restrictions and uniqueness. Signals STALE-TARGET or an operational\ncondition. Timeout and byte limits cover preflight, mutation and observation."},"source":{"file":"src/operations.lisp","line":22,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-rename-session"},{"id":"libtmux:rename-window","publicId":"libtmux:rename-window","qualifiedName":"libtmux:rename-window","namespace":"libtmux","name":"rename-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(rename-window client window text &key format-p (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"text"},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Rename the selected physical WINDOW and return a COMMAND-OUTCOME.\nTEXT is literal by default; FORMAT-P explicitly enables tmux format expansion.\nTmux may normalize or reject names. OBSERVE acquires a replacement in\nOUTCOME-VALUE; a failed follow-up stays in OUTCOME-OBSERVATION-ERROR without\nerasing successful mutation. Earlier observations are unchanged. Signals\nSTALE-TARGET or an operational condition. Never retries the mutation."},"source":{"file":"src/operations.lisp","line":12,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-rename-window"},{"id":"libtmux:resize-pane","publicId":"libtmux:resize-pane","qualifiedName":"libtmux:resize-pane","namespace":"libtmux","name":"resize-pane","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(resize-pane client pane &key width height direction (amount 1 amount-p) zoom (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"width","optional":true,"keywordOnly":true},{"name":"height","optional":true,"keywordOnly":true},{"name":"direction","optional":true,"keywordOnly":true},{"name":"amount","default":"1","optional":true,"keywordOnly":true},{"name":"zoom","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Resize PANE and return a COMMAND-OUTCOME with an optional replacement pane.\nChoose cell WIDTH/HEIGHT (1..10000), a DIRECTION and positive AMOUNT, or ZOOM.\nDIRECTION is :LEFT, :RIGHT, :UP or :DOWN; AMOUNT defaults to one. ZOOM toggles\nthe window's zoom state. Modes are exclusive. Tmux may clamp sizes to the\navailable layout; inspect the observed value. Earlier captures stay unchanged.\nSignals INVALID-ARGUMENT, STALE-TARGET or an operational condition."},"source":{"file":"src/geometry.lisp","line":50,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-resize-pane"},{"id":"libtmux:resize-window","publicId":"libtmux:resize-window","qualifiedName":"libtmux:resize-window","namespace":"libtmux","name":"resize-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(resize-window client window &key width height direction (amount 1 amount-p) fit (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"width","optional":true,"keywordOnly":true},{"name":"height","optional":true,"keywordOnly":true},{"name":"direction","optional":true,"keywordOnly":true},{"name":"amount","default":"1","optional":true,"keywordOnly":true},{"name":"fit","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Resize physical WINDOW and return an outcome with an optional replacement.\nChoose cell WIDTH/HEIGHT (1..10000), a DIRECTION and positive AMOUNT, or FIT\n(:SMALLEST or :LARGEST attached client). Modes are exclusive; dimensions are\nsubject to tmux's layout constraints. A resize sets the window-size option to\nmanual, as tmux does. Signals INVALID-ARGUMENT, STALE-TARGET or an operational\ncondition. Observation failure is retained separately from mutation success."},"source":{"file":"src/geometry.lisp","line":63,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-resize-window"},{"id":"libtmux:respawn-pane","publicId":"libtmux:respawn-pane","qualifiedName":"libtmux:respawn-pane","namespace":"libtmux","name":"respawn-pane","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(respawn-pane client pane &key kill cwd environment (observe t) (command nil command-p) (shell-command nil shell-command-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"kill","optional":true,"keywordOnly":true},{"name":"cwd","optional":true,"keywordOnly":true},{"name":"environment","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"shell-command","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Restart PANE's process and return a COMMAND-OUTCOME.\nKILL explicitly replaces a running process; otherwise tmux requires it to have\nexited. Omit COMMAND and SHELL-COMMAND to reuse the previous command. Explicit\nargv, shell text, literal CWD and ENVIRONMENT follow NEW-WINDOW. OBSERVE returns\na replacement pane through OUTCOME-VALUE; its earlier capture stays unchanged.\nThe process may exit before observation. Signals STALE-TARGET or an operational\ncondition; never retries an uncertain restart."},"source":{"file":"src/process-operations.lisp","line":14,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-respawn-pane"},{"id":"libtmux:respawn-window","publicId":"libtmux:respawn-window","qualifiedName":"libtmux:respawn-window","namespace":"libtmux","name":"respawn-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(respawn-window client window &key kill cwd environment (observe t) (command nil command-p) (shell-command nil shell-command-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"kill","optional":true,"keywordOnly":true},{"name":"cwd","optional":true,"keywordOnly":true},{"name":"environment","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"shell-command","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Restart WINDOW as one pane and return a COMMAND-OUTCOME.\nKILL explicitly replaces running processes. Tmux retains its first pane and\ndestroys every other pane in the physical window, including through other links.\nOther options follow RESPAWN-PANE. OBSERVE supplies a replacement window without\nchanging earlier observations. Linked-window session context is selected by tmux.\nSignals STALE-TARGET or an operational condition; never retries the restart."},"source":{"file":"src/process-operations.lisp","line":28,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-respawn-window"},{"id":"libtmux:rotate-window","publicId":"libtmux:rotate-window","qualifiedName":"libtmux:rotate-window","namespace":"libtmux","name":"rotate-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(rotate-window client window &key (direction :up) preserve-zoom (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"direction","default":":up","optional":true,"keywordOnly":true},{"name":"preserve-zoom","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Rotate WINDOW's pane positions :UP or :DOWN; return an outcome and replacement.\nTmux also advances the active pane. PRESERVE-ZOOM restores zoom after rotating.\nSignals INVALID-ARGUMENT, STALE-TARGET or an operational condition. Captured\npane order remains unchanged in earlier observations."},"source":{"file":"src/placement.lisp","line":173,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-rotate-window"},{"id":"libtmux:run-command","publicId":"libtmux:run-command","qualifiedName":"libtmux:run-command","namespace":"libtmux","name":"run-command","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(run-command client arguments &key effect input cancel-token (timeout (slot-value client (quote timeout))) (output-limit (slot-value client (quote output-limit))))","params":[{"name":"client"},{"name":"arguments"},{"name":"effect","optional":true,"keywordOnly":true},{"name":"input","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","default":"(slot-value client (quote timeout))","optional":true,"keywordOnly":true},{"name":"output-limit","default":"(slot-value client (quote output-limit))","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Execute explicit tmux argv and return a retained COMMAND-OUTCOME.\nEFFECT must be :READ or :MUTATION. Arguments are literal argv strings; tmux's\nown command/format grammar still applies. INPUT is an octet vector or NIL.\nThis escape hatch does not validate captured target identities. Failures signal\nconditions retaining the outcome; uncertain mutations are never retried."},"source":{"file":"src/client.lisp","line":279,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-run-command"},{"id":"libtmux:same-entity-p","publicId":"libtmux:same-entity-p","qualifiedName":"libtmux:same-entity-p","namespace":"libtmux","name":"same-entity-p","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(same-entity-p left right)","params":[{"name":"left"},{"name":"right"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Compare captured identity, not captured field values. No I/O.\nContext and generation must agree. Link comparison retains its expected window\nand index. Attached clients compare equal only within their original capture."},"source":{"file":"src/model.lisp","line":139,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-same-entity-p"},{"id":"libtmux:save-buffer","publicId":"libtmux:save-buffer","qualifiedName":"libtmux:save-buffer","namespace":"libtmux","name":"save-buffer","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(save-buffer client path &key name append cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"path"},{"name":"name","optional":true,"keywordOnly":true},{"name":"append","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Save a named or top buffer's bytes to literal PATH; return a COMMAND-OUTCOME.\nOverwrite the file unless APPEND is true. Relative paths follow tmux's command\nclient cwd. Use SHOW-BUFFER for returned bytes. Success records tmux's reported\ncompletion, not independently verified file contents or durability. In particular,\ntmux 3.3a can suppress file-write errors. An uncertain write is never retried.\nSignals INVALID-ARGUMENT or an operational condition."},"source":{"file":"src/buffers.lisp","line":111,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-save-buffer"},{"id":"libtmux:select-layout","publicId":"libtmux:select-layout","qualifiedName":"libtmux:select-layout","namespace":"libtmux","name":"select-layout","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(select-layout client window layout &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"layout"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Apply LAYOUT to physical WINDOW; return an outcome and optional replacement.\nLAYOUT is :EVEN-HORIZONTAL, :EVEN-VERTICAL, :MAIN-HORIZONTAL, :MAIN-VERTICAL,\n:TILED, or (:CUSTOM string) containing a tmux layout description. Legacy custom\ntext requires four ASCII hex digits, a comma and a nonempty body; JSON-object\nlayouts require a live tmux daemon at least 3.8. Header checks precede I/O;\nthe existing target preflight checks the daemon version before dispatch.\nText is literal; tmux validates its checksum, JSON and geometry. This unzooms\nthe window. Signals INVALID-ARGUMENT, UNSUPPORTED-CAPABILITY, STALE-TARGET or\nan operational condition. Does not change earlier captured values.","body":"See also: `libtmux:next-layout`, `libtmux:outcome-value`, `libtmux:previous-layout`.","seeAlso":["libtmux:next-layout","libtmux:outcome-value","libtmux:previous-layout"]},"source":{"file":"src/geometry.lisp","line":76,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-select-layout"},{"id":"libtmux:select-pane","publicId":"libtmux:select-pane","qualifiedName":"libtmux:select-pane","namespace":"libtmux","name":"select-pane","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(select-pane client pane &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select PANE within its physical window; return a COMMAND-OUTCOME.\nOBSERVE supplies a replacement pane through OUTCOME-VALUE. Captured getters\nstay local and unchanged. Signals STALE-TARGET or an operational condition."},"source":{"file":"src/operations.lisp","line":41,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-select-pane"},{"id":"libtmux:select-window","publicId":"libtmux:select-window","qualifiedName":"libtmux:select-window","namespace":"libtmux","name":"select-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(select-window client link &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"link"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select a captured window LINK within its session; return a COMMAND-OUTCOME.\nThe expected session/index/window mapping is checked before dispatch. OBSERVE\nsupplies a replacement link through OUTCOME-VALUE. A moved or replaced mapping\nsignals STALE-TARGET; external failures retain their command outcome."},"source":{"file":"src/operations.lisp","line":31,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-select-window"},{"id":"libtmux:send-keys","publicId":"libtmux:send-keys","qualifiedName":"libtmux:send-keys","namespace":"libtmux","name":"send-keys","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(send-keys client pane keys &key (repeat 1) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"keys"},{"name":"repeat","default":"1","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Send a finite nonempty list/vector of tmux key strings to PANE.\nReturn a COMMAND-OUTCOME. REPEAT is a positive count. Tmux interprets key names\nsuch as C-c and Enter; its unrecognized strings fall back to literal input.\nUse SEND-TEXT when key-name interpretation must be disabled. Acknowledgment\ndoes not prove application readiness or consumption."},"source":{"file":"src/terminal-operations.lisp","line":17,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-send-keys"},{"id":"libtmux:send-prefix","publicId":"libtmux:send-prefix","qualifiedName":"libtmux:send-prefix","namespace":"libtmux","name":"send-prefix","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(send-prefix client pane &key second cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"second","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Send the session's configured prefix key to PANE; return a COMMAND-OUTCOME.\nSECOND selects prefix2. Tmux's active pane mode handles input; completion does\nnot establish application consumption. Signals STALE-TARGET or an operational\ncondition retaining its outcome."},"source":{"file":"src/terminal-operations.lisp","line":33,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-send-prefix"},{"id":"libtmux:send-text","publicId":"libtmux:send-text","qualifiedName":"libtmux:send-text","namespace":"libtmux","name":"send-text","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(send-text client pane text &key enter cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"text"},{"name":"enter","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Send literal TEXT to PANE through tmux and return a COMMAND-OUTCOME.\nENTER appends one Return key in the same command. Text such as C-c remains\nliteral text; it is not parsed as a key name, tmux format or shell command.\nTmux's active pane mode still handles the resulting input. Completion means\ntmux processed the send request, not that the application consumed it. An\noversized encoded command is rejected without silently splitting the input."},"source":{"file":"src/terminal-operations.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-send-text"},{"id":"libtmux:server-access","publicId":"libtmux:server-access","qualifiedName":"libtmux:server-access","namespace":"libtmux","name":"server-access","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(server-access client principal access &key group-p cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"principal"},{"name":"access"},{"name":"group-p","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Change PRINCIPAL's native daemon ACL entry; return a COMMAND-OUTCOME.\nPRINCIPAL is a nonempty literal account name, resolved by the daemon's name\nservice, not a numeric UID/GID. GROUP-P selects a group and requires live tmux\n3.8; older daemons signal UNSUPPORTED-CAPABILITY before payload dispatch.","body":"ACCESS is :ALLOW (add a writable entry), :DENY (remove an entry), :READ-ONLY\nor :READ-WRITE (update or add). Adding an existing entry and removing an absent\none are errors. Root and the daemon-owner UID cannot be changed. :DENY creates\nno deny rule: from 3.8, a removed user can still match its peer GID's entry.\nExplicit UID entries take precedence over that GID; supplementary groups are\nnot searched. Cross-user filesystem access must be configured separately.\n\nFrom 3.8, removal and permission updates recompute every connected client's\nread-only state. This can clear an unrelated frontend's separate read-only\nflag when its effective ACL entry is writable. Updates can schedule client\ndisconnection; success does not prove frontend exit. Already scheduled exits\nare not cancelled by a later grant.\n\nBlocks under shared preflight/dispatch limits, acquires no observation and\nnever retries. Invalid input signals INVALID-ARGUMENT; native errors and\nuncertain effects retain their outcome. Earlier captures stay unchanged.\n\nSee also: `libtmux:error-outcome`, `libtmux:fetch-clients`, `libtmux:list-server-access`, `libtmux:refresh`.","seeAlso":["libtmux:error-outcome","libtmux:fetch-clients","libtmux:list-server-access","libtmux:refresh"]},"source":{"file":"src/server-operations.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-server-access"},{"id":"libtmux:session/function","publicId":"libtmux:session/function","qualifiedName":"libtmux:session","namespace":"libtmux","name":"session","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(session entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:session/function\",[],[\"libtmux:attached-client\"]]","methodKind":"function","raw":"(session (client libtmux:attached-client))","params":[{"name":"client","type":"libtmux:attached-client"}],"label":"Primary method: libtmux:attached-client"},{"identity":"[\"libtmux:session/function\",[],[\"libtmux:window-link\"]]","methodKind":"function","raw":"(session (link libtmux:window-link))","params":[{"name":"link","type":"libtmux:window-link"}],"label":"Primary method: libtmux:window-link"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the locally captured session of a link or attached client."},"source":{"file":"src/model.lisp","line":63,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-session-function"},{"id":"libtmux:session/type","publicId":"libtmux:session/type","qualifiedName":"libtmux:session","namespace":"libtmux","name":"session","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A captured physical tmux session."},"source":{"file":"src/model.lisp","line":25,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:entity"],"slug":"libtmux-session-type"},{"id":"libtmux:sessions","publicId":"libtmux:sessions","qualifiedName":"libtmux:sessions","namespace":"libtmux","name":"sessions","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(sessions snapshot)","params":[{"name":"snapshot"}]},{"identity":"[\"libtmux:sessions\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(sessions (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of physical sessions in captured wire order. No I/O."},"source":{"file":"src/model.lisp","line":47,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-sessions"},{"id":"libtmux:set-buffer","publicId":"libtmux:set-buffer","qualifiedName":"libtmux:set-buffer","namespace":"libtmux","name":"set-buffer","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(set-buffer client data &key name append cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"data"},{"name":"name","optional":true,"keywordOnly":true},{"name":"append","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Store literal DATA in a named or automatic buffer; return a COMMAND-OUTCOME.\nDATA is a NUL-free string or an octet vector. Strings use tmux set-buffer;\noctets use its load-buffer stdin path and preserve NUL and invalid UTF-8.\nAPPEND is available only for strings. Empty DATA is tmux's no-op and preserves\nan existing buffer. NAME is literal; omission creates an automatic name.\nNew names reject backslashes, ASCII controls and DEL before I/O because tmux\nversions otherwise rewrite or reject them. Spaces and Unicode are supported.\nSignals INVALID-ARGUMENT or an operational condition."},"source":{"file":"src/buffers.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-set-buffer"},{"id":"libtmux:set-environment","publicId":"libtmux:set-environment","qualifiedName":"libtmux:set-environment","namespace":"libtmux","name":"set-environment","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(set-environment client name value &key scope target format-p hidden cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"value"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"hidden","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Set one raw tmux environment entry and return its COMMAND-OUTCOME.\nSCOPE is required: :GLOBAL rejects TARGET; :SESSION requires a captured session.\nNAME must match [A-Za-z_][A-Za-z0-9_]*. VALUE is literal unless FORMAT-P\nexplicitly requests tmux format expansion. HIDDEN sets tmux's hidden flag.\nThis mutates one raw table, not an effective merged child environment. Never\nretries or refreshes captured observations. See UNSET-ENVIRONMENT for deletion\nand REMOVE-ENVIRONMENT for an explicit tombstone.","body":"See also: `libtmux:remove-environment`, `libtmux:unset-environment`.","seeAlso":["libtmux:remove-environment","libtmux:unset-environment"]},"source":{"file":"src/configuration-operations.lisp","line":229,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-set-environment"},{"id":"libtmux:set-hook","publicId":"libtmux:set-hook","qualifiedName":"libtmux:set-hook","namespace":"libtmux","name":"set-hook","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(set-hook client name command-source &key scope target (key nil key-p) append cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"command-source"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"key","default":"nil","optional":true,"keywordOnly":true},{"name":"append","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Install tmux COMMAND-SOURCE for one registered hook and return an outcome.\nSCOPE/TARGET follow SET-OPTION. COMMAND-SOURCE is explicit tmux command\nlanguage, not Lisp code; this function neither reads nor executes it locally.\nKEY selects one hook-array entry. APPEND applies to an unkeyed hook assignment;\ntmux does not append command source within a keyed hook entry. The ordinary\ninstall path never uses set-hook -R, but tmux may still run a registered native\nafter-hook such as `after-set-hook` as a consequence of this set-hook command.\nDynamic @ event sources require a live catalog that supports them. SET-OPTION\nrejects registered hooks; use UNSET-HOOK to remove this state. Never retries.","body":"See also: `libtmux:set-option`, `libtmux:unset-hook`.","seeAlso":["libtmux:set-option","libtmux:unset-hook"]},"source":{"file":"src/configuration-operations.lisp","line":201,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-set-hook"},{"id":"libtmux:set-option","publicId":"libtmux:set-option","qualifiedName":"libtmux:set-option","namespace":"libtmux","name":"set-option","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(set-option client name value &key scope target (key nil key-p) format-p append only-if-unset cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"value"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"key","default":"nil","optional":true,"keywordOnly":true},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"append","optional":true,"keywordOnly":true},{"name":"only-if-unset","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Set one typed tmux option and return its COMMAND-OUTCOME.\nSCOPE is required and names one explicit table: :SERVER, :GLOBAL-SESSION,\n:SESSION, :GLOBAL-WINDOW, :WINDOW or :PANE. Local scopes require a captured\nTARGET of the matching type; global scopes reject one. NAME is resolved in the\nexact live daemon catalog. Native numbers, Booleans and choices are validated\nbefore payload dispatch. User names must match @[A-Za-z0-9_.-]+ and remain\nstrings. KEY addresses a registered array element. FORMAT-P treats VALUE as an\nexplicit tmux format; otherwise VALUE is literal and typed. APPEND is supported\nfor strings, keyed string-array elements and unkeyed array assignment. An\nunkeyed array VALUE uses that option's native tmux list grammar; use KEY when\nVALUE must remain one literal element. ONLY-IF-UNSET requests tmux -o: write\nonly when the option, or the selected array key, is absent from the local table.\nInherited values permit a local write; present false and empty values refuse\nreplacement. Refusal retains normal condition/outcome evidence through\nERROR-OUTCOME. The condition applies to this command; later commands and hooks\nremain independent. Use UNSET-OPTION to remove state and SET-HOOK for registered\nhooks. Never retries or acquires a replacement capture.","body":"See also: `libtmux:error-outcome`, `libtmux:set-hook`, `libtmux:unset-option`.","seeAlso":["libtmux:error-outcome","libtmux:set-hook","libtmux:unset-option"]},"source":{"file":"src/configuration-operations.lisp","line":164,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-set-option"},{"id":"libtmux:show-buffer","publicId":"libtmux:show-buffer","qualifiedName":"libtmux:show-buffer","namespace":"libtmux","name":"show-buffer","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(show-buffer client &key name cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Read a literal named buffer, or tmux's top buffer; return octets and an outcome.\nOutput is an owned octet vector with no text decoding or trimming. Uses an\nordinary unattached tmux client and requires normal completion with empty stderr.\nNames select the buffer at dispatch, not an earlier incarnation. A post-launch\nfailure does not prove non-dispatch. Signals an operational condition retaining\nits outcome and any partial bytes."},"source":{"file":"src/buffers.lisp","line":87,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-show-buffer"},{"id":"libtmux:show-environment","publicId":"libtmux:show-environment","qualifiedName":"libtmux:show-environment","namespace":"libtmux","name":"show-environment","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(show-environment client &key scope target (names nil names-p) cancel-token timeout output-limit (record-limit 4096) (value-limit 1048576))","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"names","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true},{"name":"record-limit","default":"4096","optional":true,"keywordOnly":true},{"name":"value-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire named raw environment entries; return owned record/outcome vectors.\nSCOPE is :GLOBAL or :SESSION; session scope requires a captured TARGET. NAMES\nis required; explicit NIL/#() performs no I/O. Native names are nonempty UTF-8\nwithout NUL or =, including names outside the mutation identifier grammar.\nEach plist has :NAME, :SCOPE, :TARGET-ID, :VERSION, :STATE and :VALUE. States are\n:PRESENT, :REMOVED and :ABSENT. Empty strings remain present. Present/removal\nrecords additionally carry explicit :HIDDEN-P; absent records claim no visibility.\nRead ordinary visibility first, then hidden only after empty success. Contradictory\nviews retry under the original limits. This is not a merged child environment.\nShared limits, ordinary-output assumptions and failure evidence follow SHOW-OPTIONS.","body":"See also: `libtmux:configuration-read-failed`, `libtmux:set-environment`, `libtmux:show-environment-text`, `libtmux:show-options`.","seeAlso":["libtmux:configuration-read-failed","libtmux:set-environment","libtmux:show-environment-text","libtmux:show-options"]},"source":{"file":"src/configuration-acquisition.lisp","line":373,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-show-environment"},{"id":"libtmux:show-environment-text","publicId":"libtmux:show-environment-text","qualifiedName":"libtmux:show-environment-text","namespace":"libtmux","name":"show-environment-text","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(show-environment-text client &key scope target name hidden shell-format cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"name","optional":true,"keywordOnly":true},{"name":"hidden","optional":true,"keywordOnly":true},{"name":"shell-format","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Inspect a raw environment table; return owned UTF-8 text and a COMMAND-OUTCOME.\nRequired SCOPE is :GLOBAL or :SESSION; a session needs a captured TARGET.\nNAME is literal nonempty text without NUL or =, including names outside the\nmutation identifier grammar. Omission lists the table. HIDDEN selects hidden\nentries; NIL selects ordinary entries. A visibility mismatch can return empty\ntext, which does not prove absence. Empty values, removal markers and native\nescaping remain printer syntax. Session output is not a merged child environment.","body":"SHELL-FORMAT selects native shell-looking presentation (-s); returned text is\nnever evaluated or executed. Ordinary hook output is preserved. This is not a\ndecoded environment mapping. Blocks under shared preflight/dispatch limits,\nstarts no daemon and never retries. Missing names remain errors; operational,\nresource and UTF-8 failures retain client/outcome diagnostics.\n\nSee also: `libtmux:error-outcome`, `libtmux:remove-environment`, `libtmux:set-environment`, `libtmux:show-options-text`.","seeAlso":["libtmux:error-outcome","libtmux:remove-environment","libtmux:set-environment","libtmux:show-options-text"]},"source":{"file":"src/configuration-operations.lisp","line":323,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-show-environment-text"},{"id":"libtmux:show-hooks","publicId":"libtmux:show-hooks","qualifiedName":"libtmux:show-hooks","namespace":"libtmux","name":"show-hooks","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(show-hooks client &key scope target (names nil names-p) (include-inherited t) cancel-token timeout output-limit (record-limit 4096) (value-limit 1048576))","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"names","default":"nil","optional":true,"keywordOnly":true},{"name":"include-inherited","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true},{"name":"record-limit","default":"4096","optional":true,"keywordOnly":true},{"name":"value-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire owned hook records and native read outcomes, following SHOW-OPTIONS.\nOmitted NAMES enumerates built-in hooks. Explicit dynamic @ names require a\nsupporting catalog and remain ordinary strings, without a registration claim.\nBuiltin command values are inert canonical tmux source. Inspection never requests\nset-hook -R; ordinary after-read hooks still apply. :SERVER is unavailable.\nNo Lisp reader or evaluator parses source.","body":"See also: `libtmux:configuration-read-failed`, `libtmux:set-hook`, `libtmux:show-hooks-text`, `libtmux:show-options`.","seeAlso":["libtmux:configuration-read-failed","libtmux:set-hook","libtmux:show-hooks-text","libtmux:show-options"]},"source":{"file":"src/configuration-acquisition.lisp","line":340,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-show-hooks"},{"id":"libtmux:show-hooks-text","publicId":"libtmux:show-hooks-text","qualifiedName":"libtmux:show-hooks-text","namespace":"libtmux","name":"show-hooks-text","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(show-hooks-text client &key scope target name format monitors cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"name","optional":true,"keywordOnly":true},{"name":"format","optional":true,"keywordOnly":true},{"name":"monitors","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Inspect native hooks; return owned UTF-8 printer text and a COMMAND-OUTCOME.\nSCOPE/TARGET follow SET-HOOK; :SERVER is unavailable because show-hooks has no\nserver-table flag. NAME is a literal native reference; omission lists hooks.\nTmux can infer a built-in's table from NAME. A named ordinary @ option can\nalso be printed; that success does not prove event registration.","body":"FORMAT is explicit tmux format source with no implicit time expansion.\nMONITORS selects native monitor presentation (-B). Both require live tmux 3.8.\n#() in FORMAT can start command-client jobs with incomplete results and cleanup\non disconnect. Native escaping, whitespace and ordinary hook output remain\nprinter text, not a decoded or replayable configuration. No -R is invoked.\nBlocks under shared preflight/dispatch limits, starts no daemon and never\nretries. Missing names and decoding/resource failures retain outcome evidence.\n\nSee also: `libtmux:error-outcome`, `libtmux:set-hook`, `libtmux:show-options-text`, `libtmux:unset-hook`.","seeAlso":["libtmux:error-outcome","libtmux:set-hook","libtmux:show-options-text","libtmux:unset-hook"]},"source":{"file":"src/configuration-operations.lisp","line":294,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-show-hooks-text"},{"id":"libtmux:show-option","publicId":"libtmux:show-option","qualifiedName":"libtmux:show-option","namespace":"libtmux","name":"show-option","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(show-option client name &key scope target (key nil key-p) (include-inherited t) cancel-token timeout output-limit (record-limit 4096) (value-limit 1048576))","params":[{"name":"client"},{"name":"name"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"key","default":"nil","optional":true,"keywordOnly":true},{"name":"include-inherited","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true},{"name":"record-limit","default":"4096","optional":true,"keywordOnly":true},{"name":"value-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire one decoded option; return VALUE, PRESENT-P and a read-outcome vector.\nFalse returns NIL,T; absence returns NIL,NIL. KEY selects an entry only after\nacquiring a whole named array. A missing key does not fall through a present\nlocal array. Mutable key text is copied before I/O and bounded to 1 MiB UTF-8.\nKeys normalize under the exact live catalog before payload reads.\nScopes, limits, inheritance, ownership and failure evidence follow SHOW-OPTIONS.","body":"See also: `libtmux:configuration-read-failed`, `libtmux:outcome-value`, `libtmux:show-options`.","seeAlso":["libtmux:configuration-read-failed","libtmux:outcome-value","libtmux:show-options"]},"source":{"file":"src/configuration-acquisition.lisp","line":354,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-show-option"},{"id":"libtmux:show-options","publicId":"libtmux:show-options","qualifiedName":"libtmux:show-options","namespace":"libtmux","name":"show-options","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(show-options client &key scope target (names nil names-p) (include-inherited t) cancel-token timeout output-limit (record-limit 4096) (value-limit 1048576))","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"names","default":"nil","optional":true,"keywordOnly":true},{"name":"include-inherited","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true},{"name":"record-limit","default":"4096","optional":true,"keywordOnly":true},{"name":"value-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire decoded options; return owned record and native read-outcome vectors.\nSCOPE and TARGET follow SET-OPTION. Omitted NAMES enumerates registered built-in\nnon-hook names in source order; explicit finite lists/vectors preserve requested\norder and duplicates, including user names. At most 4096 names of at most 1 MiB\nUTF-8 each are accepted, independently of RECORD-LIMIT. Explicit NIL/#() performs\nno I/O after argument validation.\nEach plist has :NAME, :SCOPE, :TARGET-ID, :VERSION, :TYPE, :ARRAY-P, :PRESENT-P,\n:VALUE, :SOURCE-SCOPE, :SOURCE-TARGET-ID and :INHERITED-P. A present false flag\nhas NIL value and true presence. Arrays are vectors of (key-text . typed-value)\npairs, including sparse and supported string keys; empty arrays are present.\nINCLUDE-INHERITED defaults true: use explicit ancestor tables only after local\nabsence and recheck every shadowing absence. Observations span an interval,\nnot a transaction. Read hooks can run again during bounded consistency retries.\nOne lease, token, deadline and aggregate byte/record budget covers all reads.\nRECORD-LIMIT counts decoded rows/negative observations, including rechecks.\nVALUE-LIMIT bounds each decoded UTF-8 value. Preparation and cleanup add wall time.\nThe ordinary printer must match its known schema; unrelated after-read output\nsignals a decoding failure. This assumes trusted native output, not per-leaf\norigin authentication. Raw SHOW-OPTIONS-TEXT preserves unrestricted inspection.\nEvery requested name has a record even when absent. Read outcomes retain native\nfailures for expected missing names; this does not prove later hooks succeeded.\nRecords contain no operational handle; strings/containers own their storage.","body":"See also: `libtmux:configuration-read-failed`, `libtmux:show-hooks`, `libtmux:show-option`, `libtmux:show-options-text`.","seeAlso":["libtmux:configuration-read-failed","libtmux:show-hooks","libtmux:show-option","libtmux:show-options-text"]},"source":{"file":"src/configuration-acquisition.lisp","line":310,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-show-options"},{"id":"libtmux:show-options-text","publicId":"libtmux:show-options-text","qualifiedName":"libtmux:show-options-text","namespace":"libtmux","name":"show-options-text","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(show-options-text client &key scope target name include-inherited include-hooks value-only format cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"name","optional":true,"keywordOnly":true},{"name":"include-inherited","optional":true,"keywordOnly":true},{"name":"include-hooks","optional":true,"keywordOnly":true},{"name":"value-only","optional":true,"keywordOnly":true},{"name":"format","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Inspect an option table; return owned UTF-8 printer text and a COMMAND-OUTCOME.\nRequired SCOPE and captured TARGET follow SET-OPTION. They select native flags;\ntmux can infer a built-in's table from NAME instead. NAME is a literal option\nreference with native abbreviation/array syntax; omission lists the table.\nINCLUDE-INHERITED uses -A, which does not promise inherited user @ options in a\nwhole-table listing. INCLUDE-HOOKS uses -H and VALUE-ONLY uses -v.","body":"FORMAT is explicit tmux format source, requires live tmux 3.8, and has no\nimplicit time expansion. #() can start asynchronous command-client jobs; their\nresults can be incomplete and disconnect cleans them up. Omission uses native\nprinter syntax. Escaping, whitespace and ordinary hook output remain text;\nthis does not decode values or prove presence, provenance or completeness.\nBlocks under shared preflight/dispatch limits, starts no daemon and never\nretries. Missing names remain errors with retained outcomes. Invalid UTF-8\nsignals DECODING-ERROR with the client and outcome.\n\nSee also: `libtmux:error-outcome`, `libtmux:set-option`, `libtmux:show-environment-text`, `libtmux:show-hooks-text`.","seeAlso":["libtmux:error-outcome","libtmux:set-option","libtmux:show-environment-text","libtmux:show-hooks-text"]},"source":{"file":"src/configuration-operations.lisp","line":263,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-show-options-text"},{"id":"libtmux:snapshot","publicId":"libtmux:snapshot","qualifiedName":"libtmux:snapshot","namespace":"libtmux","name":"snapshot","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A finite captured graph assembled over a recorded acquisition interval.\nIt contains owned observations, not a transactional view of a changing daemon.\nPublic accessors are local and return fresh mutable values."},"source":{"file":"src/model.lisp","line":7,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-snapshot"},{"id":"libtmux:split-pane","publicId":"libtmux:split-pane","qualifiedName":"libtmux:split-pane","namespace":"libtmux","name":"split-pane","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(split-pane client pane &key (direction :vertical) size percent before full-size cwd environment (detached t) (command nil command-p) (shell-command nil shell-command-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"direction","default":":vertical","optional":true,"keywordOnly":true},{"name":"size","optional":true,"keywordOnly":true},{"name":"percent","optional":true,"keywordOnly":true},{"name":"before","optional":true,"keywordOnly":true},{"name":"full-size","optional":true,"keywordOnly":true},{"name":"cwd","optional":true,"keywordOnly":true},{"name":"environment","optional":true,"keywordOnly":true},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"shell-command","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Split captured PANE and return a COMMAND-OUTCOME with the created pane.\nDIRECTION is :HORIZONTAL (left/right) or :VERTICAL (top/bottom). SIZE is a\npositive cell count; PERCENT is 1 through 100, mutually exclusive with SIZE.\nBEFORE places the pane before its target; FULL-SIZE spans the whole window.\nDETACHED defaults true. CWD, ENVIRONMENT, COMMAND and SHELL-COMMAND follow\nNEW-WINDOW. Failed acquisition after successful creation is retained separately.\nSignals STALE-TARGET or an operational condition; never retries the mutation."},"source":{"file":"src/creation.lisp","line":45,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-split-pane"},{"id":"libtmux:stale-target","publicId":"libtmux:stale-target","qualifiedName":"libtmux:stale-target","namespace":"libtmux","name":"stale-target","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Captured target authority or required dispatch context no longer agrees with live state."},"source":{"file":"src/conditions.lisp","line":95,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-stale-target"},{"id":"libtmux:start-daemon","publicId":"libtmux:start-daemon","qualifiedName":"libtmux:start-daemon","namespace":"libtmux","name":"start-daemon","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(start-daemon &key (program \"tmux\") (environment nil environment-p) working-directory temporary-directory (timeout 30) (output-limit 1048576) cancel-token)","params":[{"name":"program","default":"\"tmux\"","optional":true,"keywordOnly":true},{"name":"environment","default":"nil","optional":true,"keywordOnly":true},{"name":"working-directory","optional":true,"keywordOnly":true},{"name":"temporary-directory","optional":true,"keywordOnly":true},{"name":"timeout","default":"30","optional":true,"keywordOnly":true},{"name":"output-limit","default":"1048576","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Start an owned empty-config daemon on a fresh private socket and await readiness.\nUses the qualified SBCL/Linux backend and explicit /dev/null configuration.\nENVIRONMENT is a finite list/vector of distinct NAME=VALUE strings; omission\ncopies the caller environment, and NIL selects an empty input environment.\nTmux selectors, socket activation and launcher controls are removed. Caller\nlocale is preserved; Bash shell metadata is not byte-transparent. Environment\nvalues and the native executable remain trusted application configuration.\nWORKING-DIRECTORY defaults to the captured current directory. The owner creates\na fresh directory under TEMPORARY-DIRECTORY (default UIOP's temporary directory).\nIts canonical ancestors must be owned by this user or root; writable ancestors\nmust have the sticky bit. No existing daemon or endpoint is adopted.\nTIMEOUT is one startup deadline after input preparation, including version and\nreadiness IPC. OUTPUT-LIMIT must be at least two bytes: half bounds daemon\nlifetime diagnostics; the remainder bounds version/readiness output. Cleanup\nadds bounded waits; synchronous setup and scheduling can extend caller wall time.\nCANCEL-TOKEN affects startup only; after READY, STOP-DAEMON owns cancellation.\nSignals DAEMON-START-FAILED with the original cause and owner on startup failure.","body":"See also: `libtmux:error-daemon`, `libtmux:open-client`, `libtmux:stop-daemon`, `libtmux:with-daemon`.","seeAlso":["libtmux:error-daemon","libtmux:open-client","libtmux:stop-daemon","libtmux:with-daemon"]},"source":{"file":"src/daemon.lisp","line":117,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-start-daemon"},{"id":"libtmux:stop-daemon","publicId":"libtmux:stop-daemon","qualifiedName":"libtmux:stop-daemon","namespace":"libtmux","name":"stop-daemon","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(stop-daemon daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Stop and reap DAEMON's owned child, then remove its checked socket and directory.\nIdempotent after success; returns no values. Never targets a daemon through a\nreusable PID or socket command. A 0.75-second admission wait and a separate\n0.75-second worker join precede any retried job cleanup (up to 0.5 seconds).\nSynchronous OS calls and scheduling can extend wall time. Failed cleanup signals\nDAEMON-CLEANUP-FAILED and retains the owner for retry. Closing an ordinary client\ndoes not call this function. Terminating the daemon does not establish exit of\nevery pane descendant.","body":"See also: `libtmux:daemon-cleanup-failures`, `libtmux:pending-daemon-cleanups`, `libtmux:with-daemon`.","seeAlso":["libtmux:daemon-cleanup-failures","libtmux:pending-daemon-cleanups","libtmux:with-daemon"]},"source":{"file":"src/daemon.lisp","line":143,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-stop-daemon"},{"id":"libtmux:suspend-client","publicId":"libtmux:suspend-client","qualifiedName":"libtmux:suspend-client","namespace":"libtmux","name":"suspend-client","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(suspend-client client target &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"target"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request suspension of captured terminal TARGET; return a COMMAND-OUTCOME.\nTmux asks the frontend to stop with SIGTSTP. Success acknowledges the request;\nit does not prove process suspension. An already suspended frontend can be a\nno-op. Its controlling application owns resumption. CLIENT must own TARGET.\nBlocks under shared preflight/dispatch limits; returns no replacement. Stale or\nforeign targets signal STALE-TARGET; other failures retain their outcome.\nPreflight cannot exclude client replacement before dispatch. Never retries.","body":"See also: `libtmux:detach-client`, `libtmux:fetch-clients`, `libtmux:lock-client`, `libtmux:outcome-status`.","seeAlso":["libtmux:detach-client","libtmux:fetch-clients","libtmux:lock-client","libtmux:outcome-status"]},"source":{"file":"src/client-operations.lisp","line":92,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-suspend-client"},{"id":"libtmux:swap-panes","publicId":"libtmux:swap-panes","qualifiedName":"libtmux:swap-panes","namespace":"libtmux","name":"swap-panes","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(swap-panes client first-pane second-pane &key (detached t) preserve-zoom (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"first-pane"},{"name":"second-pane"},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"preserve-zoom","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Swap two physical panes; return an outcome with replacements in a fresh vector.\nThe vector follows argument order. DETACHED defaults true; tmux still adjusts\nactive-pane references when panes change windows. PRESERVE-ZOOM restores zoom.\nSignals STALE-TARGET or an operational condition. Earlier captures stay local\nand unchanged; observation failure is retained separately."},"source":{"file":"src/placement.lisp","line":154,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-swap-panes"},{"id":"libtmux:swap-windows","publicId":"libtmux:swap-windows","qualifiedName":"libtmux:swap-windows","namespace":"libtmux","name":"swap-windows","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(swap-windows client first-link second-link &key select (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"first-link"},{"name":"second-link"},{"name":"select","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Swap physical windows at two captured links; return a COMMAND-OUTCOME.\nOBSERVE supplies a fresh vector of replacement links in argument order. SELECT\nselects the affected indexes in their sessions; omission keeps current indexes.\nTmux group restrictions apply. Signals STALE-TARGET or an operational condition;\nold links retain their original expected window IDs."},"source":{"file":"src/placement.lisp","line":75,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-swap-windows"},{"id":"libtmux:switch-client","publicId":"libtmux:switch-client","qualifiedName":"libtmux:switch-client","namespace":"libtmux","name":"switch-client","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(switch-client client target session &key update-environment (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"target"},{"name":"session"},{"name":"update-environment","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Switch captured terminal TARGET to SESSION and return a COMMAND-OUTCOME.\nCLIENT is the connection owning both observations. UPDATE-ENVIRONMENT defaults\nNIL, preserving the destination session environment; true applies tmux's\nupdate-environment option using TARGET's environment. OBSERVE defaults true and\nsupplies a replacement attached-client through OUTCOME-VALUE. Earlier captures\nstay unchanged; failed follow-up acquisition stays in OUTCOME-OBSERVATION-ERROR.\nBlocks for preflight, dispatch and optional observation under shared limits.\nPreflight checks the unique client name and PID/creation/tty fingerprint; tmux\ndoes not atomically guard that fingerprint at dispatch. A changed or foreign\ntarget signals STALE-TARGET. Operational failures retain their outcome; no\nmutation is retried. Control clients are not supported by this operation.","body":"See also: `libtmux:detach-client`, `libtmux:fetch-clients`, `libtmux:outcome-value`, `libtmux:refresh`.","seeAlso":["libtmux:detach-client","libtmux:fetch-clients","libtmux:outcome-value","libtmux:refresh"]},"source":{"file":"src/client-operations.lisp","line":41,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-switch-client"},{"id":"libtmux:title","publicId":"libtmux:title","qualifiedName":"libtmux:title","namespace":"libtmux","name":"title","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(title entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:title\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(title (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a copied captured pane title and presence; empty is present. No I/O."},"source":{"file":"src/model.lisp","line":188,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-title"},{"id":"libtmux:tmux-version","publicId":"libtmux:tmux-version","qualifiedName":"libtmux:tmux-version","namespace":"libtmux","name":"tmux-version","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(tmux-version client)","params":[{"name":"client"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh copy of the release string observed when CLIENT opened."},"source":{"file":"src/client.lisp","line":92,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-tmux-version"},{"id":"libtmux:unbind-key","publicId":"libtmux:unbind-key","qualifiedName":"libtmux:unbind-key","namespace":"libtmux","name":"unbind-key","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(unbind-key client key &key (table \"prefix\") cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"key"},{"name":"table","default":"\"prefix\"","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Remove exactly one KEY from TABLE and return a COMMAND-OUTCOME.\nTABLE defaults to prefix. Both strings are literal. A missing key in an\nexisting table is a native no-op; an absent table is an error. Removing its last\nbinding can delete the table, so repeated removal need not succeed. No bulk\ndeletion, reset or retry is implicit. Blocks under shared preflight/dispatch\nlimits. Success acknowledges removal and hooks; it cannot undo earlier key\nexecution. Native errors and uncertain outcomes retain their diagnostics.","body":"See also: `libtmux:bind-key`, `libtmux:error-outcome`, `libtmux:list-keys`.","seeAlso":["libtmux:bind-key","libtmux:error-outcome","libtmux:list-keys"]},"source":{"file":"src/key-bindings.lisp","line":95,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-unbind-key"},{"id":"libtmux:unlink-window","publicId":"libtmux:unlink-window","qualifiedName":"libtmux:unlink-window","namespace":"libtmux","name":"unlink-window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(unlink-window client link &key kill-if-last cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"link"},{"name":"kill-if-last","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Remove the captured LINK and return a COMMAND-OUTCOME without a value.\nTmux refuses the last reference unless KILL-IF-LAST is explicit; group membership\naffects that check. Removing a last link can destroy its window and session.\nSignals STALE-TARGET or an operational condition. Does not refresh a deleted link."},"source":{"file":"src/placement.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-unlink-window"},{"id":"libtmux:unset-environment","publicId":"libtmux:unset-environment","qualifiedName":"libtmux:unset-environment","namespace":"libtmux","name":"unset-environment","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(unset-environment client name &key scope target cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Delete NAME from one raw tmux environment table and return its outcome.\nSCOPE/TARGET follow SET-ENVIRONMENT. Absence remains tmux's native idempotent\nunset behavior. This is distinct from REMOVE-ENVIRONMENT's tombstone; use\nSET-ENVIRONMENT to store a present value.","body":"See also: `libtmux:remove-environment`, `libtmux:set-environment`.","seeAlso":["libtmux:remove-environment","libtmux:set-environment"]},"source":{"file":"src/configuration-operations.lisp","line":243,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-unset-environment"},{"id":"libtmux:unset-hook","publicId":"libtmux:unset-hook","qualifiedName":"libtmux:unset-hook","namespace":"libtmux","name":"unset-hook","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(unset-hook client name &key scope target (key nil key-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"key","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Remove one registered hook or hook-array entry and return its outcome.\nSCOPE/TARGET and KEY follow SET-HOOK. The ordinary path never uses set-hook -R,\nbut tmux may run a remaining native after-hook as a consequence of this\nset-hook command. The operation does not retry and validates the exact live\ncatalog before payload dispatch.","body":"See also: `libtmux:set-hook`.","seeAlso":["libtmux:set-hook"]},"source":{"file":"src/configuration-operations.lisp","line":217,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-unset-hook"},{"id":"libtmux:unset-option","publicId":"libtmux:unset-option","qualifiedName":"libtmux:unset-option","namespace":"libtmux","name":"unset-option","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(unset-option client name &key scope target (key nil key-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"key","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Remove one local option or array entry and return its COMMAND-OUTCOME.\nSCOPE/TARGET and KEY follow SET-OPTION. The exact live catalog validates the\nname, table and array shape before payload dispatch. Tmux's native unset/default\nbehavior applies; inherited state is not silently materialized. See SET-OPTION\nfor setting and scope rules. Never retries.","body":"See also: `libtmux:set-option`.","seeAlso":["libtmux:set-option"]},"source":{"file":"src/configuration-operations.lisp","line":189,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-unset-option"},{"id":"libtmux:unsupported-capability","publicId":"libtmux:unsupported-capability","qualifiedName":"libtmux:unsupported-capability","namespace":"libtmux","name":"unsupported-capability","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The live daemon does not support the requested operation contract."},"source":{"file":"src/conditions.lisp","line":47,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-unsupported-capability"},{"id":"libtmux:unsupported-configuration","publicId":"libtmux:unsupported-configuration","qualifiedName":"libtmux:unsupported-configuration","namespace":"libtmux","name":"unsupported-configuration","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Daemon configuration overrides a required built-in command contract."},"source":{"file":"src/conditions.lisp","line":60,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-unsupported-configuration"},{"id":"libtmux:unsupported-platform","publicId":"libtmux:unsupported-platform","qualifiedName":"libtmux:unsupported-platform","namespace":"libtmux","name":"unsupported-platform","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The selected runtime lacks a qualified backend or required facility.\nERROR-FEATURE identifies the requirement; ERROR-CAUSE retains a failed probe\nwhen available. OPEN-CLIENT checks the profile before resolving PROGRAM.","body":"See also: `libtmux:error-cause`, `libtmux:error-feature`, `libtmux:open-client`.","seeAlso":["libtmux:error-cause","libtmux:error-feature","libtmux:open-client"]},"source":{"file":"src/conditions.lisp","line":39,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-unsupported-platform"},{"id":"libtmux:unsupported-tmux","publicId":"libtmux:unsupported-tmux","qualifiedName":"libtmux:unsupported-tmux","namespace":"libtmux","name":"unsupported-tmux","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The selected tmux does not meet the supported version floor."},"source":{"file":"src/conditions.lisp","line":45,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-unsupported-tmux"},{"id":"libtmux:wait-for","publicId":"libtmux:wait-for","qualifiedName":"libtmux:wait-for","namespace":"libtmux","name":"wait-for","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(wait-for client channel &key (operation :wait) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"channel"},{"name":"operation","default":":wait","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Wait, signal, lock or unlock the literal CHANNEL; return a COMMAND-OUTCOME.\nOPERATION is :WAIT (default), :SIGNAL, :LOCK or :UNLOCK. CHANNEL is a nonempty\nstring without NUL. This call performs I/O on an existing daemon. :WAIT and\n:LOCK require tmux 3.8, whose client-loss handling removes queued waiters;\nolder daemons signal UNSUPPORTED-CAPABILITY before dispatch. :SIGNAL and\n:UNLOCK support the library's tmux floor.","body":"A signal wakes current waiters or retains one pending wake. Repeated signals\nare not an idempotent latch or a counting semaphore. Locks have no owner and\nsurvive this call and CLOSE-CLIENT within the daemon's lifetime; unlock them\nexplicitly. Continuation does not identify a sender; server shutdown can flush\nwaiting requests. Signals and locks\nshare a channel, so applications should use separate names for those protocols.\n\nOne operation owns CLIENT at a time. Use another client to signal or unlock\na blocked call. TIMEOUT and OUTPUT-LIMIT cover preflight and waiting together.\nCancellation or lost acknowledgement can leave signal consumption or a lock\ngrant uncertain; inspect ERROR-OUTCOME. Never retries or unlocks automatically.\nSignals INVALID-ARGUMENT, COMMAND-FAILED or an operational condition.\n\nSee also: `libtmux:cancel`, `libtmux:close-client`, `libtmux:error-outcome`, `libtmux:outcome-status`, `libtmux:unsupported-capability`.","seeAlso":["libtmux:cancel","libtmux:close-client","libtmux:error-outcome","libtmux:outcome-status","libtmux:unsupported-capability"]},"source":{"file":"src/server-operations.lisp","line":129,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-wait-for"},{"id":"libtmux:width","publicId":"libtmux:width","qualifiedName":"libtmux:width","namespace":"libtmux","name":"width","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(width entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:width\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(width (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"},{"identity":"[\"libtmux:width\",[],[\"libtmux:window/type\"]]","methodKind":"function","raw":"(width (entity libtmux:window))","params":[{"name":"entity","type":"libtmux:window"}],"label":"Primary method: libtmux:window"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the positive captured width and presence, without I/O."},"source":{"file":"src/model.lisp","line":178,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-width"},{"id":"libtmux:window/function","publicId":"libtmux:window/function","qualifiedName":"libtmux:window","namespace":"libtmux","name":"window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(window entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:window/function\",[],[\"libtmux:window-link\"]]","methodKind":"function","raw":"(window (link libtmux:window-link))","params":[{"name":"link","type":"libtmux:window-link"}],"label":"Primary method: libtmux:window-link"},{"identity":"[\"libtmux:window/function\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(window (pane libtmux:pane))","params":[{"name":"pane","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the locally captured physical window of a pane or link."},"source":{"file":"src/model.lisp","line":61,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-window-function"},{"id":"libtmux:window/type","publicId":"libtmux:window/type","qualifiedName":"libtmux:window","namespace":"libtmux","name":"window","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A physical window shared by zero or more captured links."},"source":{"file":"src/model.lisp","line":26,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:entity"],"slug":"libtmux-window-type"},{"id":"libtmux:window-link","publicId":"libtmux:window-link","qualifiedName":"libtmux:window-link","namespace":"libtmux","name":"window-link","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A captured session/index locator with its expected physical window ID."},"source":{"file":"src/model.lisp","line":28,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:entity"],"slug":"libtmux-window-link"},{"id":"libtmux:window-links","publicId":"libtmux:window-links","qualifiedName":"libtmux:window-links","namespace":"libtmux","name":"window-links","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(window-links observation)","params":[{"name":"observation"}]},{"identity":"[\"libtmux:window-links\",[],[\"libtmux:session/type\"]]","methodKind":"function","raw":"(window-links (session libtmux:session))","params":[{"name":"session","type":"libtmux:session"}],"label":"Primary method: libtmux:session"},{"identity":"[\"libtmux:window-links\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(window-links (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"},{"identity":"[\"libtmux:window-links\",[],[\"libtmux:window/type\"]]","methodKind":"function","raw":"(window-links (window libtmux:window))","params":[{"name":"window","type":"libtmux:window"}],"label":"Primary method: libtmux:window"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return every captured window link in wire order as a fresh vector. No I/O."},"source":{"file":"src/model.lisp","line":56,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-window-links"},{"id":"libtmux:windows","publicId":"libtmux:windows","qualifiedName":"libtmux:windows","namespace":"libtmux","name":"windows","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(windows observation)","params":[{"name":"observation"}]},{"identity":"[\"libtmux:windows\",[],[\"libtmux:session/type\"]]","methodKind":"function","raw":"(windows (session libtmux:session))","params":[{"name":"session","type":"libtmux:session"}],"label":"Primary method: libtmux:session"},{"identity":"[\"libtmux:windows\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(windows (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of captured windows, without I/O.\nSnapshot windows are physical entities in first-occurrence order. Session\nwindows contain one item per link and preserve repeated physical windows."},"source":{"file":"src/model.lisp","line":49,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-windows"},{"id":"libtmux:with-client","publicId":"libtmux:with-client","qualifiedName":"libtmux:with-client","namespace":"libtmux","name":"with-client","kind":"function","modifiers":["macro"],"parent":"libtmux","signatures":[{"raw":"(with-client (name &rest options) &body body)","params":[{"name":"(name &rest options)"},{"name":"body","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Bind NAME to a client and close the original resource on every exit.\nBody declarations and multiple values are preserved. Cleanup failure signals\nafter normal return; during unwind it is retained in CLIENT-CLEANUP-FAILURES."},"source":{"file":"src/client.lisp","line":270,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-with-client"},{"id":"libtmux:with-daemon","publicId":"libtmux:with-daemon","qualifiedName":"libtmux:with-daemon","namespace":"libtmux","name":"with-daemon","kind":"function","modifiers":["macro"],"parent":"libtmux","signatures":[{"raw":"(with-daemon (name &rest options) &body body)","params":[{"name":"(name &rest options)"},{"name":"body","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Bind a newly started daemon and stop the original owner on every exit.\nAccepts START-DAEMON keyword options and body declarations. Preserves multiple\nvalues and the primary nonlocal exit. A cleanup failure after normal completion\nsignals; during an existing exit it is retained for explicit inspection/retry.","body":"See also: `libtmux:pending-daemon-cleanups`, `libtmux:start-daemon`, `libtmux:stop-daemon`.","seeAlso":["libtmux:pending-daemon-cleanups","libtmux:start-daemon","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":157,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-with-daemon"},{"id":"libtmux.control","publicId":"libtmux.control","qualifiedName":"libtmux.control","namespace":"","name":"libtmux.control","kind":"module","modifiers":[],"signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Persistent native tmux commands and bounded byte events.\nLoad the optional LIBTMUX/CONTROL system. The qualified backend requires the\ncore SBCL/Linux profile and an actual tmux daemon >=3.8. Connections own a\nworker and process independently of their originating LIBTMUX:CLIENT.\nSubmission is nonblocking; waits use condition notifications. One worker\nserializes requests and reads all protocol data. No application callback\nruns in that worker. Commands use tmux argv, not shell source.\nResults and events own their mutable bytes and containers. A completed\ncommand queue does not establish application readiness. No automatic replay\nor reconnect occurs. Explicit RECONNECT renews the original core client's\ngeneration and returns fresh observations.\nSee also: WITH-CONNECTION, WITH-RECONNECTION, SUBMIT-COMMAND, NEXT-EVENT."},"source":{"file":"src/control.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control"},{"id":"libtmux.control:await-request","publicId":"libtmux.control:await-request","qualifiedName":"libtmux.control:await-request","namespace":"libtmux.control","name":"await-request","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(await-request request &key (timeout 30))","params":[{"name":"request"},{"name":"timeout","default":"30","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Wait for owned result/:READY, or return NIL/:TIMEOUT without cancelling.\nTIMEOUT is nonnegative real seconds or NIL for an unbounded wait. Zero polls.\nThe result plist contains :STATUS, :OUTPUT bytes, :WIRE-TAIL bytes,\n:TRUNCATED-P, :EFFECT, :DISPATCHED-P, :REASON and :REPLY-COUNT. Wire tail is\nunterminated protocol data, not decoded output. Positive stdin progress makes\nDISPATCHED-P true conservatively, even for an incomplete line. A dispatched\nfailed/cancelled/timed-out/closed request may have effects; never infer rollback.\nCOMPLETED means the command queue reached its marker, not application readiness.\nOnly framed replies enter OUTPUT; unframed lines remain notification events.\nRepeated awaits return fresh byte storage. No exception hides a terminal result.","body":"See also: `libtmux.control:cancel-request`, `libtmux.control:next-event`, `libtmux.control:submit-command`.","seeAlso":["libtmux.control:cancel-request","libtmux.control:next-event","libtmux.control:submit-command"]},"source":{"file":"src/control.lisp","line":290,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-await-request"},{"id":"libtmux.control:cancel-request","publicId":"libtmux.control:cancel-request","qualifiedName":"libtmux.control:cancel-request","namespace":"libtmux.control","name":"cancel-request","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(cancel-request request)","params":[{"name":"request"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Request cancellation; return true only when this call changes live work.\nQueued work is removed without dispatch or connection closure. Active work\ncloses its connection and retires unissued queued requests. The worker records\nwrite progress before publishing :CANCELLED; await it to inspect that evidence.\nCancellation winning before completion preserves :CANCELLED; an already terminal\nrequest is unchanged. No command is replayed and dispatched effects are not undone.","body":"See also: `libtmux.control:await-request`, `libtmux.control:close-connection`, `libtmux.control:request-state`.","seeAlso":["libtmux.control:await-request","libtmux.control:close-connection","libtmux.control:request-state"]},"source":{"file":"src/control.lisp","line":305,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-cancel-request"},{"id":"libtmux.control:close-connection","publicId":"libtmux.control:close-connection","qualifiedName":"libtmux.control:close-connection","namespace":"libtmux.control","name":"close-connection","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(close-connection connection)","params":[{"name":"connection"}]},{"identity":"[\"libtmux.control:close-connection\",[],[\"libtmux.control:connection\"]]","methodKind":"function","raw":"(close-connection (connection libtmux.control:connection))","params":[{"name":"connection","type":"libtmux.control:connection"}],"label":"Primary method: libtmux.control:connection"}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Close this connection's worker and process; return NIL after cleanup.\nLeave the tmux daemon running. Concurrent closes serialize; repeated successful\nclose is harmless. In-flight results retain partial output and dispatch state.\nCleanup can add time beyond request deadlines. Failure signals\nCONNECTION-CLEANUP-FAILED and retains this resource for explicit retry.","body":"See also: `libtmux.control:connection-cleanup-failures`, `libtmux.control:pending-cleanups`, `libtmux.control:with-connection`.","seeAlso":["libtmux.control:connection-cleanup-failures","libtmux.control:pending-cleanups","libtmux.control:with-connection"]},"source":{"file":"src/control.lisp","line":153,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-close-connection"},{"id":"libtmux.control:connection","publicId":"libtmux.control:connection","qualifiedName":"libtmux.control:connection","namespace":"libtmux.control","name":"connection","kind":"class","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"An owned persistent tmux connection with one protocol worker.\nUse WITH-CONNECTION or CLOSE-CONNECTION to release it. Closing the originating\ncore client does not close this resource. Captured core observations remain\nseparate; raw control commands do not refresh them. RECONNECT requires that\noriginal core client to remain open.","body":"See also: `libtmux.control:connection-state`, `libtmux.control:open-connection`, `libtmux.control:pending-cleanups`, `libtmux.control:reconnect`.","seeAlso":["libtmux.control:connection-state","libtmux.control:open-connection","libtmux.control:pending-cleanups","libtmux.control:reconnect"]},"source":{"file":"src/control.lisp","line":24,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-control-connection"},{"id":"libtmux.control:connection-busy","publicId":"libtmux.control:connection-busy","qualifiedName":"libtmux.control:connection-busy","namespace":"libtmux.control","name":"connection-busy","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"The bounded request queue, including active work, is full.\nSubmission did not dispatch this command. See also: SUBMIT-COMMAND."},"source":{"file":"src/control.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.control:connection-error","libtmux:client-busy"],"slug":"libtmux-control-connection-busy"},{"id":"libtmux.control:connection-cleanup-failed","publicId":"libtmux.control:connection-cleanup-failed","qualifiedName":"libtmux.control:connection-cleanup-failed","namespace":"libtmux.control","name":"connection-cleanup-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Closing failed; retry CLOSE-CONNECTION on ERROR-CONNECTION.\nThe resource remains discoverable through PENDING-CLEANUPS. No mutation is\nreplayed. See also: CONNECTION-CLEANUP-FAILURES, LIBTMUX:ERROR-CAUSE."},"source":{"file":"src/control.lisp","line":55,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.control:connection-error","libtmux:cleanup-failed"],"slug":"libtmux-control-connection-cleanup-failed"},{"id":"libtmux.control:connection-cleanup-failures","publicId":"libtmux.control:connection-cleanup-failures","qualifiedName":"libtmux.control:connection-cleanup-failures","namespace":"libtmux.control","name":"connection-cleanup-failures","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(connection-cleanup-failures connection)","params":[{"name":"connection"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return a fresh vector of the last 16 close failures, newest first. No I/O.\nCondition objects are retained by identity. WITH-CONNECTION records secondary\ncleanup failures while preserving an existing body error or nonlocal exit.","body":"See also: `libtmux.control:close-connection`, `libtmux.control:pending-cleanups`.","seeAlso":["libtmux.control:close-connection","libtmux.control:pending-cleanups"]},"source":{"file":"src/control.lisp","line":124,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-connection-cleanup-failures"},{"id":"libtmux.control:connection-closed","publicId":"libtmux.control:connection-closed","qualifiedName":"libtmux.control:connection-closed","namespace":"libtmux.control","name":"connection-closed","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Submission attempted on a closing or closed connection.","body":"See also: `libtmux.control:connection-state`, `libtmux.control:submit-command`.","seeAlso":["libtmux.control:connection-state","libtmux.control:submit-command"]},"source":{"file":"src/control.lisp","line":60,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.control:connection-error","libtmux:client-closed"],"slug":"libtmux-control-connection-closed"},{"id":"libtmux.control:connection-error","publicId":"libtmux.control:connection-error","qualifiedName":"libtmux.control:connection-error","namespace":"libtmux.control","name":"connection-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"A control failure retaining its connection and original cause.","body":"See also: `libtmux:error-cause`, `libtmux.control:error-connection`.","seeAlso":["libtmux:error-cause","libtmux.control:error-connection"]},"source":{"file":"src/control.lisp","line":44,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-control-connection-error"},{"id":"libtmux.control:connection-failure","publicId":"libtmux.control:connection-failure","qualifiedName":"libtmux.control:connection-failure","namespace":"libtmux.control","name":"connection-failure","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(connection-failure connection)","params":[{"name":"connection"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return the retained worker failure condition, or NIL, without I/O.\nConditions retain identity; byte data comes from NEXT-EVENT or AWAIT-REQUEST.","body":"See also: `libtmux.control:connection-cleanup-failures`, `libtmux.control:connection-state`.","seeAlso":["libtmux.control:connection-cleanup-failures","libtmux.control:connection-state"]},"source":{"file":"src/control.lisp","line":116,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-connection-failure"},{"id":"libtmux.control:connection-stale","publicId":"libtmux.control:connection-stale","qualifiedName":"libtmux.control:connection-stale","namespace":"libtmux.control","name":"connection-stale","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"The original control client generation, daemon or session changed.\nERROR-CONNECTION and LIBTMUX:ERROR-TARGET retain the old public connection.\nAcquire fresh observations and use OPEN-CONNECTION explicitly; stale authority\ncannot authorize reconnection to a replacement target. No request is replayed.","body":"See also: `libtmux:error-cause`, `libtmux.control:reconnect`, `libtmux:stale-target`.","seeAlso":["libtmux:error-cause","libtmux.control:reconnect","libtmux:stale-target"]},"source":{"file":"src/control.lisp","line":68,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.control:connection-error","libtmux:stale-target"],"slug":"libtmux-control-connection-stale"},{"id":"libtmux.control:connection-start-failed","publicId":"libtmux.control:connection-start-failed","qualifiedName":"libtmux.control:connection-start-failed","namespace":"libtmux.control","name":"connection-start-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Startup failed after allocating a connection resource.\nERROR-CONNECTION retains the resource even if cleanup also failed. Core\nargument and unsupported-capability errors before allocation stay core types.","body":"See also: `libtmux.control:close-connection`, `libtmux.control:open-connection`, `libtmux.control:pending-cleanups`.","seeAlso":["libtmux.control:close-connection","libtmux.control:open-connection","libtmux.control:pending-cleanups"]},"source":{"file":"src/control.lisp","line":49,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.control:connection-error","libtmux:command-failed"],"slug":"libtmux-control-connection-start-failed"},{"id":"libtmux.control:connection-state","publicId":"libtmux.control:connection-state","qualifiedName":"libtmux.control:connection-state","namespace":"libtmux.control","name":"connection-state","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(connection-state connection)","params":[{"name":"connection"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return :STARTING, :READY, :CLOSING or :CLOSED without I/O.\nThis is an observation, not a lease for subsequent submission.","body":"See also: `libtmux.control:connection-failure`, `libtmux.control:submit-command`.","seeAlso":["libtmux.control:connection-failure","libtmux.control:submit-command"]},"source":{"file":"src/control.lisp","line":108,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-connection-state"},{"id":"libtmux.control:error-connection","publicId":"libtmux.control:error-connection","qualifiedName":"libtmux.control:error-connection","namespace":"libtmux.control","name":"error-connection","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(error-connection condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.control:error-connection\",[],[\"libtmux.control:connection-error\"]]","methodKind":"function","raw":"(error-connection (condition libtmux.control:connection-error))","params":[{"name":"condition","type":"libtmux.control:connection-error"}],"label":"Primary method: libtmux.control:connection-error"}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return the retained connection implicated in a CONNECTION-ERROR. No I/O.","body":"See also: `libtmux.control:close-connection`, `libtmux:error-cause`.","seeAlso":["libtmux.control:close-connection","libtmux:error-cause"]},"source":{"file":"src/control.lisp","line":40,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-error-connection"},{"id":"libtmux.control:next-event","publicId":"libtmux.control:next-event","qualifiedName":"libtmux.control:next-event","namespace":"libtmux.control","name":"next-event","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(next-event connection &key (timeout 30))","params":[{"name":"connection"},{"name":"timeout","default":"30","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Wait for an owned event/:READY or NIL/:TIMEOUT on this connection.\nTIMEOUT is nonnegative real seconds or NIL; zero polls. :OUTPUT has :PANE,\n:AGE, :EXTENDED-P and :DATA octets, preserving invalid UTF-8. :NOTIFICATION\ncontains a raw line without LF in :DATA, preserving unknown labels and bytes.\nNative %exit is a notification; transport end is reported independently.\nUnsolicited :REPLY also has :FAILED-P.\n:GAP reports :EVENTS and :BYTES dropped from the bounded queue. An oversized\nnew event reports loss without discarding retained smaller events.\nLocal loss does not pause tmux. Native pause/continue notices remain raw\nnotifications and are distinct from local :GAP delivery.\n:END follows retained events, with :REASON, :EXIT-CODE, :DIAGNOSTICS bytes,\n:WIRE-TAIL bytes and :CAUSE. After end, repeated reads return end immediately.\nCauses retain condition identity. No application callback executes in the reader.","body":"See also: `libtmux.control:await-request`, `libtmux.control:connection-failure`, `libtmux.control:open-connection`.","seeAlso":["libtmux.control:await-request","libtmux.control:connection-failure","libtmux.control:open-connection"]},"source":{"file":"src/control.lisp","line":316,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-next-event"},{"id":"libtmux.control:open-connection","publicId":"libtmux.control:open-connection","qualifiedName":"libtmux.control:open-connection","namespace":"libtmux.control","name":"open-connection","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(open-connection client session &key (timeout 30) (request-limit 16) (event-limit 256) (event-byte-limit 4194304) (reply-byte-limit 1048576))","params":[{"name":"client"},{"name":"session"},{"name":"timeout","default":"30","optional":true,"keywordOnly":true},{"name":"request-limit","default":"16","optional":true,"keywordOnly":true},{"name":"event-limit","default":"256","optional":true,"keywordOnly":true},{"name":"event-byte-limit","default":"4194304","optional":true,"keywordOnly":true},{"name":"reply-byte-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Attach a separate owned control connection to a captured SESSION.\nCLIENT supplies the core endpoint and authority. Startup preflights the target\nand requires the live daemon to be >=3.8. TIMEOUT bounds startup admission and\nsupervised execution; platform preparation and cleanup add caller wall time.\nREQUEST-LIMIT includes active and queued work. Events drop oldest entries at\nEVENT-LIMIT or EVENT-BYTE-LIMIT and report loss. REPLY-BYTE-LIMIT bounds each\nrequest's retained output; overflow closes the connection with a cause.\nThis call blocks until ready or failed. All limits must be positive integers\nexcept the nonnegative real TIMEOUT. No daemon is started or terminated.\nAttachment preserves the stored session environment; native attach hooks and\nserver lifecycle policies still apply. Readiness checks the observed daemon\nwitness after attachment, so a refused candidate may have appeared briefly.","body":"See also: `libtmux.control:close-connection`, `libtmux.control:next-event`, `libtmux.control:reconnect`, `libtmux.control:submit-command`, `libtmux.control:with-connection`.","seeAlso":["libtmux.control:close-connection","libtmux.control:next-event","libtmux.control:reconnect","libtmux.control:submit-command","libtmux.control:with-connection"]},"source":{"file":"src/control.lisp","line":82,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-open-connection"},{"id":"libtmux.control:pending-cleanups","publicId":"libtmux.control:pending-cleanups","qualifiedName":"libtmux.control:pending-cleanups","namespace":"libtmux.control","name":"pending-cleanups","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(pending-cleanups)","params":[]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return a fresh vector of connections retaining failed cleanup work. No I/O.\nRetry CLOSE-CONNECTION explicitly. Successful close removes the entry.","body":"See also: `libtmux.control:connection-cleanup-failed`, `libtmux.control:error-connection`.","seeAlso":["libtmux.control:connection-cleanup-failed","libtmux.control:error-connection"]},"source":{"file":"src/control.lisp","line":133,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-pending-cleanups"},{"id":"libtmux.control:reconnect","publicId":"libtmux.control:reconnect","qualifiedName":"libtmux.control:reconnect","namespace":"libtmux.control","name":"reconnect","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(reconnect connection &key (timeout 30) (request-limit nil request-limit-p) (event-limit nil event-limit-p) (event-byte-limit nil event-byte-limit-p) (reply-byte-limit nil reply-byte-limit-p))","params":[{"name":"connection"},{"name":"timeout","default":"30","optional":true,"keywordOnly":true},{"name":"request-limit","default":"nil","optional":true,"keywordOnly":true},{"name":"event-limit","default":"nil","optional":true,"keywordOnly":true},{"name":"event-byte-limit","default":"nil","optional":true,"keywordOnly":true},{"name":"reply-byte-limit","default":"nil","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Retire CONNECTION and return a fresh connection and complete snapshot.\nUse the original core client and exact session ID. The client must remain open\nin the original generation. Explicitly supplied limits must be positive integers;\nomitted queue/reply limits inherit the old connection. TIMEOUT is nonnegative\nreal seconds shared across preflight, retirement, recapture and startup;\npreparation and cleanup can add wall time. Capture output shares the core\nclient's output budget. Concurrent core work signals LIBTMUX:CLIENT-BUSY.\nPreflight refusal leaves a live old connection alone. After successful close,\nrenew the core generation even if later work fails. Every earlier core capture\nfrom that client becomes stale for operations, while local data remains usable.\nThe returned snapshot precedes new attachment; it does not include that new\nfrontend. A closing/closed old resource remains reconnectable with valid origin.\nOld requests/results/events stay on the retired resource. Pending work is closed,\nnever replayed; dispatched effects can remain uncertain. Other separately owned\ncontrol resources remain independent. No event continuity or replay is implied.\nThe CLOSE-CONNECTION generic runs on the caller thread; its failures are retained.\nCONNECTION-STALE refuses changed origin/session/daemon. Old cleanup failures\nretain the old resource; startup failures retain the new candidate through\nCONNECTION-START-FAILED. After failed cutover, acquire/select and open anew.\nUse WITH-RECONNECTION or close the returned resource explicitly.","body":"See also: `libtmux.control:await-request`, `libtmux.control:close-connection`, `libtmux.control:connection-stale`, `libtmux.control:with-reconnection`.","seeAlso":["libtmux.control:await-request","libtmux.control:close-connection","libtmux.control:connection-stale","libtmux.control:with-reconnection"]},"source":{"file":"src/control.lisp","line":170,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-reconnect"},{"id":"libtmux.control:request","publicId":"libtmux.control:request","qualifiedName":"libtmux.control:request","namespace":"libtmux.control","name":"request","kind":"class","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"One queued command and its retained dispatch/result evidence.\nKeep this handle to await or cancel work. A wait timeout leaves it live.","body":"See also: `libtmux.control:await-request`, `libtmux.control:cancel-request`, `libtmux.control:submit-command`.","seeAlso":["libtmux.control:await-request","libtmux.control:cancel-request","libtmux.control:submit-command"]},"source":{"file":"src/control.lisp","line":34,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-control-request"},{"id":"libtmux.control:request-state","publicId":"libtmux.control:request-state","qualifiedName":"libtmux.control:request-state","namespace":"libtmux.control","name":"request-state","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(request-state request)","params":[{"name":"request"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return retained request state without I/O.\nStates are :QUEUED, :WRITING, :RUNNING, :COMPLETED, :FAILED, :TIMED-OUT,\n:CANCELLED and :CLOSED. A terminal result is never replaced by cancellation.","body":"See also: `libtmux.control:await-request`, `libtmux.control:cancel-request`.","seeAlso":["libtmux.control:await-request","libtmux.control:cancel-request"]},"source":{"file":"src/control.lisp","line":279,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-request-state"},{"id":"libtmux.control:submit-command","publicId":"libtmux.control:submit-command","qualifiedName":"libtmux.control:submit-command","namespace":"libtmux.control","name":"submit-command","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(submit-command connection argv &key effect (timeout 30))","params":[{"name":"connection"},{"name":"argv"},{"name":"effect","optional":true,"keywordOnly":true},{"name":"timeout","default":"30","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Queue copied tmux ARGV and return a REQUEST without waiting for its reply.\nEFFECT must explicitly be :READ or :MUTATION; it records caller intent, not a\ncommand restriction. TIMEOUT is a nonnegative real deadline budget starting at\nsubmission, including queue time. A zero budget can expire before dispatch.\nCommands execute serially. Full queues signal CONNECTION-BUSY; closing ones\nsignal CONNECTION-CLOSED. Use argv for tmux syntax, not shell interpolation.\nThis raw path does not validate or refresh captured operational targets.","body":"See also: `libtmux.control:await-request`, `libtmux.control:cancel-request`, `libtmux.control:request-state`.","seeAlso":["libtmux.control:await-request","libtmux.control:cancel-request","libtmux.control:request-state"]},"source":{"file":"src/control.lisp","line":261,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-submit-command"},{"id":"libtmux.control:with-connection","publicId":"libtmux.control:with-connection","qualifiedName":"libtmux.control:with-connection","namespace":"libtmux.control","name":"with-connection","kind":"function","modifiers":["macro"],"parent":"libtmux.control","signatures":[{"raw":"(with-connection (name client session &rest options) &body body)","params":[{"name":"(name client session &rest options)"},{"name":"body","variadic":"positional"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Bind NAME to a control connection and close the original resource on exit.\nEvaluate CLIENT, SESSION and OPEN-CONNECTION options once. BODY accepts\ndeclarations and returns all its values. Rebinding NAME cannot redirect cleanup.\nAfter normal return, propagate cleanup failure; during an error or nonlocal\nexit, preserve that exit and record cleanup failure on the connection.","body":"See also: `libtmux.control:close-connection`, `libtmux.control:connection-cleanup-failures`, `libtmux.control:open-connection`.","seeAlso":["libtmux.control:close-connection","libtmux.control:connection-cleanup-failures","libtmux.control:open-connection"]},"source":{"file":"src/control.lisp","line":236,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-with-connection"},{"id":"libtmux.control:with-reconnection","publicId":"libtmux.control:with-reconnection","qualifiedName":"libtmux.control:with-reconnection","namespace":"libtmux.control","name":"with-reconnection","kind":"function","modifiers":["macro"],"parent":"libtmux.control","signatures":[{"raw":"(with-reconnection (name snapshot previous &rest options) &body body)","params":[{"name":"(name snapshot previous &rest options)"},{"name":"body","variadic":"positional"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Bind a fresh NAME and SNAPSHOT from explicit RECONNECT; close NAME on exit.\nEvaluate PREVIOUS and options once. BODY permits declarations and returns all\nvalues. Rebinding either visible name cannot redirect cleanup. Preserve primary\nerrors/nonlocal exits and record secondary cleanup errors on the new connection.\nThe previous resource retains its own old results and events.","body":"See also: `libtmux.control:connection-cleanup-failures`, `libtmux.control:reconnect`, `libtmux.control:with-connection`.","seeAlso":["libtmux.control:connection-cleanup-failures","libtmux.control:reconnect","libtmux.control:with-connection"]},"source":{"file":"src/control.lisp","line":247,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-control-with-reconnection"},{"id":"libtmux.json","publicId":"libtmux.json","qualifiedName":"libtmux.json","namespace":"","name":"libtmux.json","kind":"module","modifiers":[],"signatures":[],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"Bounded JSON interchange for native libtmux query filters.\nREAD-FILTER accepts a complete JSON string in schema libtmux.lisp.filter/1.\nIt resolves only registered names, rejects duplicate or unknown members, and\nnever evaluates input as Lisp code. WRITE-FILTER serializes only compiled\ndeclarative filters; native function predicates are not query documents."},"source":{"file":"src/json.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-json"},{"id":"libtmux.json:document-limit","publicId":"libtmux.json:document-limit","qualifiedName":"libtmux.json:document-limit","namespace":"libtmux.json","name":"document-limit","kind":"function","modifiers":[],"parent":"libtmux.json","signatures":[{"raw":"(document-limit condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.json:document-limit\",[],[\"libtmux.json:invalid-filter-document\"]]","methodKind":"function","raw":"(document-limit (condition libtmux.json:invalid-filter-document))","params":[{"name":"condition","type":"libtmux.json:invalid-filter-document"}],"label":"Primary method: libtmux.json:invalid-filter-document"}],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"Return the exhausted document limit name, or NIL."},"source":{"file":"src/json.lisp","line":18,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-json-document-limit"},{"id":"libtmux.json:document-path","publicId":"libtmux.json:document-path","qualifiedName":"libtmux.json:document-path","namespace":"libtmux.json","name":"document-path","kind":"function","modifiers":[],"parent":"libtmux.json","signatures":[{"raw":"(document-path condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.json:document-path\",[],[\"libtmux.json:invalid-filter-document\"]]","methodKind":"function","raw":"(document-path (condition libtmux.json:invalid-filter-document))","params":[{"name":"condition","type":"libtmux.json:invalid-filter-document"}],"label":"Primary method: libtmux.json:invalid-filter-document"}],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"Return a fresh vector locating a filter-document error."},"source":{"file":"src/json.lisp","line":15,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-json-document-path"},{"id":"libtmux.json:filter-document-limit-exceeded","publicId":"libtmux.json:filter-document-limit-exceeded","qualifiedName":"libtmux.json:filter-document-limit-exceeded","namespace":"libtmux.json","name":"filter-document-limit-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux.json","signatures":[],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"A filter document exceeds a configured parsing or query-data limit."},"source":{"file":"src/json.lisp","line":27,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.json:invalid-filter-document"],"slug":"libtmux-json-filter-document-limit-exceeded"},{"id":"libtmux.json:invalid-filter-document","publicId":"libtmux.json:invalid-filter-document","qualifiedName":"libtmux.json:invalid-filter-document","namespace":"libtmux.json","name":"invalid-filter-document","kind":"exception","modifiers":["opaque"],"parent":"libtmux.json","signatures":[],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"A filter document is malformed, unknown, or semantically invalid."},"source":{"file":"src/json.lisp","line":21,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-json-invalid-filter-document"},{"id":"libtmux.json:read-filter","publicId":"libtmux.json:read-filter","qualifiedName":"libtmux.json:read-filter","namespace":"libtmux.json","name":"read-filter","kind":"function","modifiers":[],"parent":"libtmux.json","signatures":[{"raw":"(read-filter source &key (allow-regex nil) (max-input-bytes +default-max-input-bytes+) (max-depth +default-max-depth+) (max-nodes +default-max-nodes+) (max-string-length +default-max-string-length+) (max-membership +default-max-membership+) (max-integer-digits +default-max-integer-digits+))","params":[{"name":"source"},{"name":"allow-regex","default":"nil","optional":true,"keywordOnly":true},{"name":"max-input-bytes","default":"+default-max-input-bytes+","optional":true,"keywordOnly":true},{"name":"max-depth","default":"+default-max-depth+","optional":true,"keywordOnly":true},{"name":"max-nodes","default":"+default-max-nodes+","optional":true,"keywordOnly":true},{"name":"max-string-length","default":"+default-max-string-length+","optional":true,"keywordOnly":true},{"name":"max-membership","default":"+default-max-membership+","optional":true,"keywordOnly":true},{"name":"max-integer-digits","default":"+default-max-integer-digits+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"Read one bounded libtmux.lisp.filter/1 JSON string into a compiled filter.\nExternal names resolve through closed registries and are never interned. Regex\nnodes are rejected unless ALLOW-REGEX is true and libtmux/regex is loaded.\nParser limits bound UTF-8 input bytes, nesting, JSON nodes, strings, membership\narrays and integer-token digits. Decimal and exponent number syntax is rejected\nbefore conversion. Parser limits do not interrupt CL-PPCRE execution."},"source":{"file":"src/json.lisp","line":399,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-json-read-filter"},{"id":"libtmux.json:write-filter","publicId":"libtmux.json:write-filter","qualifiedName":"libtmux.json:write-filter","namespace":"libtmux.json","name":"write-filter","kind":"function","modifiers":[],"parent":"libtmux.json","signatures":[{"raw":"(write-filter filter &key stream (pretty nil))","params":[{"name":"filter"},{"name":"stream","optional":true,"keywordOnly":true},{"name":"pretty","default":"nil","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"Serialize a COMPILED-FILTER as one libtmux.lisp.filter/1 JSON document.\nReturn a fresh string when STREAM is NIL; otherwise write to the supplied open\noutput character stream and return NIL without closing it. Pathnames and binary\nstreams are rejected. The wire contract is native to this port and does not\nimply cross-port regex or query equivalence."},"source":{"file":"src/json.lisp","line":527,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-json-write-filter"},{"id":"libtmux.query","publicId":"libtmux.query","qualifiedName":"libtmux.query","namespace":"","name":"libtmux.query","kind":"module","modifiers":[],"signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Validated native queries over finite captured libtmux observations.\nLoading this package adds no transport dependency and performs no tmux I/O."},"source":{"file":"src/query.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query"},{"id":"libtmux.query:ambiguous-match","publicId":"libtmux.query:ambiguous-match","qualifiedName":"libtmux.query:ambiguous-match","namespace":"libtmux.query","name":"ambiguous-match","kind":"exception","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Strict selection received more than one item."},"source":{"file":"src/query.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-query-ambiguous-match"},{"id":"libtmux.query:compile-filter","publicId":"libtmux.query:compile-filter","qualifiedName":"libtmux.query:compile-filter","namespace":"libtmux.query","name":"compile-filter","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(compile-filter model form &key (max-depth +default-max-depth+) (max-input-visits +default-max-input-visits+) (max-membership +default-max-membership+) (max-string-length +default-max-string-length+) (max-retained-characters +default-max-retained-characters+) (max-execution-visits +default-max-execution-visits+))","params":[{"name":"model"},{"name":"form"},{"name":"max-depth","default":"+default-max-depth+","optional":true,"keywordOnly":true},{"name":"max-input-visits","default":"+default-max-input-visits+","optional":true,"keywordOnly":true},{"name":"max-membership","default":"+default-max-membership+","optional":true,"keywordOnly":true},{"name":"max-string-length","default":"+default-max-string-length+","optional":true,"keywordOnly":true},{"name":"max-retained-characters","default":"+default-max-retained-characters+","optional":true,"keywordOnly":true},{"name":"max-execution-visits","default":"+default-max-execution-visits+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Compile FORM for captured MODEL into an owned local filter.\nScalar and registered relation operators perform no I/O and never evaluate\nFORM as Lisp code. Regex operators require the optional regex system.\nKeyword limits bound container depth, input visits, membership size, copied\ncharacter counts and later predicate execution. Limit failures signal\nQUERY-LIMIT-EXCEEDED; malformed or mistyped forms signal INVALID-FILTER."},"source":{"file":"src/query.lisp","line":535,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-compile-filter"},{"id":"libtmux.query:compiled-filter","publicId":"libtmux.query:compiled-filter","qualifiedName":"libtmux.query:compiled-filter","namespace":"libtmux.query","name":"compiled-filter","kind":"class","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"An owned validated expression and reusable local evaluator."},"source":{"file":"src/query.lisp","line":99,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-query-compiled-filter"},{"id":"libtmux.query:count-exact-p","publicId":"libtmux.query:count-exact-p","qualifiedName":"libtmux.query:count-exact-p","namespace":"libtmux.query","name":"count-exact-p","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(count-exact-p condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:count-exact-p\",[],[\"libtmux.query:ambiguous-match\"]]","methodKind":"function","raw":"(count-exact-p (condition libtmux.query:ambiguous-match))","params":[{"name":"condition","type":"libtmux.query:ambiguous-match"}],"label":"Primary method: libtmux.query:ambiguous-match"},{"identity":"[\"libtmux.query:count-exact-p\",[],[\"libtmux.query:no-match\"]]","methodKind":"function","raw":"(count-exact-p (condition libtmux.query:no-match))","params":[{"name":"condition","type":"libtmux.query:no-match"}],"label":"Primary method: libtmux.query:no-match"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return true when MATCH-COUNT is exact, false when it is a lower bound."},"source":{"file":"src/query.lisp","line":27,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-count-exact-p"},{"id":"libtmux.query:error-expected","publicId":"libtmux.query:error-expected","qualifiedName":"libtmux.query:error-expected","namespace":"libtmux.query","name":"error-expected","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(error-expected condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:error-expected\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-expected (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return an owned bounded description of the expected query shape or type."},"source":{"file":"src/query.lisp","line":21,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-error-expected"},{"id":"libtmux.query:error-operator","publicId":"libtmux.query:error-operator","qualifiedName":"libtmux.query:error-operator","namespace":"libtmux.query","name":"error-operator","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(error-operator condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:error-operator\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-operator (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a bounded invalid-operator summary, or NIL."},"source":{"file":"src/query.lisp","line":19,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-error-operator"},{"id":"libtmux.query:error-path","publicId":"libtmux.query:error-path","qualifiedName":"libtmux.query:error-path","namespace":"libtmux.query","name":"error-path","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(error-path condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:error-path\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-path (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh bounded vector locating the invalid query input."},"source":{"file":"src/query.lisp","line":17,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-error-path"},{"id":"libtmux.query:error-received","publicId":"libtmux.query:error-received","qualifiedName":"libtmux.query:error-received","namespace":"libtmux.query","name":"error-received","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(error-received condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:error-received\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-received (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"},{"identity":"[\"libtmux.query:error-received\",[],[\"libtmux.query:invalid-query-target\"]]","methodKind":"function","raw":"(error-received (condition libtmux.query:invalid-query-target))","params":[{"name":"condition","type":"libtmux.query:invalid-query-target"}],"label":"Primary method: libtmux.query:invalid-query-target"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a safe bounded description of the received query value or target."},"source":{"file":"src/query.lisp","line":23,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-error-received"},{"id":"libtmux.query:explain","publicId":"libtmux.query:explain","qualifiedName":"libtmux.query:explain","namespace":"libtmux.query","name":"explain","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(explain filter)","params":[{"name":"filter"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return fresh execution metadata for FILTER. Query execution is local and acquires nothing."},"source":{"file":"src/query.lisp","line":631,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-explain"},{"id":"libtmux.query:expression","publicId":"libtmux.query:expression","qualifiedName":"libtmux.query:expression","namespace":"libtmux.query","name":"expression","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(expression filter)","params":[{"name":"filter"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh ordinary-data copy of FILTER's canonical native expression."},"source":{"file":"src/query.lisp","line":590,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-expression"},{"id":"libtmux.query:fields","publicId":"libtmux.query:fields","qualifiedName":"libtmux.query:fields","namespace":"libtmux.query","name":"fields","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(fields model)","params":[{"name":"model"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return fresh field metadata for one captured query MODEL in key order.\nMODEL is one of :SESSION, :WINDOW, :PANE, :WINDOW-LINK or :CLIENT. Wire bounds\ndescribe capture decoding and do not restrict native query integer operands."},"source":{"file":"src/query.lisp","line":620,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-fields"},{"id":"libtmux.query:from","publicId":"libtmux.query:from","qualifiedName":"libtmux.query:from","namespace":"libtmux.query","name":"from","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(from values &key model (max-items +default-max-selection-items+))","params":[{"name":"values"},{"name":"model","optional":true,"keywordOnly":true},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Copy finite VALUES into an eager local QUERY-SET.\nVALUES is a proper list, non-string vector or another query set. MODEL may name\none registered captured entity model; omit it for unrestricted ordinary data."},"source":{"file":"src/query.lisp","line":712,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-from"},{"id":"libtmux.query:invalid-filter","publicId":"libtmux.query:invalid-filter","qualifiedName":"libtmux.query:invalid-filter","namespace":"libtmux.query","name":"invalid-filter","kind":"exception","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"A declarative filter is malformed, mistyped or exceeds a compile limit."},"source":{"file":"src/query.lisp","line":30,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-query-invalid-filter"},{"id":"libtmux.query:invalid-query-target","publicId":"libtmux.query:invalid-query-target","qualifiedName":"libtmux.query:invalid-query-target","namespace":"libtmux.query","name":"invalid-query-target","kind":"exception","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"A compiled filter received an object outside its captured root model."},"source":{"file":"src/query.lisp","line":39,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-query-invalid-query-target"},{"id":"libtmux.query:items","publicId":"libtmux.query:items","qualifiedName":"libtmux.query:items","namespace":"libtmux.query","name":"items","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(items set)","params":[{"name":"set"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh simple vector containing SET's selected items in order."},"source":{"file":"src/query.lisp","line":707,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-items"},{"id":"libtmux.query:match-count","publicId":"libtmux.query:match-count","qualifiedName":"libtmux.query:match-count","namespace":"libtmux.query","name":"match-count","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(match-count condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:match-count\",[],[\"libtmux.query:ambiguous-match\"]]","methodKind":"function","raw":"(match-count (condition libtmux.query:ambiguous-match))","params":[{"name":"condition","type":"libtmux.query:ambiguous-match"}],"label":"Primary method: libtmux.query:ambiguous-match"},{"identity":"[\"libtmux.query:match-count\",[],[\"libtmux.query:no-match\"]]","methodKind":"function","raw":"(match-count (condition libtmux.query:no-match))","params":[{"name":"condition","type":"libtmux.query:no-match"}],"label":"Primary method: libtmux.query:no-match"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return the known cardinality associated with a selection condition."},"source":{"file":"src/query.lisp","line":25,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-match-count"},{"id":"libtmux.query:match-sample","publicId":"libtmux.query:match-sample","qualifiedName":"libtmux.query:match-sample","namespace":"libtmux.query","name":"match-sample","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(match-sample condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh bounded vector of safe selected-item summaries."},"source":{"file":"src/query.lisp","line":70,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-match-sample"},{"id":"libtmux.query:matching","publicId":"libtmux.query:matching","qualifiedName":"libtmux.query:matching","namespace":"libtmux.query","name":"matching","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(matching filter values &key (max-items +default-max-selection-items+) max-execution-visits)","params":[{"name":"filter"},{"name":"values"},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true},{"name":"max-execution-visits","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh simple vector of VALUES accepted by FILTER.\nVALUES must be a finite list or non-string vector. The result preserves order,\nmultiplicity and the original captured handles. MAX-ITEMS bounds validation.\nOne execution budget is shared across the entire traversal; no I/O occurs."},"source":{"file":"src/query.lisp","line":807,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-matching"},{"id":"libtmux.query:no-match","publicId":"libtmux.query:no-match","qualifiedName":"libtmux.query:no-match","namespace":"libtmux.query","name":"no-match","kind":"exception","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Strict selection received no items."},"source":{"file":"src/query.lisp","line":58,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-query-no-match"},{"id":"libtmux.query:one","publicId":"libtmux.query:one","qualifiedName":"libtmux.query:one","namespace":"libtmux.query","name":"one","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(one values &key (max-items +default-max-selection-items+))","params":[{"name":"values"},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return the only item in finite VALUES.\nSignal NO-MATCH for zero items or AMBIGUOUS-MATCH for more than one. The full\nbounded container is validated before a candidate is returned. NIL is an item."},"source":{"file":"src/query.lisp","line":843,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-one"},{"id":"libtmux.query:one-or-none","publicId":"libtmux.query:one-or-none","qualifiedName":"libtmux.query:one-or-none","namespace":"libtmux.query","name":"one-or-none","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(one-or-none values &key (max-items +default-max-selection-items+))","params":[{"name":"values"},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return the only item and T, or NIL,NIL when finite VALUES is empty.\nSignal AMBIGUOUS-MATCH for more than one item after validating the full bounded\ncontainer. A singleton containing NIL returns NIL,T."},"source":{"file":"src/query.lisp","line":857,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-one-or-none"},{"id":"libtmux.query:order-by","publicId":"libtmux.query:order-by","qualifiedName":"libtmux.query:order-by","namespace":"libtmux.query","name":"order-by","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(order-by set predicate &key (key (function identity)) (max-items +default-max-selection-items+))","params":[{"name":"set"},{"name":"predicate"},{"name":"key","default":"(function identity)","optional":true,"keywordOnly":true},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a new query set stably ordered by native PREDICATE and KEY.\nPREDICATE and KEY are function objects or symbols naming global functions,\neach resolved once before sorting. Invalid designators signal\nLIBTMUX:INVALID-ARGUMENT. Their calls follow the STABLE-SORT callback contract.\nSorting is eager and local, mutating only a private simple-vector copy. SET\nremains unchanged; items are shared and equal keys retain input order.","body":"See also: `libtmux.query:from`, `libtmux.query:items`, `libtmux.query:where-if`.","seeAlso":["libtmux.query:from","libtmux.query:items","libtmux.query:where-if"]},"source":{"file":"src/query.lisp","line":790,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-order-by"},{"id":"libtmux.query:predicate","publicId":"libtmux.query:predicate","qualifiedName":"libtmux.query:predicate","namespace":"libtmux.query","name":"predicate","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(predicate filter)","params":[{"name":"filter"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a genuine one-argument function that evaluates FILTER locally.\nEach invocation receives a fresh execution budget and performs no tmux I/O."},"source":{"file":"src/query.lisp","line":651,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-predicate"},{"id":"libtmux.query:query-limit-exceeded","publicId":"libtmux.query:query-limit-exceeded","qualifiedName":"libtmux.query:query-limit-exceeded","namespace":"libtmux.query","name":"query-limit-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"A bounded query compilation, execution or selection exhausted its budget."},"source":{"file":"src/query.lisp","line":55,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.query:invalid-filter"],"slug":"libtmux-query-query-limit-exceeded"},{"id":"libtmux.query:query-set","publicId":"libtmux.query:query-set","qualifiedName":"libtmux.query:query-set","namespace":"libtmux.query","name":"query-set","kind":"class","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"An eager owned local selection with optional captured-model metadata."},"source":{"file":"src/query.lisp","line":110,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-query-query-set"},{"id":"libtmux.query:query-set-model","publicId":"libtmux.query:query-set-model","qualifiedName":"libtmux.query:query-set-model","namespace":"libtmux.query","name":"query-set-model","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(query-set-model set)","params":[{"name":"set"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return SET's declared captured model, or NIL for untyped ordinary data."},"source":{"file":"src/query.lisp","line":702,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-query-set-model"},{"id":"libtmux.query:required-fields","publicId":"libtmux.query:required-fields","qualifiedName":"libtmux.query:required-fields","namespace":"libtmux.query","name":"required-fields","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(required-fields filter)","params":[{"name":"filter"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh vector of scalar fields in first-occurrence order."},"source":{"file":"src/query.lisp","line":598,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-required-fields"},{"id":"libtmux.query:required-relations","publicId":"libtmux.query:required-relations","qualifiedName":"libtmux.query:required-relations","namespace":"libtmux.query","name":"required-relations","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(required-relations filter)","params":[{"name":"filter"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh vector of relation fields in first-occurrence order."},"source":{"file":"src/query.lisp","line":603,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-required-relations"},{"id":"libtmux.query:where","publicId":"libtmux.query:where","qualifiedName":"libtmux.query:where","namespace":"libtmux.query","name":"where","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(where set filter &key (max-items +default-max-selection-items+) max-execution-visits)","params":[{"name":"set"},{"name":"filter"},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true},{"name":"max-execution-visits","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a new query set containing SET items accepted by compiled FILTER.\nEvaluation is eager and local. FILTER supplies the result model; conflicting\ndeclared model metadata signals INVALID-QUERY-TARGET before evaluation."},"source":{"file":"src/query.lisp","line":739,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-where"},{"id":"libtmux.query:where-if","publicId":"libtmux.query:where-if","qualifiedName":"libtmux.query:where-if","namespace":"libtmux.query","name":"where-if","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(where-if set function &key (max-items +default-max-selection-items+))","params":[{"name":"set"},{"name":"function"},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a new query set selected by native FUNCTION in input order.\nFUNCTION is a function object or a symbol naming a global function, resolved\nonce before traversal. Invalid designators signal LIBTMUX:INVALID-ARGUMENT.\nOn normal completion it has been called exactly once per item, eagerly and\nlocally. Its effects and call order are never optimized as declarative data.\nThe result owns its container and shares the selected items with SET.","body":"See also: `libtmux.query:from`, `libtmux.query:items`, `libtmux.query:order-by`, `libtmux.query:where`.","seeAlso":["libtmux.query:from","libtmux.query:items","libtmux.query:order-by","libtmux.query:where"]},"source":{"file":"src/query.lisp","line":770,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-query-where-if"},{"id":"libtmux.workspace","publicId":"libtmux.workspace","qualifiedName":"libtmux.workspace","namespace":"","name":"libtmux.workspace","kind":"module","modifiers":[],"signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Owned Common Lisp workspace descriptions and explicit tmux application.\nMAKE-WORKSPACE validates inert native data without evaluation. PLAN-WORKSPACE\nis local and pure; APPLY-WORKSPACE is the explicit external-operation boundary.\nWorkspace objects, plans, steps, results, and their readers return defensive\ndata. Conflicts fail before mutation, and partial application retains evidence."},"source":{"file":"src/workspace.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace"},{"id":"libtmux.workspace:apply-workspace","publicId":"libtmux.workspace:apply-workspace","qualifiedName":"libtmux.workspace:apply-workspace","namespace":"libtmux.workspace","name":"apply-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(apply-workspace client workspace &key cancel-token (timeout nil timeout-p) (output-limit nil output-limit-p) (total-timeout nil total-timeout-p) reconcile)","params":[{"name":"client"},{"name":"workspace"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","default":"nil","optional":true,"keywordOnly":true},{"name":"output-limit","default":"nil","optional":true,"keywordOnly":true},{"name":"total-timeout","default":"nil","optional":true,"keywordOnly":true},{"name":"reconcile","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Apply WORKSPACE through explicit CLIENT and return a WORKSPACE-RESULT.\nWorkspace/1 retains topology-only creation/reuse. Workspace/2 freshly acquires\nowned state and replans; a preview is never mutation authority. By default\nowned declaration changes or drift are refused; :RECONCILE permits only the\nqualified additive, rename, metadata and layout changes. It never adopts an\nunowned session or repeats an uncertain mutation. RECONCILE requires schema /2.","body":"TIMEOUT and OUTPUT-LIMIT apply per core operation; CANCEL-TOKEN is shared.\nTOTAL-TIMEOUT, when supplied, is a nonnegative finite number of seconds shared\nacross acquisition, planning and application. It controls admission, including\nno-op planning, and is not a hard caller wall-time bound. Synchronous setup and\ncleanup can extend an admitted call. Invalid arguments fail before application.\n\nOwned results retain read outcomes even for no-mutation reapplication.\nRESULT-DATA separates selected/candidate/observed metadata and publication\nstatus; RESULT-CREATED-P reports creation of the owned session. Conditional\npublication is the final mutation, and later observation is read-only.\n\nOwned acquisition, planning and execution failures signal WORKSPACE-APPLY-FAILED\nwith local RESULT-DATA, RESULT-SNAPSHOT, RESULT-OUTCOMES and RESULT-CAUSES.\nFAILED-STEP retains the actual step where known. Successful publication with\nfailed observation remains distinguishable from failed/uncertain publication.\nLegacy failures retain their original early-validation and partial-outcome\nbehavior. No rollback, hidden refresh during inspection or automatic retry.\n\nSee also: `libtmux.workspace:failed-step`, `libtmux.workspace:fetch-workspace-state`, `libtmux.workspace:plan-workspace`, `libtmux.workspace:result-causes`, `libtmux.workspace:result-data`, `libtmux.workspace:result-outcomes`, `libtmux.workspace:result-snapshot`, `libtmux.workspace:workspace-deadline-exceeded`.","seeAlso":["libtmux.workspace:failed-step","libtmux.workspace:fetch-workspace-state","libtmux.workspace:plan-workspace","libtmux.workspace:result-causes","libtmux.workspace:result-data","libtmux.workspace:result-outcomes","libtmux.workspace:result-snapshot","libtmux.workspace:workspace-deadline-exceeded"]},"source":{"file":"src/workspace-api.lisp","line":347,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-apply-workspace"},{"id":"libtmux.workspace:failed-step","publicId":"libtmux.workspace:failed-step","qualifiedName":"libtmux.workspace:failed-step","namespace":"libtmux.workspace","name":"failed-step","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(failed-step condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.workspace:failed-step\",[],[\"libtmux.workspace:workspace-apply-failed\"]]","methodKind":"function","raw":"(failed-step (condition libtmux.workspace:workspace-apply-failed))","params":[{"name":"condition","type":"libtmux.workspace:workspace-apply-failed"}],"label":"Primary method: libtmux.workspace:workspace-apply-failed"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return the failed or refused next WORKSPACE-STEP, or NIL for final verification.\nNIL does not imply that no mutations completed; inspect RESULT-OUTCOMES.","body":"See also: `libtmux.workspace:apply-workspace`, `libtmux.workspace:result-outcomes`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux.workspace:result-outcomes"]},"source":{"file":"src/workspace.lisp","line":34,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-failed-step"},{"id":"libtmux.workspace:fetch-workspace-state","publicId":"libtmux.workspace:fetch-workspace-state","qualifiedName":"libtmux.workspace:fetch-workspace-state","namespace":"libtmux.workspace","name":"fetch-workspace-state","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(fetch-workspace-state client workspace &key cancel-token (timeout (slot-value client (quote timeout))) (output-limit (slot-value client (quote output-limit))) (record-limit 100000))","params":[{"name":"client"},{"name":"workspace"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","default":"(slot-value client (quote timeout))","optional":true,"keywordOnly":true},{"name":"output-limit","default":"(slot-value client (quote output-limit))","optional":true,"keywordOnly":true},{"name":"record-limit","default":"100000","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Acquire ready/vacant owned metadata and a captured graph explicitly through CLIENT.\nWORKSPACE must use schema /2; /1 is refused before I/O. TIMEOUT and OUTPUT-LIMIT\nshare the bounded read policy across attempts. RECORD-LIMIT is an integer from\n1 through 100000; CANCEL-TOKEN is shared. No mutation occurs. Returns a\nWORKSPACE-STATE for local planning, usable after client close. Actual read\nfailures signal WORKSPACE-STATE-ERROR with partial evidence; invalid arguments\nremain validation failures. Failure is never reported as vacancy.","body":"See also: `libtmux.workspace:inspect-workspace`, `libtmux.workspace:plan-workspace`, `libtmux.workspace:state-causes`, `libtmux.workspace:state-data`, `libtmux.workspace:state-outcomes`, `libtmux.workspace:state-snapshot`.","seeAlso":["libtmux.workspace:inspect-workspace","libtmux.workspace:plan-workspace","libtmux.workspace:state-causes","libtmux.workspace:state-data","libtmux.workspace:state-outcomes","libtmux.workspace:state-snapshot"]},"source":{"file":"src/workspace-api.lisp","line":279,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-fetch-workspace-state"},{"id":"libtmux.workspace:inspect-workspace","publicId":"libtmux.workspace:inspect-workspace","qualifiedName":"libtmux.workspace:inspect-workspace","namespace":"libtmux.workspace","name":"inspect-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspect-workspace client workspace &key cancel-token (timeout (slot-value client (quote timeout))) (output-limit (slot-value client (quote output-limit))) (record-limit 100000))","params":[{"name":"client"},{"name":"workspace"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","default":"(slot-value client (quote timeout))","optional":true,"keywordOnly":true},{"name":"output-limit","default":"(slot-value client (quote output-limit))","optional":true,"keywordOnly":true},{"name":"record-limit","default":"100000","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Acquire explicit incomplete-workspace evidence through CLIENT without mutation.\nWORKSPACE must use schema /2; /1 is refused before I/O. Read limits and\nCANCEL-TOKEN have FETCH-WORKSPACE-STATE's meanings. Returns a distinct\nWORKSPACE-INSPECTION, never a planning input. Completed inspection can describe\nBUSY or invalid ownership. A terminal failure signals WORKSPACE-INSPECTION-ERROR\nwith a partial inspection and original/terminal causes separately retained.","body":"See also: `libtmux.workspace:inspection-causes`, `libtmux.workspace:inspection-data`, `libtmux.workspace:inspection-evidence`, `libtmux.workspace:inspection-outcomes`, `libtmux.workspace:inspection-snapshots`, `libtmux.workspace:inspection-terminal`.","seeAlso":["libtmux.workspace:inspection-causes","libtmux.workspace:inspection-data","libtmux.workspace:inspection-evidence","libtmux.workspace:inspection-outcomes","libtmux.workspace:inspection-snapshots","libtmux.workspace:inspection-terminal"]},"source":{"file":"src/workspace-api.lisp","line":304,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-inspect-workspace"},{"id":"libtmux.workspace:inspection-causes","publicId":"libtmux.workspace:inspection-causes","qualifiedName":"libtmux.workspace:inspection-causes","namespace":"libtmux.workspace","name":"inspection-causes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-causes inspection)","params":[{"name":"inspection"}]},{"identity":"[\"libtmux.workspace:inspection-causes\",[],[\"libtmux.workspace:workspace-inspection\"]]","methodKind":"function","raw":"(inspection-causes (value libtmux.workspace:workspace-inspection))","params":[{"name":"value","type":"libtmux.workspace:workspace-inspection"}],"label":"Primary method: libtmux.workspace:workspace-inspection"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return original retained conditions in a fresh simple vector. No I/O.","body":"See also: `libtmux:error-cause`, `libtmux.workspace:inspection-data`, `libtmux.workspace:inspection-terminal`.","seeAlso":["libtmux:error-cause","libtmux.workspace:inspection-data","libtmux.workspace:inspection-terminal"]},"source":{"file":"src/workspace-api.lisp","line":178,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-inspection-causes"},{"id":"libtmux.workspace:inspection-data","publicId":"libtmux.workspace:inspection-data","qualifiedName":"libtmux.workspace:inspection-data","namespace":"libtmux.workspace","name":"inspection-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-data inspection)","params":[{"name":"inspection"}]},{"identity":"[\"libtmux.workspace:inspection-data\",[],[\"libtmux.workspace:workspace-inspection\"]]","methodKind":"function","raw":"(inspection-data (value libtmux.workspace:workspace-inspection))","params":[{"name":"value","type":"libtmux.workspace:workspace-inspection"}],"label":"Primary method: libtmux.workspace:workspace-inspection"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return fresh attempts, record roles and diagnostics from INSPECTION. No I/O.\nRead completion does not establish valid ownership or application success.","body":"See also: `libtmux.workspace:inspect-workspace`, `libtmux.workspace:inspection-causes`, `libtmux.workspace:inspection-snapshots`.","seeAlso":["libtmux.workspace:inspect-workspace","libtmux.workspace:inspection-causes","libtmux.workspace:inspection-snapshots"]},"source":{"file":"src/workspace-api.lisp","line":164,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-inspection-data"},{"id":"libtmux.workspace:inspection-evidence","publicId":"libtmux.workspace:inspection-evidence","qualifiedName":"libtmux.workspace:inspection-evidence","namespace":"libtmux.workspace","name":"inspection-evidence","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-evidence condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.workspace:inspection-evidence\",[],[\"libtmux.workspace:workspace-inspection-error\"]]","methodKind":"function","raw":"(inspection-evidence (condition libtmux.workspace:workspace-inspection-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-inspection-error"}],"label":"Primary method: libtmux.workspace:workspace-inspection-error"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return the partial WORKSPACE-INSPECTION retained by CONDITION. No I/O.","body":"See also: `libtmux.workspace:inspection-data`, `libtmux.workspace:inspection-terminal`, `libtmux.workspace:workspace-inspection-error`.","seeAlso":["libtmux.workspace:inspection-data","libtmux.workspace:inspection-terminal","libtmux.workspace:workspace-inspection-error"]},"source":{"file":"src/workspace-api.lisp","line":182,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-inspection-evidence"},{"id":"libtmux.workspace:inspection-outcomes","publicId":"libtmux.workspace:inspection-outcomes","qualifiedName":"libtmux.workspace:inspection-outcomes","namespace":"libtmux.workspace","name":"inspection-outcomes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-outcomes inspection)","params":[{"name":"inspection"}]},{"identity":"[\"libtmux.workspace:inspection-outcomes\",[],[\"libtmux.workspace:workspace-inspection\"]]","methodKind":"function","raw":"(inspection-outcomes (value libtmux.workspace:workspace-inspection))","params":[{"name":"value","type":"libtmux.workspace:workspace-inspection"}],"label":"Primary method: libtmux.workspace:workspace-inspection"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return INSPECTION's read outcomes in a fresh simple vector. No I/O.","body":"See also: `libtmux.workspace:inspection-data`, `libtmux:outcome-status`.","seeAlso":["libtmux.workspace:inspection-data","libtmux:outcome-status"]},"source":{"file":"src/workspace-api.lisp","line":174,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-inspection-outcomes"},{"id":"libtmux.workspace:inspection-snapshots","publicId":"libtmux.workspace:inspection-snapshots","qualifiedName":"libtmux.workspace:inspection-snapshots","namespace":"libtmux.workspace","name":"inspection-snapshots","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-snapshots inspection)","params":[{"name":"inspection"}]},{"identity":"[\"libtmux.workspace:inspection-snapshots\",[],[\"libtmux.workspace:workspace-inspection\"]]","methodKind":"function","raw":"(inspection-snapshots (value libtmux.workspace:workspace-inspection))","params":[{"name":"value","type":"libtmux.workspace:workspace-inspection"}],"label":"Primary method: libtmux.workspace:workspace-inspection"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return retained captured SNAPSHOT objects in a fresh simple vector. No I/O.\nEach capture remains paired with its attempt's metadata in INSPECTION-DATA.","body":"See also: `libtmux.workspace:inspection-data`, `libtmux.workspace:inspection-outcomes`.","seeAlso":["libtmux.workspace:inspection-data","libtmux.workspace:inspection-outcomes"]},"source":{"file":"src/workspace-api.lisp","line":169,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-inspection-snapshots"},{"id":"libtmux.workspace:inspection-terminal","publicId":"libtmux.workspace:inspection-terminal","qualifiedName":"libtmux.workspace:inspection-terminal","namespace":"libtmux.workspace","name":"inspection-terminal","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-terminal condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.workspace:inspection-terminal\",[],[\"libtmux.workspace:workspace-inspection-error\"]]","methodKind":"function","raw":"(inspection-terminal (condition libtmux.workspace:workspace-inspection-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-inspection-error"}],"label":"Primary method: libtmux.workspace:workspace-inspection-error"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return the terminal condition that stopped inspection. No I/O.\nThe original metadata cause remains in the cause chain and inspection evidence.","body":"See also: `libtmux:error-cause`, `libtmux.workspace:inspection-causes`, `libtmux.workspace:inspection-evidence`.","seeAlso":["libtmux:error-cause","libtmux.workspace:inspection-causes","libtmux.workspace:inspection-evidence"]},"source":{"file":"src/workspace-api.lisp","line":186,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-inspection-terminal"},{"id":"libtmux.workspace:invalid-workspace","publicId":"libtmux.workspace:invalid-workspace","qualifiedName":"libtmux.workspace:invalid-workspace","namespace":"libtmux.workspace","name":"invalid-workspace","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Native workspace data violates the closed workspace grammar."},"source":{"file":"src/workspace.lisp","line":81,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-invalid-workspace"},{"id":"libtmux.workspace:invalid-workspace-document","publicId":"libtmux.workspace:invalid-workspace-document","qualifiedName":"libtmux.workspace:invalid-workspace-document","namespace":"libtmux.workspace","name":"invalid-workspace-document","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"A workspace JSON document is malformed, unknown, or invalid."},"source":{"file":"src/workspace.lisp","line":88,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.workspace:invalid-workspace"],"slug":"libtmux-workspace-invalid-workspace-document"},{"id":"libtmux.workspace:make-workspace","publicId":"libtmux.workspace:make-workspace","qualifiedName":"libtmux.workspace:make-workspace","namespace":"libtmux.workspace","name":"make-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(make-workspace data &key (max-windows 100) (max-panes 1000) (max-argv 256) (max-environment 256))","params":[{"name":"data"},{"name":"max-windows","default":"100","optional":true,"keywordOnly":true},{"name":"max-panes","default":"1000","optional":true,"keywordOnly":true},{"name":"max-argv","default":"256","optional":true,"keywordOnly":true},{"name":"max-environment","default":"256","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Validate inert native DATA and return an owned WORKSPACE without I/O.\nDATA is a finite keyword plist declaring libtmux.lisp.workspace/1 or /2.\nWorkspace/1 describes name-based topology reuse. Workspace/2 requires stable\nIDs at the root, session, windows and panes; duplicate window names are allowed.\nMutable inputs are copied. Unknown/duplicate keys, cyclic containers and invalid\nvalues signal INVALID-WORKSPACE with WORKSPACE-PATH and WORKSPACE-LIMIT.","body":"MAX-WINDOWS, MAX-PANES, MAX-ARGV and MAX-ENVIRONMENT limit topology, individual\nargv vectors and session environment pairs. Owned protocol ceilings remain in\nforce when a caller chooses larger limits. :COMMAND is literal argv;\n:SHELL-COMMAND is explicit shell source. Cwd, environment and named/custom\nlayouts retain their creation meanings; changing existing processes is refused.\n\nSee also: `libtmux.workspace:apply-workspace`, `libtmux:new-session`, `libtmux.workspace:parse-workspace`, `libtmux.workspace:plan-workspace`, `libtmux.workspace:read-workspace`, `libtmux.workspace:workspace-data`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux:new-session","libtmux.workspace:parse-workspace","libtmux.workspace:plan-workspace","libtmux.workspace:read-workspace","libtmux.workspace:workspace-data"]},"source":{"file":"src/workspace-api.lisp","line":19,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-make-workspace"},{"id":"libtmux.workspace:parse-workspace","publicId":"libtmux.workspace:parse-workspace","qualifiedName":"libtmux.workspace:parse-workspace","namespace":"libtmux.workspace","name":"parse-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(parse-workspace source &key (max-input-bytes +default-max-input-bytes+) (max-depth +default-max-depth+) (max-nodes +default-max-nodes+) (max-string-length +default-max-string-length+) (max-windows +default-max-windows+) (max-panes +default-max-panes+) (max-argv +default-max-argv+) (max-environment +default-max-environment+) (max-integer-digits +default-max-integer-digits+))","params":[{"name":"source"},{"name":"max-input-bytes","default":"+default-max-input-bytes+","optional":true,"keywordOnly":true},{"name":"max-depth","default":"+default-max-depth+","optional":true,"keywordOnly":true},{"name":"max-nodes","default":"+default-max-nodes+","optional":true,"keywordOnly":true},{"name":"max-string-length","default":"+default-max-string-length+","optional":true,"keywordOnly":true},{"name":"max-windows","default":"+default-max-windows+","optional":true,"keywordOnly":true},{"name":"max-panes","default":"+default-max-panes+","optional":true,"keywordOnly":true},{"name":"max-argv","default":"+default-max-argv+","optional":true,"keywordOnly":true},{"name":"max-environment","default":"+default-max-environment+","optional":true,"keywordOnly":true},{"name":"max-integer-digits","default":"+default-max-integer-digits+","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Parse one bounded workspace/1 or workspace/2 JSON string into a WORKSPACE.\nThe declared schema selects a closed grammar. Unknown/duplicate members,\ninvalid values and incomplete input fail; no external names are interned or\nevaluated. Limits bound UTF-8 bytes, nesting, nodes, string length, topology,\nargv length, session environment pairs and integer token digits. Owned protocol\nceilings remain in force when callers choose larger limits.","body":"Workspace/2 requires stable IDs and permits repeated window names. Command\narrays are literal argv; shell_command is explicit source. Named/custom layouts\nand all other creation inputs have the same meanings as MAKE-WORKSPACE.\nRetained strings and containers are owned. Signals INVALID-WORKSPACE-DOCUMENT\nor WORKSPACE-LIMIT-EXCEEDED with WORKSPACE-PATH and WORKSPACE-LIMIT. No tmux I/O.\n\nSee also: `libtmux.workspace:make-workspace`, `libtmux.workspace:read-workspace`, `libtmux.workspace:workspace-data`.","seeAlso":["libtmux.workspace:make-workspace","libtmux.workspace:read-workspace","libtmux.workspace:workspace-data"]},"source":{"file":"src/workspace-api.lisp","line":57,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-parse-workspace"},{"id":"libtmux.workspace:plan-data","publicId":"libtmux.workspace:plan-data","qualifiedName":"libtmux.workspace:plan-data","namespace":"libtmux.workspace","name":"plan-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(plan-data plan)","params":[{"name":"plan"}]},{"identity":"[\"libtmux.workspace:plan-data\",[],[\"libtmux.workspace:workspace-conflict\"]]","methodKind":"function","raw":"(plan-data (condition libtmux.workspace:workspace-conflict))","params":[{"name":"condition","type":"libtmux.workspace:workspace-conflict"}],"label":"Primary method: libtmux.workspace:workspace-conflict"},{"identity":"[\"libtmux.workspace:plan-data\",[],[\"libtmux.workspace:workspace-plan\"]]","methodKind":"function","raw":"(plan-data (value libtmux.workspace:workspace-plan))","params":[{"name":"value","type":"libtmux.workspace:workspace-plan"}],"label":"Primary method: libtmux.workspace:workspace-plan"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return (values fresh-owned-data T), or (values NIL NIL) for legacy evidence.\nAccepts WORKSPACE-PLAN or WORKSPACE-CONFLICT. Owned data separates declaration\nchanges, captured drift, informational context, conflicts and :PUBLISH-P.\nAn empty step vector can still require metadata publication. No I/O.","body":"See also: `libtmux.workspace:plan-steps`, `libtmux.workspace:plan-workspace`, `libtmux.workspace:workspace-conflict`.","seeAlso":["libtmux.workspace:plan-steps","libtmux.workspace:plan-workspace","libtmux.workspace:workspace-conflict"]},"source":{"file":"src/workspace-api.lisp","line":191,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-plan-data"},{"id":"libtmux.workspace:plan-steps","publicId":"libtmux.workspace:plan-steps","qualifiedName":"libtmux.workspace:plan-steps","namespace":"libtmux.workspace","name":"plan-steps","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(plan-steps plan)","params":[{"name":"plan"}]},{"identity":"[\"libtmux.workspace:plan-steps\",[],[\"libtmux.workspace:workspace-plan\"]]","methodKind":"function","raw":"(plan-steps (plan libtmux.workspace:workspace-plan))","params":[{"name":"plan","type":"libtmux.workspace:workspace-plan"}],"label":"Primary method: libtmux.workspace:workspace-plan"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return PLAN's ordered steps as a fresh simple vector. No I/O.\nAn owned plan with no domain steps can still require metadata publication.","body":"See also: `libtmux.workspace:plan-data`, `libtmux.workspace:plan-workspace`, `libtmux.workspace:step-action`, `libtmux.workspace:step-data`.","seeAlso":["libtmux.workspace:plan-data","libtmux.workspace:plan-workspace","libtmux.workspace:step-action","libtmux.workspace:step-data"]},"source":{"file":"src/workspace.lisp","line":55,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-plan-steps"},{"id":"libtmux.workspace:plan-workspace","publicId":"libtmux.workspace:plan-workspace","qualifiedName":"libtmux.workspace:plan-workspace","namespace":"libtmux.workspace","name":"plan-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(plan-workspace workspace &optional observation &key reconcile)","params":[{"name":"workspace"},{"name":"observation","optional":true},{"name":"reconcile","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return a local WORKSPACE-PLAN for WORKSPACE and captured OBSERVATION.\nWorkspace/1 accepts a SNAPSHOT or no observation for a creation preview; an\nexact captured topology produces no steps. Workspace/2 requires an explicitly\nacquired WORKSPACE-STATE for the same workspace ID. A snapshot or incomplete\ninspection cannot establish ownership. Matching acquired state remains usable\nafter its client closes. No acquisition, refresh or mutation occurs.","body":"Owned planning separates declaration changes and captured drift. By default,\neither requires explicit :RECONCILE before a plan can be returned; unsupported\nchanges remain conflicts. PLAN-DATA exposes diagnostics on a plan or\nWORKSPACE-CONFLICT. An empty owned step vector can still require metadata\npublication: inspect :PUBLISH-P. Application always reacquires and replans.\nNon-NIL RECONCILE is invalid for workspace/1.\n\nSee also: `libtmux.workspace:apply-workspace`, `libtmux.workspace:fetch-workspace-state`, `libtmux.workspace:plan-data`, `libtmux.workspace:plan-steps`, `libtmux.workspace:workspace-conflict`, `libtmux.workspace:workspace-state`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux.workspace:fetch-workspace-state","libtmux.workspace:plan-data","libtmux.workspace:plan-steps","libtmux.workspace:workspace-conflict","libtmux.workspace:workspace-state"]},"source":{"file":"src/workspace-api.lisp","line":243,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-plan-workspace"},{"id":"libtmux.workspace:read-workspace","publicId":"libtmux.workspace:read-workspace","qualifiedName":"libtmux.workspace:read-workspace","namespace":"libtmux.workspace","name":"read-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(read-workspace path &rest options &key (max-input-bytes +default-max-input-bytes+) &allow-other-keys)","params":[{"name":"path"},{"name":"options","variadic":"positional"},{"name":"max-input-bytes","default":"+default-max-input-bytes+","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Read one bounded regular UTF-8 JSON file and return an owned WORKSPACE.\nPATH is opened for input and never modified. MAX-INPUT-BYTES is enforced on\nbytes read even if the file changes after opening. The descriptor is opened\nnonblocking, then directories and special files are rejected before reading.\nOther OPTIONS are forwarded to PARSE-WORKSPACE. Signals\nINVALID-WORKSPACE-DOCUMENT or WORKSPACE-LIMIT-EXCEEDED and closes the stream.","body":"See also: `libtmux.workspace:parse-workspace`, `libtmux.workspace:workspace-data`.","seeAlso":["libtmux.workspace:parse-workspace","libtmux.workspace:workspace-data"]},"source":{"file":"src/workspace.lisp","line":967,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-read-workspace"},{"id":"libtmux.workspace:result-causes","publicId":"libtmux.workspace:result-causes","qualifiedName":"libtmux.workspace:result-causes","namespace":"libtmux.workspace","name":"result-causes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(result-causes result)","params":[{"name":"result"}]},{"identity":"[\"libtmux.workspace:result-causes\",[],[\"libtmux.workspace:workspace-apply-failed\"]]","methodKind":"function","raw":"(result-causes (condition libtmux.workspace:workspace-apply-failed))","params":[{"name":"condition","type":"libtmux.workspace:workspace-apply-failed"}],"label":"Primary method: libtmux.workspace:workspace-apply-failed"},{"identity":"[\"libtmux.workspace:result-causes\",[],[\"libtmux.workspace:workspace-result\"]]","methodKind":"function","raw":"(result-causes (value libtmux.workspace:workspace-result))","params":[{"name":"value","type":"libtmux.workspace:workspace-result"}],"label":"Primary method: libtmux.workspace:workspace-result"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return retained application conditions in a fresh simple vector. No I/O.\nConditions keep primary-first order and identity deduplication; successful\napplications without failures return an empty vector.","body":"See also: `libtmux:error-cause`, `libtmux.workspace:result-data`, `libtmux.workspace:workspace-apply-failed`.","seeAlso":["libtmux:error-cause","libtmux.workspace:result-data","libtmux.workspace:workspace-apply-failed"]},"source":{"file":"src/workspace-api.lisp","line":205,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-result-causes"},{"id":"libtmux.workspace:result-created-p","publicId":"libtmux.workspace:result-created-p","qualifiedName":"libtmux.workspace:result-created-p","namespace":"libtmux.workspace","name":"result-created-p","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(result-created-p result)","params":[{"name":"result"}]},{"identity":"[\"libtmux.workspace:result-created-p\",[],[\"libtmux.workspace:workspace-result\"]]","methodKind":"function","raw":"(result-created-p (workspace-result libtmux.workspace:workspace-result))","params":[{"name":"workspace-result","type":"libtmux.workspace:workspace-result"}],"label":"Primary method: libtmux.workspace:workspace-result"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return true when APPLY-WORKSPACE created the declared session.","body":"See also: `libtmux.workspace:apply-workspace`, `libtmux.workspace:result-outcomes`, `libtmux.workspace:result-snapshot`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux.workspace:result-outcomes","libtmux.workspace:result-snapshot"]},"source":{"file":"src/workspace.lisp","line":71,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-result-created-p"},{"id":"libtmux.workspace:result-data","publicId":"libtmux.workspace:result-data","qualifiedName":"libtmux.workspace:result-data","namespace":"libtmux.workspace","name":"result-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(result-data result)","params":[{"name":"result"}]},{"identity":"[\"libtmux.workspace:result-data\",[],[\"libtmux.workspace:workspace-apply-failed\"]]","methodKind":"function","raw":"(result-data (condition libtmux.workspace:workspace-apply-failed))","params":[{"name":"condition","type":"libtmux.workspace:workspace-apply-failed"}],"label":"Primary method: libtmux.workspace:workspace-apply-failed"},{"identity":"[\"libtmux.workspace:result-data\",[],[\"libtmux.workspace:workspace-result\"]]","methodKind":"function","raw":"(result-data (value libtmux.workspace:workspace-result))","params":[{"name":"value","type":"libtmux.workspace:workspace-result"}],"label":"Primary method: libtmux.workspace:workspace-result"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return owned application data and presence as two values, without I/O.\nAccepts WORKSPACE-RESULT or WORKSPACE-APPLY-FAILED. Returns fresh data and T for\nowned evidence; legacy evidence returns NIL,NIL. Data distinguishes phase,\nmappings, selected/candidate/observed metadata and publication status.","body":"See also: `libtmux.workspace:failed-step`, `libtmux.workspace:result-causes`, `libtmux.workspace:result-outcomes`, `libtmux.workspace:result-snapshot`.","seeAlso":["libtmux.workspace:failed-step","libtmux.workspace:result-causes","libtmux.workspace:result-outcomes","libtmux.workspace:result-snapshot"]},"source":{"file":"src/workspace-api.lisp","line":198,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-result-data"},{"id":"libtmux.workspace:result-outcomes","publicId":"libtmux.workspace:result-outcomes","qualifiedName":"libtmux.workspace:result-outcomes","namespace":"libtmux.workspace","name":"result-outcomes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(result-outcomes result)","params":[{"name":"result"}]},{"identity":"[\"libtmux.workspace:result-outcomes\",[],[\"libtmux.workspace:workspace-apply-failed\"]]","methodKind":"function","raw":"(result-outcomes (condition libtmux.workspace:workspace-apply-failed))","params":[{"name":"condition","type":"libtmux.workspace:workspace-apply-failed"}],"label":"Primary method: libtmux.workspace:workspace-apply-failed"},{"identity":"[\"libtmux.workspace:result-outcomes\",[],[\"libtmux.workspace:workspace-result\"]]","methodKind":"function","raw":"(result-outcomes (result libtmux.workspace:workspace-result))","params":[{"name":"result","type":"libtmux.workspace:workspace-result"}],"label":"Primary method: libtmux.workspace:workspace-result"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return retained COMMAND-OUTCOME objects in a fresh simple vector.","body":"See also: `libtmux.workspace:failed-step`, `libtmux.workspace:result-created-p`, `libtmux.workspace:result-snapshot`.","seeAlso":["libtmux.workspace:failed-step","libtmux.workspace:result-created-p","libtmux.workspace:result-snapshot"]},"source":{"file":"src/workspace.lisp","line":66,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-result-outcomes"},{"id":"libtmux.workspace:result-snapshot","publicId":"libtmux.workspace:result-snapshot","qualifiedName":"libtmux.workspace:result-snapshot","namespace":"libtmux.workspace","name":"result-snapshot","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(result-snapshot result)","params":[{"name":"result"}]},{"identity":"[\"libtmux.workspace:result-snapshot\",[],[\"libtmux.workspace:workspace-apply-failed\"]]","methodKind":"function","raw":"(result-snapshot (condition libtmux.workspace:workspace-apply-failed))","params":[{"name":"condition","type":"libtmux.workspace:workspace-apply-failed"}],"label":"Primary method: libtmux.workspace:workspace-apply-failed"},{"identity":"[\"libtmux.workspace:result-snapshot\",[],[\"libtmux.workspace:workspace-result\"]]","methodKind":"function","raw":"(result-snapshot (workspace-result libtmux.workspace:workspace-result))","params":[{"name":"workspace-result","type":"libtmux.workspace:workspace-result"}],"label":"Primary method: libtmux.workspace:workspace-result"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return the final captured SNAPSHOT retained by RESULT. No I/O.","body":"See also: `libtmux.workspace:apply-workspace`, `libtmux.workspace:result-created-p`, `libtmux.workspace:result-outcomes`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux.workspace:result-created-p","libtmux.workspace:result-outcomes"]},"source":{"file":"src/workspace.lisp","line":61,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-result-snapshot"},{"id":"libtmux.workspace:state-causes","publicId":"libtmux.workspace:state-causes","qualifiedName":"libtmux.workspace:state-causes","namespace":"libtmux.workspace","name":"state-causes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(state-causes state)","params":[{"name":"state"}]},{"identity":"[\"libtmux.workspace:state-causes\",[],[\"libtmux.workspace:workspace-state-error\"]]","methodKind":"function","raw":"(state-causes (condition libtmux.workspace:workspace-state-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-state-error"}],"label":"Primary method: libtmux.workspace:workspace-state-error"},{"identity":"[\"libtmux.workspace:state-causes\",[],[\"libtmux.workspace:workspace-state\"]]","methodKind":"function","raw":"(state-causes (state libtmux.workspace:workspace-state))","params":[{"name":"state","type":"libtmux.workspace:workspace-state"}],"label":"Primary method: libtmux.workspace:workspace-state"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return retained acquisition conditions in a fresh simple vector. No I/O.\nSuccessful state has an empty vector. Original condition objects are shared.","body":"See also: `libtmux:error-cause`, `libtmux.workspace:workspace-state-error`.","seeAlso":["libtmux:error-cause","libtmux.workspace:workspace-state-error"]},"source":{"file":"src/workspace-api.lisp","line":159,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-state-causes"},{"id":"libtmux.workspace:state-data","publicId":"libtmux.workspace:state-data","qualifiedName":"libtmux.workspace:state-data","namespace":"libtmux.workspace","name":"state-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(state-data state)","params":[{"name":"state"}]},{"identity":"[\"libtmux.workspace:state-data\",[],[\"libtmux.workspace:workspace-state-error\"]]","methodKind":"function","raw":"(state-data (condition libtmux.workspace:workspace-state-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-state-error"}],"label":"Primary method: libtmux.workspace:workspace-state-error"},{"identity":"[\"libtmux.workspace:state-data\",[],[\"libtmux.workspace:workspace-state\"]]","methodKind":"function","raw":"(state-data (state libtmux.workspace:workspace-state))","params":[{"name":"state","type":"libtmux.workspace:workspace-state"}],"label":"Primary method: libtmux.workspace:workspace-state"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return fresh finite metadata for WORKSPACE-STATE or WORKSPACE-STATE-ERROR.\nNo I/O. Partial metadata from an error does not prove readiness or vacancy.","body":"See also: `libtmux.workspace:state-causes`, `libtmux.workspace:state-outcomes`, `libtmux.workspace:state-snapshot`.","seeAlso":["libtmux.workspace:state-causes","libtmux.workspace:state-outcomes","libtmux.workspace:state-snapshot"]},"source":{"file":"src/workspace-api.lisp","line":145,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-state-data"},{"id":"libtmux.workspace:state-outcomes","publicId":"libtmux.workspace:state-outcomes","qualifiedName":"libtmux.workspace:state-outcomes","namespace":"libtmux.workspace","name":"state-outcomes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(state-outcomes state)","params":[{"name":"state"}]},{"identity":"[\"libtmux.workspace:state-outcomes\",[],[\"libtmux.workspace:workspace-state-error\"]]","methodKind":"function","raw":"(state-outcomes (condition libtmux.workspace:workspace-state-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-state-error"}],"label":"Primary method: libtmux.workspace:workspace-state-error"},{"identity":"[\"libtmux.workspace:state-outcomes\",[],[\"libtmux.workspace:workspace-state\"]]","methodKind":"function","raw":"(state-outcomes (state libtmux.workspace:workspace-state))","params":[{"name":"state","type":"libtmux.workspace:workspace-state"}],"label":"Primary method: libtmux.workspace:workspace-state"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return STATE's read COMMAND-OUTCOME objects in a fresh simple vector.\nIncludes retained unsuccessful reads. No I/O.","body":"See also: `libtmux:outcome-status`, `libtmux.workspace:state-causes`.","seeAlso":["libtmux:outcome-status","libtmux.workspace:state-causes"]},"source":{"file":"src/workspace-api.lisp","line":154,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-state-outcomes"},{"id":"libtmux.workspace:state-snapshot","publicId":"libtmux.workspace:state-snapshot","qualifiedName":"libtmux.workspace:state-snapshot","namespace":"libtmux.workspace","name":"state-snapshot","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(state-snapshot state)","params":[{"name":"state"}]},{"identity":"[\"libtmux.workspace:state-snapshot\",[],[\"libtmux.workspace:workspace-state-error\"]]","methodKind":"function","raw":"(state-snapshot (condition libtmux.workspace:workspace-state-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-state-error"}],"label":"Primary method: libtmux.workspace:workspace-state-error"},{"identity":"[\"libtmux.workspace:state-snapshot\",[],[\"libtmux.workspace:workspace-state\"]]","methodKind":"function","raw":"(state-snapshot (state libtmux.workspace:workspace-state))","params":[{"name":"state","type":"libtmux.workspace:workspace-state"}],"label":"Primary method: libtmux.workspace:workspace-state"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return STATE's retained captured SNAPSHOT, or NIL before capture. No I/O.","body":"See also: `libtmux.workspace:fetch-workspace-state`, `libtmux:panes`, `libtmux.workspace:state-data`.","seeAlso":["libtmux.workspace:fetch-workspace-state","libtmux:panes","libtmux.workspace:state-data"]},"source":{"file":"src/workspace-api.lisp","line":150,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-state-snapshot"},{"id":"libtmux.workspace:step-action","publicId":"libtmux.workspace:step-action","qualifiedName":"libtmux.workspace:step-action","namespace":"libtmux.workspace","name":"step-action","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(step-action step)","params":[{"name":"step"}]},{"identity":"[\"libtmux.workspace:step-action\",[],[\"libtmux.workspace:workspace-step\"]]","methodKind":"function","raw":"(step-action (workspace-step libtmux.workspace:workspace-step))","params":[{"name":"workspace-step","type":"libtmux.workspace:workspace-step"}],"label":"Primary method: libtmux.workspace:workspace-step"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return STEP's action keyword, without I/O.","body":"See also: `libtmux.workspace:plan-steps`, `libtmux.workspace:step-data`.","seeAlso":["libtmux.workspace:plan-steps","libtmux.workspace:step-data"]},"source":{"file":"src/workspace.lisp","line":45,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-step-action"},{"id":"libtmux.workspace:step-data","publicId":"libtmux.workspace:step-data","qualifiedName":"libtmux.workspace:step-data","namespace":"libtmux.workspace","name":"step-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(step-data step)","params":[{"name":"step"}]},{"identity":"[\"libtmux.workspace:step-data\",[],[\"libtmux.workspace:workspace-step\"]]","methodKind":"function","raw":"(step-data (step libtmux.workspace:workspace-step))","params":[{"name":"step","type":"libtmux.workspace:workspace-step"}],"label":"Primary method: libtmux.workspace:workspace-step"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return a fresh plist of STEP operands, without I/O.","body":"See also: `libtmux.workspace:plan-steps`, `libtmux.workspace:step-action`.","seeAlso":["libtmux.workspace:plan-steps","libtmux.workspace:step-action"]},"source":{"file":"src/workspace.lisp","line":50,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-step-data"},{"id":"libtmux.workspace:workspace","publicId":"libtmux.workspace:workspace","qualifiedName":"libtmux.workspace:workspace","namespace":"libtmux.workspace","name":"workspace","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"An immutable-by-contract, owned workspace description."},"source":{"file":"src/workspace.lisp","line":132,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace"},{"id":"libtmux.workspace:workspace-apply-failed","publicId":"libtmux.workspace:workspace-apply-failed","qualifiedName":"libtmux.workspace:workspace-apply-failed","namespace":"libtmux.workspace","name":"workspace-apply-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Workspace application stopped with retained partial outcomes."},"source":{"file":"src/workspace.lisp","line":94,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-workspace-apply-failed"},{"id":"libtmux.workspace:workspace-conflict","publicId":"libtmux.workspace:workspace-conflict","qualifiedName":"libtmux.workspace:workspace-conflict","namespace":"libtmux.workspace","name":"workspace-conflict","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Captured topology conflicts with the declared workspace."},"source":{"file":"src/workspace.lisp","line":84,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-workspace-conflict"},{"id":"libtmux.workspace:workspace-data","publicId":"libtmux.workspace:workspace-data","qualifiedName":"libtmux.workspace:workspace-data","namespace":"libtmux.workspace","name":"workspace-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(workspace-data workspace)","params":[{"name":"workspace"}]},{"identity":"[\"libtmux.workspace:workspace-data\",[],[\"libtmux.workspace:workspace\"]]","methodKind":"function","raw":"(workspace-data (workspace libtmux.workspace:workspace))","params":[{"name":"workspace","type":"libtmux.workspace:workspace"}],"label":"Primary method: libtmux.workspace:workspace"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return fresh closed native data for WORKSPACE, without I/O.","body":"See also: `libtmux.workspace:make-workspace`, `libtmux.workspace:plan-workspace`.","seeAlso":["libtmux.workspace:make-workspace","libtmux.workspace:plan-workspace"]},"source":{"file":"src/workspace.lisp","line":40,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-workspace-data"},{"id":"libtmux.workspace:workspace-deadline-exceeded","publicId":"libtmux.workspace:workspace-deadline-exceeded","qualifiedName":"libtmux.workspace:workspace-deadline-exceeded","namespace":"libtmux.workspace","name":"workspace-deadline-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"The application budget expired at a workspace boundary.\nWORKSPACE-LIMIT returns :TOTAL-TIMEOUT. No new command outcome is implied;\nprevious completed outcomes remain on a wrapping WORKSPACE-APPLY-FAILED.\nAn already admitted core call retains its own timeout and cleanup contract.","body":"See also: `libtmux.workspace:apply-workspace`, `libtmux.workspace:result-outcomes`, `libtmux.workspace:workspace-limit`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux.workspace:result-outcomes","libtmux.workspace:workspace-limit"]},"source":{"file":"src/workspace.lisp","line":102,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-workspace-deadline-exceeded"},{"id":"libtmux.workspace:workspace-error","publicId":"libtmux.workspace:workspace-error","qualifiedName":"libtmux.workspace:workspace-error","namespace":"libtmux.workspace","name":"workspace-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"A workspace validation, planning, or application failure."},"source":{"file":"src/workspace.lisp","line":76,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-workspace-workspace-error"},{"id":"libtmux.workspace:workspace-inspection","publicId":"libtmux.workspace:workspace-inspection","qualifiedName":"libtmux.workspace:workspace-inspection","namespace":"libtmux.workspace","name":"workspace-inspection","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Explicit read evidence, including incomplete or invalid owned work.\nAn inspection cannot stand in for WORKSPACE-STATE in local planning.","body":"See also: `libtmux.workspace:inspect-workspace`, `libtmux.workspace:inspection-data`, `libtmux.workspace:workspace-inspection-error`.","seeAlso":["libtmux.workspace:inspect-workspace","libtmux.workspace:inspection-data","libtmux.workspace:workspace-inspection-error"]},"source":{"file":"src/workspace-api.lisp","line":130,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace-inspection"},{"id":"libtmux.workspace:workspace-inspection-error","publicId":"libtmux.workspace:workspace-inspection-error","qualifiedName":"libtmux.workspace:workspace-inspection-error","namespace":"libtmux.workspace","name":"workspace-inspection-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Inspection stopped with its original and terminal failures retained.\nINSPECTION-EVIDENCE returns the partial public observation. Its causes remain\nseparate from INSPECTION-TERMINAL; neither admits planning or mutation.","body":"See also: `libtmux.workspace:inspection-causes`, `libtmux.workspace:inspection-evidence`, `libtmux.workspace:inspection-terminal`.","seeAlso":["libtmux.workspace:inspection-causes","libtmux.workspace:inspection-evidence","libtmux.workspace:inspection-terminal"]},"source":{"file":"src/workspace-api.lisp","line":137,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-workspace-inspection-error"},{"id":"libtmux.workspace:workspace-limit","publicId":"libtmux.workspace:workspace-limit","qualifiedName":"libtmux.workspace:workspace-limit","namespace":"libtmux.workspace","name":"workspace-limit","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(workspace-limit condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.workspace:workspace-limit\",[],[\"libtmux.workspace:workspace-error\"]]","methodKind":"function","raw":"(workspace-limit (condition libtmux.workspace:workspace-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-error"}],"label":"Primary method: libtmux.workspace:workspace-error"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return the exhausted workspace limit name, or NIL, without I/O."},"source":{"file":"src/workspace.lisp","line":31,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-workspace-limit"},{"id":"libtmux.workspace:workspace-limit-exceeded","publicId":"libtmux.workspace:workspace-limit-exceeded","qualifiedName":"libtmux.workspace:workspace-limit-exceeded","namespace":"libtmux.workspace","name":"workspace-limit-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"A workspace JSON or file input exceeds a configured bound."},"source":{"file":"src/workspace.lisp","line":91,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.workspace:invalid-workspace-document"],"slug":"libtmux-workspace-workspace-limit-exceeded"},{"id":"libtmux.workspace:workspace-path","publicId":"libtmux.workspace:workspace-path","qualifiedName":"libtmux.workspace:workspace-path","namespace":"libtmux.workspace","name":"workspace-path","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(workspace-path condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.workspace:workspace-path\",[],[\"libtmux.workspace:workspace-error\"]]","methodKind":"function","raw":"(workspace-path (condition libtmux.workspace:workspace-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-error"}],"label":"Primary method: libtmux.workspace:workspace-error"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return a fresh vector locating the workspace error, without I/O."},"source":{"file":"src/workspace.lisp","line":28,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-workspace-path"},{"id":"libtmux.workspace:workspace-plan","publicId":"libtmux.workspace:workspace-plan","qualifiedName":"libtmux.workspace:workspace-plan","namespace":"libtmux.workspace","name":"workspace-plan","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"A finite local preview, with separate owned publication metadata."},"source":{"file":"src/workspace.lisp","line":143,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace-plan"},{"id":"libtmux.workspace:workspace-result","publicId":"libtmux.workspace:workspace-result","qualifiedName":"libtmux.workspace:workspace-result","namespace":"libtmux.workspace","name":"workspace-result","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Retained workspace application evidence and final captured topology."},"source":{"file":"src/workspace.lisp","line":147,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace-result"},{"id":"libtmux.workspace:workspace-state","publicId":"libtmux.workspace:workspace-state","qualifiedName":"libtmux.workspace:workspace-state","namespace":"libtmux.workspace","name":"workspace-state","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Captured ready/vacant owned workspace evidence for local planning.\nAcquire through FETCH-WORKSPACE-STATE. Readers remain usable after client close.","body":"See also: `libtmux.workspace:plan-workspace`, `libtmux.workspace:state-data`, `libtmux.workspace:state-snapshot`, `libtmux.workspace:workspace-inspection`.","seeAlso":["libtmux.workspace:plan-workspace","libtmux.workspace:state-data","libtmux.workspace:state-snapshot","libtmux.workspace:workspace-inspection"]},"source":{"file":"src/workspace-api.lisp","line":114,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace-state"},{"id":"libtmux.workspace:workspace-state-error","publicId":"libtmux.workspace:workspace-state-error","qualifiedName":"libtmux.workspace:workspace-state-error","namespace":"libtmux.workspace","name":"workspace-state-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Owned state acquisition failed with retained partial read evidence.\nFailure does not imply vacancy or grant ownership. Inspect STATE-DATA,\nSTATE-SNAPSHOT, STATE-OUTCOMES and STATE-CAUSES without further I/O.","body":"See also: `libtmux:error-cause`, `libtmux.workspace:fetch-workspace-state`, `libtmux.workspace:inspect-workspace`.","seeAlso":["libtmux:error-cause","libtmux.workspace:fetch-workspace-state","libtmux.workspace:inspect-workspace"]},"source":{"file":"src/workspace-api.lisp","line":121,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-workspace-state-error"},{"id":"libtmux.workspace:workspace-step","publicId":"libtmux.workspace:workspace-step","qualifiedName":"libtmux.workspace:workspace-step","namespace":"libtmux.workspace","name":"workspace-step","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"One inspectable, inert workspace operation in execution order."},"source":{"file":"src/workspace.lisp","line":138,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace-step"},{"id":"libtmux.workspace.cli","publicId":"libtmux.workspace.cli","qualifiedName":"libtmux.workspace.cli","namespace":"","name":"libtmux.workspace.cli","kind":"module","modifiers":[],"signatures":[],"product":"workspace","package":"libtmux/workspace/cli","publicOwner":"libtmux.workspace.cli","apiScope":"exported","doc":{"summary":"Command-line adapter for bounded libtmux workspace documents.\nVALIDATE and v1 offline PLAN are local. Owned PLAN, INSPECT and APPLY require an\nexplicit socket path and use a scoped libtmux client. Output is one JSON summary;\nfailures return a nonzero status without entering the debugger."},"source":{"file":"src/workspace-cli.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-cli"},{"id":"libtmux.workspace.cli:main","publicId":"libtmux.workspace.cli:main","qualifiedName":"libtmux.workspace.cli:main","namespace":"libtmux.workspace.cli","name":"main","kind":"function","modifiers":[],"parent":"libtmux.workspace.cli","signatures":[{"raw":"(main &key (arguments (command-line-arguments)) (stdout *standard-output*) (stderr *error-output*))","params":[{"name":"arguments","default":"(command-line-arguments)","optional":true,"keywordOnly":true},{"name":"stdout","default":"*standard-output*","optional":true,"keywordOnly":true},{"name":"stderr","default":"*error-output*","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace/cli","publicOwner":"libtmux.workspace.cli","apiScope":"exported","doc":{"summary":"Run the workspace CLI for ARGUMENTS and return process status 0, 1, or 2.\nVALIDATE is local. PLAN without an endpoint is local and requires workspace/1;\nendpoint PLAN reads a snapshot or owned state before producing a local preview.\nAPPLY and owned-only INSPECT require --socket-path. --program selects the native\nexecutable. The standalone --reconcile flag is owned-only for PLAN and APPLY.\nOptions and schema misuse fail before opening a client. The scoped client closes\nwithout terminating the server. STDOUT receives one JSON result or help.\nSTDERR receives usage text or one JSON error retaining condition causes, failed\nstep data, and command outcomes, including byte arrays and unknown dispatch\nstatus. An unavailable exit code or failed step is omitted. MAIN does not call\nUIOP:QUIT, close caller streams, or enter the debugger.\nOwned summaries add DATA with native lowercase keyword names. Vectors are arrays,\nBoolean fields preserve false and absent optional values become null. Environment\nand session-group associations are objects. Native snapshots are not serialized.\nCompleted INSPECT returns 0 even for busy or invalid ownership; DATA's COMPLETE-P\ndescribes read completion, not readiness. Failed inspection retains its partial\ndata and original/terminal causes. Nested condition details stop after eight\nlevels and mark detailsTruncated. No command is automatically retried.","body":"See also: `libtmux.workspace:apply-workspace`, `libtmux:outcome-phase`, `libtmux:outcome-status`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux:outcome-phase","libtmux:outcome-status"]},"source":{"file":"src/workspace-cli.lisp","line":402,"repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","extractedRevision":"e6f319c4257789cfe39547af001c718975f0a2ef"},"slug":"libtmux-workspace-cli-main"}]} +{"port":"lisp","repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractor":"libtmux.documentation/1","nativeProvenance":{"files":[{"path":"libtmux.asd","sha256":"cdad3b622b24bfa92168f9dca4f5bbd4f88a9501a156cf1a3c78aa56a966e6aa"},{"path":"src/backend-sbcl.lisp","sha256":"50cf025093f8a0cc1d9449ea5885736f1131c64f485d1ad903be323129436ab7"},{"path":"src/buffers.lisp","sha256":"9780f7d7b752f2d5060c17b46a4da842bcc78e89d698715465d796c35d8b6280"},{"path":"src/capture.lisp","sha256":"11395529a9d163843f56a8a66c5962762f773fe95ee36e4f291ce3ffab07d4e9"},{"path":"src/client-operations.lisp","sha256":"d7016fc6fbd208129ba2a537237cb3466a7663db8f5bbae864c874eaa70fce86"},{"path":"src/client.lisp","sha256":"afe1e9d6333e908a1bec48d16667047af932f35f8d729e3ddf3e3a7d965b972c"},{"path":"src/command-encoding.lisp","sha256":"9f318f1cd9b3305f1344f7e9824b73356e296aac1ca724d4521071649c12b0d4"},{"path":"src/command-policy.lisp","sha256":"2858a47e7dfae75dd60f6878c1aeb2ad2539570ad2a76a1f2cbee8e303ec719d"},{"path":"src/conditions.lisp","sha256":"da64f16c565705503948e138f84900cfda248c141665d62661c9e12512c6c11b"},{"path":"src/configuration-acquisition.lisp","sha256":"34f586139992b3397c69ef8e3a06120ab902431b4e00f0f89156253aca307328"},{"path":"src/configuration-codec.lisp","sha256":"cfdeabfc6f0647b3b64f3b24bbbd55e06b11f983cc94033ccf549f8e615c8c91"},{"path":"src/configuration-operations.lisp","sha256":"d0fa012efd91fab9ebd8fa3b54e39bf31ec785ff0abac88a055dac706d44e8cd"},{"path":"src/configuration-options.lisp","sha256":"2751fa1db4d8e65943e08b6634940d280c951ff3cccb9e4a93f8e08ccae439c2"},{"path":"src/configuration-registry.lisp","sha256":"309891a4eef1ab0db3ea91d549e263dbdbe83de8623e107a1d73d9b0074a2da5"},{"path":"src/control-codec.lisp","sha256":"59ef8cb67a9c717dd78bff05971a7844856829b77830b462b1a216c6580deba6"},{"path":"src/control-peer.lisp","sha256":"f5eeba9ab181eb3b323f2e33aaaff6be080a14bdb82403d977c32341b7d04036"},{"path":"src/control-reconnect.lisp","sha256":"50d4a8cb3463ad4061aacb36bc26d8c4cbbedc223100b34ba3b41f81b94f00d7"},{"path":"src/control.lisp","sha256":"1c41cd13562cd46a4884747322d1e72638a2292769f93ddf8b832169c5d41c32"},{"path":"src/creation.lisp","sha256":"8a5b3d3a4cd9083d307b9de720f3b5fe1b810140b75fff73f64e16b3e30b43f5"},{"path":"src/daemon-sbcl.lisp","sha256":"8caed4b4b396ad305e855cd2b3698a301fe70055eba8003049e1c48983993ec6"},{"path":"src/daemon.lisp","sha256":"0e8a46340c2cf4dd1cfd0fa32bcf1f5fedf2841d4be8cb9885827ada82d932ac"},{"path":"src/dispatch.lisp","sha256":"ca5ce6c7fb77b23b0e8139314d25c6d9084566016fec04055959beafa57747fd"},{"path":"src/geometry.lisp","sha256":"e42bd9db5c6622bb0be8af9f3b3d7baa2b7ca96d515320033614ea54010dd2ea"},{"path":"src/graph.lisp","sha256":"834525d51cc9a27a9825a728628a1038aa0c7644dfb21131c3d4ca2ebdb12371"},{"path":"src/json.lisp","sha256":"7e150f6e444b1442038876d571e39b4ecb044b4628293f34e1079712ce60e022"},{"path":"src/key-bindings.lisp","sha256":"1f31bd4c35814dc4a9148238bc11966cf16a09bc9adfce4a40c8f20fcd3da9c9"},{"path":"src/model.lisp","sha256":"023bedb185e21a055791154471238c2b8d683a18518a22e331424ff253240400"},{"path":"src/operations.lisp","sha256":"b43e9ed34c077b8d7923f1bc1dd16ac932c5d7ee4c30f89dc724ca5e593c3164"},{"path":"src/options-catalog.lisp","sha256":"533a6d516533b8f68cc19fdef4e1ffd65d4dc246531c42aa7786def597180608"},{"path":"src/package.lisp","sha256":"e85f5703ba781e6a14b7383f085b3a67f668f811cb85ddbd1755d40f52bf640f"},{"path":"src/placement.lisp","sha256":"02448dfd39fd8efbb5c71a5c2756098990f614538232f7697e934d333ca7b1b0"},{"path":"src/process-operations.lisp","sha256":"aeb98fb595e892efc16843967115d011e30555a46f9412119e1670ddc8f3a806"},{"path":"src/process-sbcl.lisp","sha256":"38086686cdc72a1d04540b168af2f6b9f230451d65c4f6c58af8e1900268325b"},{"path":"src/query-source.lisp","sha256":"74df790beb76b11e6d10a9a99b37be94d6082a61ee641d7925fa6ca5a699cdfe"},{"path":"src/query.lisp","sha256":"c367cba6f86b3fa955537f7f65b696383b6a78865609c33c1e333c963f8aaa02"},{"path":"src/records.lisp","sha256":"8385bd722ec57035dd314ff26cf3fb341f3139ce6bd6dd573aa4c58563734d63"},{"path":"src/regex.lisp","sha256":"4c7e0c014b5da0e11142e6b00df8fc9726cb6babb96497492216980e4f2f13f0"},{"path":"src/registry.lisp","sha256":"75c2c5e2f7ee7f76ae05586fadfbb036dff6b2d648452e59105ac0881c3f419f"},{"path":"src/selection.lisp","sha256":"09ea8529a693d18536c70a2c97ef1b0e7d51ba99251baf5ca38582c1fab16741"},{"path":"src/server-operations.lisp","sha256":"799b14c63b2ee3a08c1afb78c43dccc5d4e027666d874c40a38f824bdbcbd8c0"},{"path":"src/terminal-operations.lisp","sha256":"4014261a3de439b8390560500d753bb9f41cd33e51493f33081a531b6f0771ac"},{"path":"src/termination.lisp","sha256":"51eb12f82b8afe1ceeb482d41c009eb5a992aec722170d5ed6c64a5d1faf9535"},{"path":"src/transport.lisp","sha256":"150dd6b0377b72d6d39de9132fd1d6b6a8564226871c753bddb867b7a9d34d36"},{"path":"src/witness-sbcl.lisp","sha256":"a36ecdb0918adfc8a7df66dad9c30f5be1efb75df9b0e9c16d1f1727b148ecb3"},{"path":"src/workspace-api.lisp","sha256":"ec61436c00a55e5bc69c962188a0161c74cc1a849b7f205bbb5a760fdf3b0bd2"},{"path":"src/workspace-apply.lisp","sha256":"16d0d48d6fec1599f9fe850810da598c1f2479c509ee3a954b89ac67c5e6c260"},{"path":"src/workspace-cli.lisp","sha256":"f553411d6fa8f04b7584dd253bdb9f3351fdd224fc7aa3a8dc71d13ad0970156"},{"path":"src/workspace-geometry.lisp","sha256":"2a6ac72eb7ec1c5cb7bcb7c60aa3100b45db60bbcab23281bd5e6dbba9831ea7"},{"path":"src/workspace-inspection.lisp","sha256":"9c2847872dd65d1faf878c44019c1c03250f44f6640dccc753e1ae4de2a3e827"},{"path":"src/workspace-owned.lisp","sha256":"2c8b5fa3a5d36708d140a4b41c4d6c7903853cfd7b31700aa6efdf82a846eebc"},{"path":"src/workspace-plan.lisp","sha256":"7e384ce5e63962e268c43ae430ad7afab585f0ae19310e334ca5f2f13f870948"},{"path":"src/workspace-state.lisp","sha256":"3db4eb6f0de97074a92f4f7497a8ded801a3cee875db4c7c584b8011bd7af775"},{"path":"src/workspace-writer.lisp","sha256":"a1ebeb5f79e32e66055792f0768ba41e37b05052fcb0f9eb730594ef9911f1e1"},{"path":"src/workspace.lisp","sha256":"a315a15ad3753ae01745a05fdbdf1c30f8961d3fc24dd010d776ec864de27ce8"},{"path":"tools/documentation.lisp","sha256":"1f68cd1990e8ddaa20b73f32a6e858f2879f47fc71af8958f8df36a65220493b"}],"exporter":{"name":"libtmux.documentation","version":1,"revision":"f487e91f2635f4949cfbbaf08d47a3da70539858","dirty":false,"runtime":{"implementation":"SBCL","implementationVersion":"2.6.10","asdfVersion":"3.3.7"},"library":{"version":"0.1.0"}}},"sources":[{"product":"core","package":"libtmux","repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","version":"0.1.0"},{"product":"core","package":"libtmux/control","repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","version":"0.1.0"},{"product":"core","package":"libtmux/json","repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","version":"0.1.0"},{"product":"core","package":"libtmux/query","repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","version":"0.1.0"},{"product":"workspace","package":"libtmux/workspace","repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","version":"0.1.0"},{"product":"workspace","package":"libtmux/workspace/cli","repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","version":"0.1.0"}],"symbols":[{"id":"libtmux","publicId":"libtmux","qualifiedName":"libtmux","namespace":"","name":"libtmux","kind":"module","modifiers":[],"signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Native Common Lisp captured tmux graphs and explicit external operations.\nOPEN-CLIENT/WITH-CLIENT establish connection scopes without starting a daemon.\nFETCH-SNAPSHOT acquires sessions, physical windows, panes, window links and\nattached clients. Captured getters, traversal and ENTITY-DATA are local and\nremain usable after closure; captured strings and containers are owned copies. REFRESH returns\na new observation. Named mutators take CLIENT first and return COMMAND-OUTCOME;\nOUTCOME-VALUE and FIELD-VALUE return value and presence as two values.\nOperations are synchronous, bounded and cancellable, with one active operation\nper client. Typed LIBTMUX-ERROR conditions retain diagnostic outcome and cause.\nClosing a client releases owned resources and leaves the daemon alive.\nSTART-DAEMON/WITH-DAEMON separately own a new empty-config foreground daemon;\nSTOP-DAEMON releases that owner, with incomplete cleanup retained for retry.\nSee docs/index.md for the tutorial, API reference and current capability limits."},"source":{"file":"src/package.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux"},{"id":"libtmux:active-p","publicId":"libtmux:active-p","qualifiedName":"libtmux:active-p","namespace":"libtmux","name":"active-p","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(active-p entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:active-p\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(active-p (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"},{"identity":"[\"libtmux:active-p\",[],[\"libtmux:window-link\"]]","methodKind":"function","raw":"(active-p (entity libtmux:window-link))","params":[{"name":"entity","type":"libtmux:window-link"}],"label":"Primary method: libtmux:window-link"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return captured active state and presence, without I/O. False is NIL,T."},"source":{"file":"src/model.lisp","line":176,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-active-p"},{"id":"libtmux:attached-client","publicId":"libtmux:attached-client","qualifiedName":"libtmux:attached-client","namespace":"libtmux","name":"attached-client","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"One captured attached-tmux-client row; identity is observation-scoped."},"source":{"file":"src/model.lisp","line":30,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:entity"],"slug":"libtmux-attached-client"},{"id":"libtmux:bind-key","publicId":"libtmux:bind-key","qualifiedName":"libtmux:bind-key","namespace":"libtmux","name":"bind-key","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(bind-key client key &key (table \"prefix\") repeat note (command nil command-p) (command-source nil source-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"key"},{"name":"table","default":"\"prefix\"","optional":true,"keywordOnly":true},{"name":"repeat","optional":true,"keywordOnly":true},{"name":"note","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"command-source","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Replace TABLE's KEY binding and return a COMMAND-OUTCOME.\nTABLE defaults to prefix. KEY, TABLE and optional NOTE are literal strings.\nREPEAT enables native key repetition. Supply exactly one of COMMAND argv or\nCOMMAND-SOURCE, explicit tmux parser source. COMMAND argv owns each argument\nand preserves its token boundary; its first token must not contain =.","body":"Tmux parses the binding immediately. Assignments/directives in COMMAND-SOURCE\ncan change daemon environment before a later parse error. Aliases expand during\nbinding in both forms and can also introduce parser side effects. Failure is\nnot rollback. Ordinary stored command nodes run later on a key event with its\nnative target context; this does not retain captured-handle authority.\n\nSuccess acknowledges the binding and its hooks, not later key execution.\nBlocks under shared preflight/dispatch limits, acquires no observation and\nnever retries. Native key/source errors and uncertain outcomes remain inspectable.\n\nSee also: `libtmux:error-outcome`, `libtmux:list-keys`, `libtmux:send-keys`, `libtmux:unbind-key`.","seeAlso":["libtmux:error-outcome","libtmux:list-keys","libtmux:send-keys","libtmux:unbind-key"]},"source":{"file":"src/key-bindings.lisp","line":67,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-bind-key"},{"id":"libtmux:break-pane","publicId":"libtmux:break-pane","qualifiedName":"libtmux:break-pane","namespace":"libtmux","name":"break-pane","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(break-pane client pane source-link session index &key name (detached t) (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"source-link"},{"name":"session"},{"name":"index"},{"name":"name","optional":true,"keywordOnly":true},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Break PANE from SOURCE-LINK into SESSION's free INDEX; return an outcome.\nSOURCE-LINK fixes the session context when breaking the window's only pane;\ntmux moves that link instead of creating another physical window. NAME is\nliteral. DETACHED defaults true. OBSERVE supplies the destination window link.\nOn tmux 3.7, a new named window requires a following RENAME-WINDOW in the same\nguarded request; its configured hooks can run. Failure can leave the pane moved.\nThe pane keeps its identity. Signals INVALID-ARGUMENT, STALE-TARGET or an\noperational condition. Occupied indexes are never overwritten."},"source":{"file":"src/placement.lisp","line":123,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-break-pane"},{"id":"libtmux:cancel","publicId":"libtmux:cancel","qualifiedName":"libtmux:cancel","namespace":"libtmux","name":"cancel","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(cancel token)","params":[{"name":"token"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Cancel registered operations and return true only for the first request.\nCancellation wakes each active owner. It does not wait for completion or undo\na mutation. Inspect the operation's outcome and dispatch phase."},"source":{"file":"src/transport.lisp","line":87,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-cancel"},{"id":"libtmux:cancellation-token","publicId":"libtmux:cancellation-token","qualifiedName":"libtmux:cancellation-token","namespace":"libtmux","name":"cancellation-token","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"One-way cancellation state; idle tokens own no OS descriptors."},"source":{"file":"src/transport.lisp","line":68,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-cancellation-token"},{"id":"libtmux:cancelled-p","publicId":"libtmux:cancelled-p","qualifiedName":"libtmux:cancelled-p","namespace":"libtmux","name":"cancelled-p","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(cancelled-p token)","params":[{"name":"token"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return whether TOKEN has been cancelled, without external I/O."},"source":{"file":"src/transport.lisp","line":81,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-cancelled-p"},{"id":"libtmux:capture-pane","publicId":"libtmux:capture-pane","qualifiedName":"libtmux:capture-pane","namespace":"libtmux","name":"capture-pane","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(capture-pane client pane &rest options)","params":[{"name":"client"},{"name":"pane"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Read PANE now; return strict UTF-8 text and the diagnostic command outcome.\nPreserve whitespace and trailing lines.\nOPTIONS are the CAPTURE-PANE-BYTES options. Invalid UTF-8 signals DECODING-ERROR;\ncall CAPTURE-PANE-BYTES when byte preservation is required."},"source":{"file":"src/operations.lisp","line":74,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-capture-pane"},{"id":"libtmux:capture-pane-bytes","publicId":"libtmux:capture-pane-bytes","qualifiedName":"libtmux:capture-pane-bytes","namespace":"libtmux","name":"capture-pane-bytes","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(capture-pane-bytes client pane &key start end join-lines escape-sequences escape-controls alternate pending-output cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"start","optional":true,"keywordOnly":true},{"name":"end","optional":true,"keywordOnly":true},{"name":"join-lines","optional":true,"keywordOnly":true},{"name":"escape-sequences","optional":true,"keywordOnly":true},{"name":"escape-controls","optional":true,"keywordOnly":true},{"name":"alternate","optional":true,"keywordOnly":true},{"name":"pending-output","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Read PANE now; return owned output octets and the diagnostic command outcome.\nSTART/END accept signed line numbers or :ALL for the corresponding history edge.\nJOIN-LINES joins wrapped rows; ESCAPE-SEQUENCES retains terminal styles;\nESCAPE-CONTROLS asks tmux to render controls as octal; ALTERNATE selects its\nalternate screen; PENDING-OUTPUT requests tmux's pending input bytes. Tmux owns\nthese capture modes and may reject unavailable combinations. Does not decode or\ntrim bytes. Signals STALE-TARGET or an operational condition with its outcome."},"source":{"file":"src/operations.lisp","line":50,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-capture-pane-bytes"},{"id":"libtmux:cleanup-failed","publicId":"libtmux:cleanup-failed","qualifiedName":"libtmux:cleanup-failed","namespace":"libtmux","name":"cleanup-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Owned resources could not be released within the cleanup bound."},"source":{"file":"src/conditions.lisp","line":72,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-cleanup-failed"},{"id":"libtmux:clear-history","publicId":"libtmux:clear-history","qualifiedName":"libtmux:clear-history","namespace":"libtmux","name":"clear-history","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(clear-history client pane &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Clear PANE's retained tmux history; return a COMMAND-OUTCOME.\nCaptured observations remain unchanged. This does not promise to clear the\napplication's current screen. Signals STALE-TARGET or an operational condition."},"source":{"file":"src/terminal-operations.lisp","line":44,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-clear-history"},{"id":"libtmux:client","publicId":"libtmux:client","qualifiedName":"libtmux:client","namespace":"libtmux","name":"client","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A connection scope with one external-operation lease.\nClosing cancels owned work and leaves the tmux daemon alive. Captured data may\noutlive the client. Public operations never expose its mutable storage.","body":"A client reaches one tmux server through a tmux program and an optional socket\nname or path. The operations below take it as their first argument and run one\nat a time per client.\n\n#### What is on here\n\nOperations on a tmux server take a client first. They fall into these groups:\n\n**Connecting and closing.** `libtmux:open-client` checks the tmux version and\nreturns a client for the default socket or the one you name; it starts no\ndaemon. `libtmux:with-client` closes the client on every exit, and\n`libtmux:close-client` does it by hand, cancelling active work and leaving the\ndaemon running. `libtmux:tmux-version`, `libtmux:client-open-p` and\n`libtmux:client-cleanup-failures` report the release seen at open and the\nlifecycle, without contacting tmux. `libtmux.control:open-connection` takes a\nclient and a captured session and attaches a separate control connection,\nwhich needs a daemon at tmux 3.8 or newer.\n\n`libtmux:open-client`, `libtmux:with-client`, `libtmux:close-client`,\n`libtmux:tmux-version`, `libtmux:client-open-p`,\n`libtmux:client-cleanup-failures` and `libtmux.control:open-connection`\n\n**Capturing and querying.** `libtmux:fetch-snapshot` captures sessions,\nwindows, panes, window links and attached clients as one graph that stays\nusable after the client closes; it is an interval observation, not a\ntransaction. `libtmux:fetch-sessions`, `libtmux:fetch-windows`,\n`libtmux:fetch-panes` and `libtmux:fetch-clients` each take a fresh snapshot\nand return one collection, and `libtmux:refresh` returns a replacement\nobservation without changing the earlier one. The optional query package\nfilters a capture locally: `libtmux.query:compile-filter` compiles a filter\nform without evaluating it as Lisp, `libtmux.query:matching` returns the\nvalues it accepts, and `libtmux.query:one` and `libtmux.query:one-or-none`\ntake the single result.\n\n`libtmux:fetch-snapshot`, `libtmux:fetch-sessions`, `libtmux:fetch-windows`,\n`libtmux:fetch-panes`, `libtmux:fetch-clients`, `libtmux:refresh`,\n`libtmux.query:compile-filter`, `libtmux.query:matching`, `libtmux.query:one`\nand `libtmux.query:one-or-none`\n\n**Creating, restarting and removing.** `libtmux:new-session` creates a\ndetached session on a daemon that is already running; it never starts or\nreplaces one. `libtmux:new-window` adds a window to a captured session and\n`libtmux:split-pane` splits a captured pane, and `libtmux:outcome-value`\nsupplies the created object from each result. `libtmux:respawn-pane` restarts\na pane's process in place, and `libtmux:respawn-window` restarts a window as a\nsingle pane. `libtmux:kill-pane`, `libtmux:kill-window` and\n`libtmux:kill-session` delete exactly the captured target, while\n`libtmux:kill-server` terminates the daemon, which `libtmux:close-client`\nnever does.\n\n`libtmux:new-session`, `libtmux:new-window`, `libtmux:split-pane`,\n`libtmux:outcome-value`, `libtmux:respawn-pane`, `libtmux:respawn-window`,\n`libtmux:kill-pane`, `libtmux:kill-window`, `libtmux:kill-session`,\n`libtmux:kill-server` and `libtmux:close-client`\n\n**Selecting, renaming and arranging.** Each operation takes captured targets\nand changes what is selected, how sessions, windows and panes are named, sized\nand laid out, or where they sit. Most also take an observe argument, true by\ndefault, whose replacement record `libtmux:outcome-value` returns; earlier\ncaptures stay unchanged. `libtmux:select-layout` applies a named or custom\nlayout, and `libtmux:swap-windows`, `libtmux:move-window`,\n`libtmux:link-window` and `libtmux:unlink-window` work on window links.\n\n`libtmux:select-window`, `libtmux:select-pane`, `libtmux:next-window`,\n`libtmux:previous-window`, `libtmux:last-window`, `libtmux:last-pane`,\n`libtmux:rename-window`, `libtmux:rename-session`, `libtmux:select-layout`,\n`libtmux:next-layout`, `libtmux:previous-layout`, `libtmux:resize-pane`,\n`libtmux:resize-window`, `libtmux:rotate-window`, `libtmux:swap-panes`,\n`libtmux:swap-windows`, `libtmux:move-pane`, `libtmux:join-pane`,\n`libtmux:break-pane`, `libtmux:move-window`, `libtmux:link-window`,\n`libtmux:unlink-window` and `libtmux:outcome-value`\n\n**Reading and driving panes.** `libtmux:capture-pane` reads a pane as strict\nUTF-8 text and signals a decoding error otherwise, and\n`libtmux:capture-pane-bytes` returns the octets unchanged. `libtmux:send-text`\nsends literal text, `libtmux:send-keys` interprets tmux key names such as C-c\nand Enter, and `libtmux:send-prefix` sends the session's prefix key. A\ncompleted send means tmux processed the request, not that the application\nconsumed it. `libtmux:clear-history`, `libtmux:copy-mode` and\n`libtmux:pipe-pane` clear a pane's history, enter or leave copy mode, and set\nup a tmux-owned pipe.\n\n`libtmux:capture-pane`, `libtmux:capture-pane-bytes`, `libtmux:send-text`,\n`libtmux:send-keys`, `libtmux:send-prefix`, `libtmux:clear-history`,\n`libtmux:copy-mode` and `libtmux:pipe-pane`\n\n**Options, hooks and environment.** `libtmux:set-option`, `libtmux:set-hook`\nand `libtmux:set-environment` write one entry, and every operation here\nrequires a scope, with a captured target for a session, window or pane.\n`libtmux:show-option` returns one decoded option with a presence flag,\n`libtmux:show-options` returns decoded records for several, and\n`libtmux:show-hooks` and `libtmux:show-environment` do the same for hooks and\nenvironment entries. `libtmux:show-options-text` and its hook and environment\ncounterparts return tmux's printer text instead. `libtmux:unset-environment`\ndeletes a name, while `libtmux:remove-environment` stores tmux's removal\nmarker.\n\n`libtmux:set-option`, `libtmux:unset-option`, `libtmux:show-option`,\n`libtmux:show-options`, `libtmux:show-options-text`, `libtmux:set-hook`,\n`libtmux:unset-hook`, `libtmux:show-hooks`, `libtmux:show-hooks-text`,\n`libtmux:set-environment`, `libtmux:unset-environment`,\n`libtmux:remove-environment`, `libtmux:show-environment` and\n`libtmux:show-environment-text`\n\n**Buffers.** `libtmux:set-buffer` and `libtmux:load-buffer` store a string,\noctets or a file's bytes; `libtmux:show-buffer`, `libtmux:save-buffer` and\n`libtmux:paste-buffer` read a buffer's octets, write them to a file or paste\nthem into a pane. `libtmux:list-buffers` returns each buffer's name, size and\ncreation time, and `libtmux:delete-buffer` deletes one. Without a name, show,\nsave, paste and delete use tmux's top buffer, while store and load create an\nautomatic name; deleting by name needs tmux 3.4 or newer.\n\n`libtmux:set-buffer`, `libtmux:load-buffer`, `libtmux:show-buffer`,\n`libtmux:save-buffer`, `libtmux:paste-buffer`, `libtmux:list-buffers` and\n`libtmux:delete-buffer`\n\n**Attached terminals, key bindings and the rest.** `libtmux:switch-client`,\n`libtmux:detach-client` and the other terminal operations act on one attached\nterminal taken from a capture, while `libtmux:lock-session` and\n`libtmux:lock-server` lock a session's or every attached terminal.\n`libtmux:bind-key` and `libtmux:unbind-key` change key bindings and\n`libtmux:server-access` changes the daemon's access list; `libtmux:list-keys`,\n`libtmux:list-commands` and `libtmux:list-server-access` print bindings,\nbuilt-in commands and the access list. `libtmux:wait-for` waits on, signals or\nlocks a channel, though waiting and locking need tmux 3.8, and\n`libtmux:display-message` prints a message through tmux. `libtmux:run-command`\nruns explicit tmux arguments for anything else; it does not check captured\ntargets.\n\n`libtmux:switch-client`, `libtmux:detach-client`, `libtmux:refresh-client`,\n`libtmux:suspend-client`, `libtmux:lock-client`, `libtmux:lock-session`,\n`libtmux:lock-server`, `libtmux:bind-key`, `libtmux:unbind-key`,\n`libtmux:server-access`, `libtmux:list-keys`, `libtmux:list-commands`,\n`libtmux:list-server-access`, `libtmux:wait-for`, `libtmux:display-message`\nand `libtmux:run-command`"},"source":{"file":"src/client.lisp","line":51,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-client"},{"id":"libtmux:client-busy","publicId":"libtmux:client-busy","qualifiedName":"libtmux:client-busy","namespace":"libtmux","name":"client-busy","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Another external operation already owns the client's lease."},"source":{"file":"src/conditions.lisp","line":70,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-client-busy"},{"id":"libtmux:client-cleanup-failures","publicId":"libtmux:client-cleanup-failures","qualifiedName":"libtmux:client-cleanup-failures","namespace":"libtmux","name":"client-cleanup-failures","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(client-cleanup-failures client)","params":[{"name":"client"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of secondary cleanup conditions, newest first. No I/O."},"source":{"file":"src/client.lisp","line":222,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-client-cleanup-failures"},{"id":"libtmux:client-closed","publicId":"libtmux:client-closed","qualifiedName":"libtmux:client-closed","namespace":"libtmux","name":"client-closed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"An external operation was attempted on a closing/closed client."},"source":{"file":"src/conditions.lisp","line":68,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-client-closed"},{"id":"libtmux:client-open-p","publicId":"libtmux:client-open-p","qualifiedName":"libtmux:client-open-p","namespace":"libtmux","name":"client-open-p","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(client-open-p client)","params":[{"name":"client"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return whether CLIENT's lifecycle is open; no tmux I/O.\nAn active operation may still cause CLIENT-BUSY when new work is attempted."},"source":{"file":"src/client.lisp","line":216,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-client-open-p"},{"id":"libtmux:clients","publicId":"libtmux:clients","qualifiedName":"libtmux:clients","namespace":"libtmux","name":"clients","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(clients observation)","params":[{"name":"observation"}]},{"identity":"[\"libtmux:clients\",[],[\"libtmux:session/type\"]]","methodKind":"function","raw":"(clients (session libtmux:session))","params":[{"name":"session","type":"libtmux:session"}],"label":"Primary method: libtmux:session"},{"identity":"[\"libtmux:clients\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(clients (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of attached-client observations, without I/O.\nPreserve listing order and multiplicity, including repeated target names."},"source":{"file":"src/model.lisp","line":58,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-clients"},{"id":"libtmux:close-client","publicId":"libtmux:close-client","qualifiedName":"libtmux:close-client","namespace":"libtmux","name":"close-client","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(close-client client)","params":[{"name":"client"}]},{"identity":"[\"libtmux:close-client\",[],[\"libtmux:client\"]]","methodKind":"function","raw":"(close-client (client libtmux:client))","params":[{"name":"client","type":"libtmux:client"}],"label":"Primary method: libtmux:client"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Reject new work, cancel active work and release owned resources.\nThe operation is idempotent and does not kill the daemon. A bounded teardown\nfailure signals CLEANUP-FAILED; the active owner still retains cleanup duty."},"source":{"file":"src/client.lisp","line":233,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-close-client"},{"id":"libtmux:command-cancelled","publicId":"libtmux:command-cancelled","qualifiedName":"libtmux:command-cancelled","namespace":"libtmux","name":"command-cancelled","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Cancellation stopped an operation; inspect dispatch phase."},"source":{"file":"src/conditions.lisp","line":79,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:outcome-unknown"],"slug":"libtmux-command-cancelled"},{"id":"libtmux:command-failed","publicId":"libtmux:command-failed","qualifiedName":"libtmux:command-failed","namespace":"libtmux","name":"command-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The command failed; ERROR-OUTCOME retains diagnostics."},"source":{"file":"src/conditions.lisp","line":75,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-command-failed"},{"id":"libtmux:command-outcome","publicId":"libtmux:command-outcome","qualifiedName":"libtmux:command-outcome","namespace":"libtmux","name":"command-outcome","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A retained command result; byte and argument readers copy storage.\nSTATUS is :SUCCEEDED, :FAILED, :UNKNOWN or :NOT-DISPATCHED. PHASE is separate\ndispatch evidence. An observation error does not erase a successful mutation."},"source":{"file":"src/transport.lisp","line":28,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-command-outcome"},{"id":"libtmux:configuration-error-name","publicId":"libtmux:configuration-error-name","qualifiedName":"libtmux:configuration-error-name","namespace":"libtmux","name":"configuration-error-name","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(configuration-error-name condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the owned active name at failure, or NIL before name resolution. No I/O.","body":"See also: `libtmux:configuration-error-scope`, `libtmux:configuration-read-failed`.","seeAlso":["libtmux:configuration-error-scope","libtmux:configuration-read-failed"]},"source":{"file":"src/configuration-acquisition.lisp","line":284,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-configuration-error-name"},{"id":"libtmux:configuration-error-scope","publicId":"libtmux:configuration-error-scope","qualifiedName":"libtmux:configuration-error-scope","namespace":"libtmux","name":"configuration-error-scope","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(configuration-error-scope condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the active native table scope at acquisition failure. No I/O.\nThis may be an ancestor table used for inherited lookup.","body":"See also: `libtmux:configuration-error-name`, `libtmux:configuration-read-failed`.","seeAlso":["libtmux:configuration-error-name","libtmux:configuration-read-failed"]},"source":{"file":"src/configuration-acquisition.lisp","line":289,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-configuration-error-scope"},{"id":"libtmux:configuration-partial-records","publicId":"libtmux:configuration-partial-records","qualifiedName":"libtmux:configuration-partial-records","namespace":"libtmux","name":"configuration-partial-records","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(configuration-partial-records condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return owned copies of records fully resolved before acquisition failed. No I/O.\nInspect CONFIGURATION-READ-OUTCOMES for valid individual observations from a\nfailing or incomplete name. No partial record proves a complete acquisition.","body":"See also: `libtmux:configuration-read-failed`, `libtmux:outcome-value`.","seeAlso":["libtmux:configuration-read-failed","libtmux:outcome-value"]},"source":{"file":"src/configuration-acquisition.lisp","line":295,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-configuration-partial-records"},{"id":"libtmux:configuration-read-failed","publicId":"libtmux:configuration-read-failed","qualifiedName":"libtmux:configuration-read-failed","namespace":"libtmux","name":"configuration-read-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A decoded acquisition failed, retaining prior records and native outcomes.\nERROR-CAUSE identifies the failure. ERROR-OUTCOME retains cause-associated or current\nleaf evidence, possibly NIL before the associated read. Its status can be success\nwhen decoding or diagnostics failed. No transport failure becomes absence.\nNo mutation is retried.","body":"See also: `libtmux:configuration-error-name`, `libtmux:configuration-error-scope`, `libtmux:configuration-partial-records`, `libtmux:configuration-read-outcomes`, `libtmux:error-cause`.","seeAlso":["libtmux:configuration-error-name","libtmux:configuration-error-scope","libtmux:configuration-partial-records","libtmux:configuration-read-outcomes","libtmux:error-cause"]},"source":{"file":"src/configuration-acquisition.lisp","line":273,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:command-failed"],"slug":"libtmux-configuration-read-failed"},{"id":"libtmux:configuration-read-outcomes","publicId":"libtmux:configuration-read-outcomes","qualifiedName":"libtmux:configuration-read-outcomes","namespace":"libtmux","name":"configuration-read-outcomes","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(configuration-read-outcomes condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of all retained read outcomes, in acquisition order.\nOutcome objects retain identity. OUTCOME-VALUE exposes any valid decoded leaf\nobservation, independently of the native outcome's success status. Preflight\nfailures can have no selected read outcome. No I/O.","body":"See also: `libtmux:configuration-partial-records`, `libtmux:error-outcome`, `libtmux:outcome-value`.","seeAlso":["libtmux:configuration-partial-records","libtmux:error-outcome","libtmux:outcome-value"]},"source":{"file":"src/configuration-acquisition.lisp","line":302,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-configuration-read-outcomes"},{"id":"libtmux:copy-mode","publicId":"libtmux:copy-mode","qualifiedName":"libtmux:copy-mode","namespace":"libtmux","name":"copy-mode","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(copy-mode client pane &key exit page-up cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"exit","optional":true,"keywordOnly":true},{"name":"page-up","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Enter PANE's tmux copy mode, or EXIT it; return a COMMAND-OUTCOME.\nPAGE-UP scrolls up on entry and cannot be combined with EXIT. This addresses an\nexisting pane and does not create an interactive terminal frontend. Signals\nSTALE-TARGET or an operational condition."},"source":{"file":"src/terminal-operations.lisp","line":52,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-copy-mode"},{"id":"libtmux:current-command","publicId":"libtmux:current-command","qualifiedName":"libtmux:current-command","namespace":"libtmux","name":"current-command","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(current-command entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:current-command\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(current-command (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return copied captured command text and presence, without I/O."},"source":{"file":"src/model.lisp","line":184,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-current-command"},{"id":"libtmux:current-path","publicId":"libtmux:current-path","qualifiedName":"libtmux:current-path","namespace":"libtmux","name":"current-path","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(current-path entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:current-path\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(current-path (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return copied captured path text and presence, without local pathname conversion."},"source":{"file":"src/model.lisp","line":186,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-current-path"},{"id":"libtmux:daemon","publicId":"libtmux:daemon","qualifiedName":"libtmux:daemon","namespace":"libtmux","name":"daemon","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"An explicitly owned foreground tmux daemon and its supervisor.\nCreate it with START-DAEMON and release it with STOP-DAEMON or WITH-DAEMON.\nOrdinary connection clients are separate resources; closing one leaves this\ndaemon alive. The owner retains failed cleanup work until an explicit retry.","body":"See also: `libtmux:start-daemon`, `libtmux:stop-daemon`, `libtmux:with-daemon`.","seeAlso":["libtmux:start-daemon","libtmux:stop-daemon","libtmux:with-daemon"]},"source":{"file":"src/daemon.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-daemon"},{"id":"libtmux:daemon-cleanup-failed","publicId":"libtmux:daemon-cleanup-failed","qualifiedName":"libtmux:daemon-cleanup-failed","namespace":"libtmux","name":"daemon-cleanup-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Owned daemon cleanup is incomplete and remains retryable.\nERROR-DAEMON retains the owner. Inspect DAEMON-CLEANUP-FAILURES and retry\nSTOP-DAEMON; no replacement daemon is started.","body":"See also: `libtmux:daemon-cleanup-failures`, `libtmux:error-daemon`, `libtmux:stop-daemon`.","seeAlso":["libtmux:daemon-cleanup-failures","libtmux:error-daemon","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":65,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:cleanup-failed"],"slug":"libtmux-daemon-cleanup-failed"},{"id":"libtmux:daemon-cleanup-failures","publicId":"libtmux:daemon-cleanup-failures","qualifiedName":"libtmux:daemon-cleanup-failures","namespace":"libtmux","name":"daemon-cleanup-failures","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(daemon-cleanup-failures daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of retained secondary cleanup conditions. No I/O.\nConditions are shared diagnostics, newest first, bounded to sixteen entries.","body":"See also: `libtmux:daemon-failure`, `libtmux:pending-daemon-cleanups`, `libtmux:stop-daemon`.","seeAlso":["libtmux:daemon-failure","libtmux:pending-daemon-cleanups","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":101,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-daemon-cleanup-failures"},{"id":"libtmux:daemon-failure","publicId":"libtmux:daemon-failure","qualifiedName":"libtmux:daemon-failure","namespace":"libtmux","name":"daemon-failure","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(daemon-failure daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return DAEMON's retained primary failure condition, or NIL. No I/O.\nThis shared diagnostic can describe background failure after startup returned.","body":"See also: `libtmux:daemon-cleanup-failures`, `libtmux:daemon-state`.","seeAlso":["libtmux:daemon-cleanup-failures","libtmux:daemon-state"]},"source":{"file":"src/daemon.lisp","line":94,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-daemon-failure"},{"id":"libtmux:daemon-program","publicId":"libtmux:daemon-program","qualifiedName":"libtmux:daemon-program","namespace":"libtmux","name":"daemon-program","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(daemon-program daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned copy of DAEMON's resolved tmux executable path. No I/O.\nPass it as OPEN-CLIENT's :PROGRAM when connecting through DAEMON-SOCKET-PATH.","body":"See also: `libtmux:daemon-socket-path`, `libtmux:open-client`.","seeAlso":["libtmux:daemon-socket-path","libtmux:open-client"]},"source":{"file":"src/daemon.lisp","line":80,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-daemon-program"},{"id":"libtmux:daemon-socket-path","publicId":"libtmux:daemon-socket-path","qualifiedName":"libtmux:daemon-socket-path","namespace":"libtmux","name":"daemon-socket-path","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(daemon-socket-path daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned copy of DAEMON's private socket path, or NIL before allocation.\nNo I/O. An ordinary client may connect while the owner is READY. Closing that\nclient leaves the daemon alive; STOP-DAEMON releases the daemon itself.","body":"See also: `libtmux:daemon-program`, `libtmux:open-client`, `libtmux:stop-daemon`.","seeAlso":["libtmux:daemon-program","libtmux:open-client","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":86,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-daemon-socket-path"},{"id":"libtmux:daemon-start-failed","publicId":"libtmux:daemon-start-failed","qualifiedName":"libtmux:daemon-start-failed","namespace":"libtmux","name":"daemon-start-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Managed startup failed; ERROR-CAUSE and ERROR-DAEMON retain evidence.\nStartup attempts cleanup before propagating this condition. Incomplete cleanup\nalso remains discoverable through PENDING-DAEMON-CLEANUPS.","body":"See also: `libtmux:error-cause`, `libtmux:error-daemon`, `libtmux:stop-daemon`.","seeAlso":["libtmux:error-cause","libtmux:error-daemon","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":58,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-daemon-start-failed"},{"id":"libtmux:daemon-state","publicId":"libtmux:daemon-state","qualifiedName":"libtmux:daemon-state","namespace":"libtmux","name":"daemon-state","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(daemon-state daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return DAEMON's observed lifecycle state without I/O.\nStates are :STARTING, :READY, :STOPPING, :FAILED and :CLOSED. READY records\ncompleted startup verification, not a promise of future process liveness.","body":"See also: `libtmux:daemon-failure`, `libtmux:stop-daemon`.","seeAlso":["libtmux:daemon-failure","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":72,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-daemon-state"},{"id":"libtmux:dead-p","publicId":"libtmux:dead-p","qualifiedName":"libtmux:dead-p","namespace":"libtmux","name":"dead-p","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(dead-p entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:dead-p\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(dead-p (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return tmux's captured dead flag and presence, without inferring it from PID."},"source":{"file":"src/model.lisp","line":190,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-dead-p"},{"id":"libtmux:deadline-exceeded","publicId":"libtmux:deadline-exceeded","qualifiedName":"libtmux:deadline-exceeded","namespace":"libtmux","name":"deadline-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The command exceeded its absolute deadline."},"source":{"file":"src/conditions.lisp","line":81,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:outcome-unknown"],"slug":"libtmux-deadline-exceeded"},{"id":"libtmux:decoding-error","publicId":"libtmux:decoding-error","qualifiedName":"libtmux:decoding-error","namespace":"libtmux","name":"decoding-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Captured bytes do not satisfy the expected text/record codec."},"source":{"file":"src/conditions.lisp","line":85,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-decoding-error"},{"id":"libtmux:delete-buffer","publicId":"libtmux:delete-buffer","qualifiedName":"libtmux:delete-buffer","namespace":"libtmux","name":"delete-buffer","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(delete-buffer client &key name cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Delete the literal named buffer, or the current top buffer; return an outcome.\nNamed deletion requires a live tmux 3.4+ daemon because 3.3a can delete the top\nbuffer when the supplied name is missing. On 3.3a, an explicit NAME signals\nUNSUPPORTED-CAPABILITY before payload dispatch; omission still deletes the top\nbuffer. A name identifies the buffer at dispatch, not an earlier incarnation.\nSignals an operational condition on failure; never retries an unknown deletion."},"source":{"file":"src/buffers.lisp","line":146,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-delete-buffer"},{"id":"libtmux:detach-client","publicId":"libtmux:detach-client","qualifiedName":"libtmux:detach-client","namespace":"libtmux","name":"detach-client","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(detach-client client target &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"target"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request detachment of captured terminal TARGET; return a COMMAND-OUTCOME.\nCLIENT must own the observation. Success acknowledges the server's request,\nnot frontend process exit or terminal restoration. Returns no replacement.\nBlocks under the supplied limits. The unique name/PID/creation/tty preflight\ncannot exclude replacement between validation and dispatch. Missing or foreign\ntargets signal STALE-TARGET; external failures retain their outcome. Never\nretries, detaches other clients, kills a parent, or starts a shell command.","body":"See also: `libtmux:fetch-clients`, `libtmux:outcome-status`, `libtmux:switch-client`.","seeAlso":["libtmux:fetch-clients","libtmux:outcome-status","libtmux:switch-client"]},"source":{"file":"src/client-operations.lisp","line":65,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-detach-client"},{"id":"libtmux:display-message","publicId":"libtmux:display-message","qualifiedName":"libtmux:display-message","namespace":"libtmux","name":"display-message","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(display-message client message &key target format-p cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"message"},{"name":"target","optional":true,"keywordOnly":true},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Print MESSAGE through tmux; return owned UTF-8 text and a COMMAND-OUTCOME.\nAlways uses the ordinary -p printer, preserving its whitespace and trailing lines.\nNative versions can escape output, so it is not a byte-identical echo. MESSAGE\nis literal by default. FORMAT-P enables tmux format and time expansion;\n#() may start shell jobs but does not wait for their output. Fresh requests can\nprint empty or incomplete job results. The native command client owns those\njobs; its disconnect cleans them up.","body":"TARGET may be a captured session, window, pane or window-link owned by CLIENT.\nUse a window-link for exact session/index context. With no target, tmux selects\nthe context; physical windows and panes also leave their session context to\ntmux. Foreign, replaced or vanished targets signal STALE-TARGET.\n\nThe result includes after-hook printer output; it is not a decoded scalar or\nconfiguration record. Hooks may also have effects. The call blocks under shared\npreflight/dispatch limits, acquires no replacement and never retries. Tmux 3.3a\nliteral fallback limits the escaped intermediate text to 8,191 UTF-8 bytes;\nnewer daemons use native literal printing. Encoded command limits also apply.\nInvalid UTF-8 signals DECODING-ERROR with its outcome; other failures retain\ntheir diagnostic outcome. Local validation signals INVALID-ARGUMENT.\n\nSee also: `libtmux:capture-pane`, `libtmux:error-outcome`, `libtmux:outcome-stdout`, `libtmux:run-command`, `libtmux:set-hook`.","seeAlso":["libtmux:capture-pane","libtmux:error-outcome","libtmux:outcome-stdout","libtmux:run-command","libtmux:set-hook"]},"source":{"file":"src/server-operations.lisp","line":52,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-display-message"},{"id":"libtmux:entity","publicId":"libtmux:entity","qualifiedName":"libtmux:entity","namespace":"libtmux","name":"entity","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"An owned observation from one snapshot; construct through acquisition.\nPrivate slot mutation is unsupported. Refresh returns another observation."},"source":{"file":"src/model.lisp","line":17,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-entity"},{"id":"libtmux:entity-data","publicId":"libtmux:entity-data","qualifiedName":"libtmux:entity-data","namespace":"libtmux","name":"entity-data","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(entity-data entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:entity-data\",[],[\"libtmux:entity\"]]","methodKind":"function","raw":"(entity-data (entity libtmux:entity))","params":[{"name":"entity","type":"libtmux:entity"}],"label":"Primary method: libtmux:entity"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh finite plist of captured fields and provenance.\nRelationships contain identifiers, not operational handles. Absent optional\nfields are omitted; present false values remain in the plist. No tmux I/O."},"source":{"file":"src/model.lisp","line":37,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-entity-data"},{"id":"libtmux:entity-model","publicId":"libtmux:entity-model","qualifiedName":"libtmux:entity-model","namespace":"libtmux","name":"entity-model","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(entity-model entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:entity-model\",[],[\"libtmux:entity\"]]","methodKind":"function","raw":"(entity-model (entity libtmux:entity))","params":[{"name":"entity","type":"libtmux:entity"}],"label":"Primary method: libtmux:entity"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return :SESSION, :WINDOW, :PANE, :WINDOW-LINK or :CLIENT. No I/O.\n:CLIENT denotes an attached tmux client observation, not a connection scope."},"source":{"file":"src/model.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-entity-model"},{"id":"libtmux:error-actual-version","publicId":"libtmux:error-actual-version","qualifiedName":"libtmux:error-actual-version","namespace":"libtmux","name":"error-actual-version","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-actual-version condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned copy of the live daemon release that failed the capability check."},"source":{"file":"src/conditions.lisp","line":57,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-actual-version"},{"id":"libtmux:error-cause","publicId":"libtmux:error-cause","qualifiedName":"libtmux:error-cause","namespace":"libtmux","name":"error-cause","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-cause condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-cause\",[],[\"libtmux:libtmux-error\"]]","methodKind":"function","raw":"(error-cause (condition libtmux:libtmux-error))","params":[{"name":"condition","type":"libtmux:libtmux-error"}],"label":"Primary method: libtmux:libtmux-error"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the original underlying condition, or NIL. No I/O; may be shared."},"source":{"file":"src/conditions.lisp","line":5,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-cause"},{"id":"libtmux:error-client","publicId":"libtmux:error-client","qualifiedName":"libtmux:error-client","namespace":"libtmux","name":"error-client","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-client condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-client\",[],[\"libtmux:libtmux-error\"]]","methodKind":"function","raw":"(error-client (condition libtmux:libtmux-error))","params":[{"name":"condition","type":"libtmux:libtmux-error"}],"label":"Primary method: libtmux:libtmux-error"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the connection client associated with the failure, or NIL.\nA partially opened client may still own cleanup work; retry CLOSE-CLIENT if\ncleanup failed. Reading this slot performs no I/O."},"source":{"file":"src/conditions.lisp","line":10,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-client"},{"id":"libtmux:error-commands","publicId":"libtmux:error-commands","qualifiedName":"libtmux:error-commands","namespace":"libtmux","name":"error-commands","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-commands condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned vector of command spellings implicated in the configuration failure."},"source":{"file":"src/conditions.lisp","line":65,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-commands"},{"id":"libtmux:error-daemon","publicId":"libtmux:error-daemon","qualifiedName":"libtmux:error-daemon","namespace":"libtmux","name":"error-daemon","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-daemon condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-daemon\",[],[\"libtmux:daemon-cleanup-failed\"]]","methodKind":"function","raw":"(error-daemon (condition libtmux:daemon-cleanup-failed))","params":[{"name":"condition","type":"libtmux:daemon-cleanup-failed"}],"label":"Primary method: libtmux:daemon-cleanup-failed"},{"identity":"[\"libtmux:error-daemon\",[],[\"libtmux:daemon-start-failed\"]]","methodKind":"function","raw":"(error-daemon (condition libtmux:daemon-start-failed))","params":[{"name":"condition","type":"libtmux:daemon-start-failed"}],"label":"Primary method: libtmux:daemon-start-failed"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the daemon owner retained by a startup or cleanup failure.\nThe owner may need STOP-DAEMON even when START-DAEMON did not return. No I/O.","body":"See also: `libtmux:daemon-cleanup-failed`, `libtmux:daemon-start-failed`, `libtmux:pending-daemon-cleanups`.","seeAlso":["libtmux:daemon-cleanup-failed","libtmux:daemon-start-failed","libtmux:pending-daemon-cleanups"]},"source":{"file":"src/daemon.lisp","line":53,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-daemon"},{"id":"libtmux:error-feature","publicId":"libtmux:error-feature","qualifiedName":"libtmux:error-feature","namespace":"libtmux","name":"error-feature","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-feature condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-feature\",[],[\"libtmux:unsupported-capability\"]]","methodKind":"function","raw":"(error-feature (condition libtmux:unsupported-capability))","params":[{"name":"condition","type":"libtmux:unsupported-capability"}],"label":"Primary method: libtmux:unsupported-capability"},{"identity":"[\"libtmux:error-feature\",[],[\"libtmux:unsupported-platform\"]]","methodKind":"function","raw":"(error-feature (condition libtmux:unsupported-platform))","params":[{"name":"condition","type":"libtmux:unsupported-platform"}],"label":"Primary method: libtmux:unsupported-platform"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the unsupported capability's keyword identifier. No I/O."},"source":{"file":"src/conditions.lisp","line":14,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-feature"},{"id":"libtmux:error-field","publicId":"libtmux:error-field","qualifiedName":"libtmux:error-field","namespace":"libtmux","name":"error-field","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-field condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-field\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-field (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"},{"identity":"[\"libtmux:error-field\",[],[\"libtmux:field-unavailable\"]]","methodKind":"function","raw":"(error-field (condition libtmux:field-unavailable))","params":[{"name":"condition","type":"libtmux:field-unavailable"}],"label":"Primary method: libtmux:field-unavailable"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the requested field key, including an unregistered key. No I/O.\nAn invalid caller value is retained as supplied; it need not be a keyword."},"source":{"file":"src/conditions.lisp","line":19,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-field"},{"id":"libtmux:error-message","publicId":"libtmux:error-message","qualifiedName":"libtmux:error-message","namespace":"libtmux","name":"error-message","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-message condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-message\",[],[\"libtmux:libtmux-error\"]]","methodKind":"function","raw":"(error-message (condition libtmux:libtmux-error))","params":[{"name":"condition","type":"libtmux:libtmux-error"}],"label":"Primary method: libtmux:libtmux-error"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the failure's diagnostic string. No I/O; treat it as read-only."},"source":{"file":"src/conditions.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-message"},{"id":"libtmux:error-model","publicId":"libtmux:error-model","qualifiedName":"libtmux:error-model","namespace":"libtmux","name":"error-model","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-model condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-model\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-model (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"},{"identity":"[\"libtmux:error-model\",[],[\"libtmux.query:invalid-query-target\"]]","methodKind":"function","raw":"(error-model (condition libtmux.query:invalid-query-target))","params":[{"name":"condition","type":"libtmux.query:invalid-query-target"}],"label":"Primary method: libtmux.query:invalid-query-target"},{"identity":"[\"libtmux:error-model\",[],[\"libtmux:field-unavailable\"]]","methodKind":"function","raw":"(error-model (condition libtmux:field-unavailable))","params":[{"name":"condition","type":"libtmux:field-unavailable"}],"label":"Primary method: libtmux:field-unavailable"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the captured model keyword implicated in a field failure. No I/O."},"source":{"file":"src/conditions.lisp","line":22,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-model"},{"id":"libtmux:error-outcome","publicId":"libtmux:error-outcome","qualifiedName":"libtmux:error-outcome","namespace":"libtmux","name":"error-outcome","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-outcome condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-outcome\",[],[\"libtmux:libtmux-error\"]]","methodKind":"function","raw":"(error-outcome (condition libtmux:libtmux-error))","params":[{"name":"condition","type":"libtmux:libtmux-error"}],"label":"Primary method: libtmux:libtmux-error"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return retained COMMAND-OUTCOME evidence, or NIL before one exists.\nInspect dispatch phase and status before deciding how to recover. No I/O."},"source":{"file":"src/conditions.lisp","line":7,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-outcome"},{"id":"libtmux:error-required-version","publicId":"libtmux:error-required-version","qualifiedName":"libtmux:error-required-version","namespace":"libtmux","name":"error-required-version","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-required-version condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned copy of the capability's minimum tmux release."},"source":{"file":"src/conditions.lisp","line":53,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-required-version"},{"id":"libtmux:error-setting","publicId":"libtmux:error-setting","qualifiedName":"libtmux:error-setting","namespace":"libtmux","name":"error-setting","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-setting condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-setting\",[],[\"libtmux:unsupported-configuration\"]]","methodKind":"function","raw":"(error-setting (condition libtmux:unsupported-configuration))","params":[{"name":"condition","type":"libtmux:unsupported-configuration"}],"label":"Primary method: libtmux:unsupported-configuration"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the daemon setting that violates a named command contract.\nThe captured diagnostic value may be shared; treat it as read-only. No I/O."},"source":{"file":"src/conditions.lisp","line":16,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-setting"},{"id":"libtmux:error-target","publicId":"libtmux:error-target","qualifiedName":"libtmux:error-target","namespace":"libtmux","name":"error-target","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(error-target condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux:error-target\",[],[\"libtmux:stale-target\"]]","methodKind":"function","raw":"(error-target (condition libtmux:stale-target))","params":[{"name":"condition","type":"libtmux:stale-target"}],"label":"Primary method: libtmux:stale-target"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the captured target associated with a dispatch refusal, or NIL. No I/O."},"source":{"file":"src/conditions.lisp","line":24,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-error-target"},{"id":"libtmux:fetch-clients","publicId":"libtmux:fetch-clients","qualifiedName":"libtmux:fetch-clients","namespace":"libtmux","name":"fetch-clients","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(fetch-clients client &rest options)","params":[{"name":"client"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire a complete snapshot and return every attached-client row. OPTIONS go to FETCH-SNAPSHOT."},"source":{"file":"src/capture.lisp","line":197,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-fetch-clients"},{"id":"libtmux:fetch-panes","publicId":"libtmux:fetch-panes","qualifiedName":"libtmux:fetch-panes","namespace":"libtmux","name":"fetch-panes","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(fetch-panes client &rest options)","params":[{"name":"client"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire a complete snapshot and return physical panes once each. OPTIONS go to FETCH-SNAPSHOT."},"source":{"file":"src/capture.lisp","line":194,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-fetch-panes"},{"id":"libtmux:fetch-sessions","publicId":"libtmux:fetch-sessions","qualifiedName":"libtmux:fetch-sessions","namespace":"libtmux","name":"fetch-sessions","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(fetch-sessions client &rest options)","params":[{"name":"client"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire a complete snapshot and return its fresh session vector. OPTIONS go to FETCH-SNAPSHOT."},"source":{"file":"src/capture.lisp","line":188,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-fetch-sessions"},{"id":"libtmux:fetch-snapshot","publicId":"libtmux:fetch-snapshot","qualifiedName":"libtmux:fetch-snapshot","namespace":"libtmux","name":"fetch-snapshot","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(fetch-snapshot client &key cancel-token (timeout (slot-value client (quote timeout))) (output-limit (slot-value client (quote output-limit))) (row-limit 100000) (entity-limit 100000) (field-limit 1048576))","params":[{"name":"client"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","default":"(slot-value client (quote timeout))","optional":true,"keywordOnly":true},{"name":"output-limit","default":"(slot-value client (quote output-limit))","optional":true,"keywordOnly":true},{"name":"row-limit","default":"100000","optional":true,"keywordOnly":true},{"name":"entity-limit","default":"100000","optional":true,"keywordOnly":true},{"name":"field-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire an eager native graph; all later accessors on it are local.\nTIMEOUT controls one acquisition deadline and OUTPUT-LIMIT caps combined output,\nincluding at most two retries after contradictory observations. Synchronous\nsetup and additional cleanup can extend caller wall time. ROW-LIMIT bounds each listing;\nENTITY-LIMIT bounds the complete graph; FIELD-LIMIT bounds encoded field bytes.\nNo daemon is started. A live daemon with zero sessions yields empty vectors;\nconnection/listing failures remain errors. Closing CLIENT leaves this snapshot\nusable. This is an interval observation, not a transactional snapshot.","body":"See also: `libtmux:error-outcome`, `libtmux:fetch-panes`, `libtmux:provenance`, `libtmux:refresh`.","seeAlso":["libtmux:error-outcome","libtmux:fetch-panes","libtmux:provenance","libtmux:refresh"]},"source":{"file":"src/capture.lisp","line":161,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-fetch-snapshot"},{"id":"libtmux:fetch-windows","publicId":"libtmux:fetch-windows","qualifiedName":"libtmux:fetch-windows","namespace":"libtmux","name":"fetch-windows","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(fetch-windows client &rest options)","params":[{"name":"client"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire a complete snapshot and return physical windows once each. OPTIONS go to FETCH-SNAPSHOT."},"source":{"file":"src/capture.lisp","line":191,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-fetch-windows"},{"id":"libtmux:field-unavailable","publicId":"libtmux:field-unavailable","qualifiedName":"libtmux:field-unavailable","namespace":"libtmux","name":"field-unavailable","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The field is unregistered for this model or its relation is unloaded."},"source":{"file":"src/conditions.lisp","line":91,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-field-unavailable"},{"id":"libtmux:field-value","publicId":"libtmux:field-value","qualifiedName":"libtmux:field-value","namespace":"libtmux","name":"field-value","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(field-value entity field)","params":[{"name":"entity"},{"name":"field"}]},{"identity":"[\"libtmux:field-value\",[],[\"libtmux:entity\",\"common-lisp:t\"]]","methodKind":"function","raw":"(field-value (entity libtmux:entity) (field common-lisp:t))","params":[{"name":"entity","type":"libtmux:entity"},{"name":"field","type":"common-lisp:t"}],"label":"Primary method: libtmux:entity, common-lisp:t"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a captured field and presence as two values, without I/O.\nPresent false is NIL,T; absence is NIL,NIL. Strings and relation containers are\ncopied. Unknown fields and unloaded relations signal FIELD-UNAVAILABLE."},"source":{"file":"src/model.lisp","line":33,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-field-value"},{"id":"libtmux:height","publicId":"libtmux:height","qualifiedName":"libtmux:height","namespace":"libtmux","name":"height","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(height entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:height\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(height (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"},{"identity":"[\"libtmux:height\",[],[\"libtmux:window/type\"]]","methodKind":"function","raw":"(height (entity libtmux:window))","params":[{"name":"entity","type":"libtmux:window"}],"label":"Primary method: libtmux:window"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the positive captured height and presence, without I/O."},"source":{"file":"src/model.lisp","line":180,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-height"},{"id":"libtmux:id","publicId":"libtmux:id","qualifiedName":"libtmux:id","namespace":"libtmux","name":"id","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(id entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:id\",[],[\"libtmux:entity\"]]","methodKind":"function","raw":"(id (entity libtmux:entity))","params":[{"name":"entity","type":"libtmux:entity"}],"label":"Primary method: libtmux:entity"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the captured identity, copying mutable components. No I/O.\nPhysical IDs are strings; a link ID is (session-ID index window-ID). Attached\nclient IDs identify rows within a single observation, not stable daemon clients."},"source":{"file":"src/model.lisp","line":41,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-id"},{"id":"libtmux:incomplete-snapshot","publicId":"libtmux:incomplete-snapshot","qualifiedName":"libtmux:incomplete-snapshot","namespace":"libtmux","name":"incomplete-snapshot","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Captured rows contradict each other or lack required references."},"source":{"file":"src/conditions.lisp","line":88,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-incomplete-snapshot"},{"id":"libtmux:index","publicId":"libtmux:index","qualifiedName":"libtmux:index","namespace":"libtmux","name":"index","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(index entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:index\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(index (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"},{"identity":"[\"libtmux:index\",[],[\"libtmux:window-link\"]]","methodKind":"function","raw":"(index (entity libtmux:window-link))","params":[{"name":"entity","type":"libtmux:window-link"}],"label":"Primary method: libtmux:window-link"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the nonnegative captured index and presence, without I/O."},"source":{"file":"src/model.lisp","line":182,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-index"},{"id":"libtmux:invalid-argument","publicId":"libtmux:invalid-argument","qualifiedName":"libtmux:invalid-argument","namespace":"libtmux","name":"invalid-argument","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"An argument violates the operation's declared contract."},"source":{"file":"src/conditions.lisp","line":37,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-invalid-argument"},{"id":"libtmux:join-pane","publicId":"libtmux:join-pane","qualifiedName":"libtmux:join-pane","namespace":"libtmux","name":"join-pane","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(join-pane client source destination &key (direction :vertical) size percent before full-size (detached t) (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"source"},{"name":"destination"},{"name":"direction","default":":vertical","optional":true,"keywordOnly":true},{"name":"size","optional":true,"keywordOnly":true},{"name":"percent","optional":true,"keywordOnly":true},{"name":"before","optional":true,"keywordOnly":true},{"name":"full-size","optional":true,"keywordOnly":true},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Join SOURCE pane beside DESTINATION using tmux's join-pane command.\nArguments, outcomes, emptied-window effects and observation semantics match\nMOVE-PANE. Both targets are captured physical panes. Signals STALE-TARGET or an\noperational condition; a failed follow-up is distinct from mutation failure."},"source":{"file":"src/placement.lisp","line":113,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-join-pane"},{"id":"libtmux:kill-pane","publicId":"libtmux:kill-pane","qualifiedName":"libtmux:kill-pane","namespace":"libtmux","name":"kill-pane","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(kill-pane client pane &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Delete exactly the captured physical PANE and return a COMMAND-OUTCOME.\nThe live pane identity is checked before dispatch. Other panes are preserved.\nSignals STALE-TARGET when PANE disappeared or belongs to another generation.\nNever retries the mutation.","body":"See also: `libtmux:kill-server`, `libtmux:kill-session`, `libtmux:kill-window`.","seeAlso":["libtmux:kill-server","libtmux:kill-session","libtmux:kill-window"]},"source":{"file":"src/termination.lisp","line":119,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-kill-pane"},{"id":"libtmux:kill-server","publicId":"libtmux:kill-server","qualifiedName":"libtmux:kill-server","namespace":"libtmux","name":"kill-server","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(kill-server client &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Terminate CLIENT's preflight-accepted daemon and return a COMMAND-OUTCOME.\nSuccess requires both a pre-dispatch receipt and observed exit of the server\nprocess accepted during this call. Missing evidence signals OUTCOME-UNKNOWN;\ncancellation or a deadline never causes an automatic retry. The connection\nCLIENT stays open but its generation is invalidated after observed server death.\nA failed exit wait retains :SERVER-EXIT-UNOBSERVED and the underlying\nERROR-CAUSE. CLOSE-CLIENT never calls this function.","body":"See also: `libtmux:close-client`, `libtmux:kill-session`, `libtmux:outcome-phase`, `libtmux:outcome-status`.","seeAlso":["libtmux:close-client","libtmux:kill-session","libtmux:outcome-phase","libtmux:outcome-status"]},"source":{"file":"src/termination.lisp","line":150,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-kill-server"},{"id":"libtmux:kill-session","publicId":"libtmux:kill-session","qualifiedName":"libtmux:kill-session","namespace":"libtmux","name":"kill-session","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(kill-session client session &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Delete exactly the captured SESSION and return a COMMAND-OUTCOME.\nTmux removes that session's links and panes no longer referenced elsewhere.\nThe live identity is checked before dispatch; the mutation is never retried.","body":"See also: `libtmux:kill-pane`, `libtmux:kill-server`, `libtmux:kill-window`.","seeAlso":["libtmux:kill-pane","libtmux:kill-server","libtmux:kill-window"]},"source":{"file":"src/termination.lisp","line":140,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-kill-session"},{"id":"libtmux:kill-window","publicId":"libtmux:kill-window","qualifiedName":"libtmux:kill-window","namespace":"libtmux","name":"kill-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(kill-window client window &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Delete exactly the captured physical WINDOW and return a COMMAND-OUTCOME.\nEvery link to that physical window is removed by tmux. Other windows remain.\nThe live identity is checked before dispatch; the mutation is never retried.","body":"See also: `libtmux:kill-pane`, `libtmux:kill-server`, `libtmux:kill-session`.","seeAlso":["libtmux:kill-pane","libtmux:kill-server","libtmux:kill-session"]},"source":{"file":"src/termination.lisp","line":130,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-kill-window"},{"id":"libtmux:last-pane","publicId":"libtmux:last-pane","qualifiedName":"libtmux:last-pane","namespace":"libtmux","name":"last-pane","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(last-pane client window &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select WINDOW's last active pane; return an outcome with that observed pane.\nOBSERVE may omit follow-up acquisition. Tmux reports an error when no last\npane exists. Signals STALE-TARGET or an operational condition. Earlier\ncaptures retain their original selection."},"source":{"file":"src/selection.lisp","line":47,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-last-pane"},{"id":"libtmux:last-window","publicId":"libtmux:last-window","qualifiedName":"libtmux:last-window","namespace":"libtmux","name":"last-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(last-window client session &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select SESSION's last active link; return an outcome with that observed link.\nOBSERVE may omit follow-up acquisition. Tmux reports an error when no last\nwindow exists. Signals STALE-TARGET or an operational condition. Earlier\ncaptures retain their original selection."},"source":{"file":"src/selection.lisp","line":38,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-last-window"},{"id":"libtmux:libtmux-error","publicId":"libtmux:libtmux-error","qualifiedName":"libtmux:libtmux-error","namespace":"libtmux","name":"libtmux-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A library failure with a message, original cause and outcome."},"source":{"file":"src/conditions.lisp","line":27,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:error"],"slug":"libtmux-libtmux-error"},{"id":"libtmux:link-window","publicId":"libtmux:link-window","qualifiedName":"libtmux:link-window","namespace":"libtmux","name":"link-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(link-window client source-link session index &key (detached t) (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"source-link"},{"name":"session"},{"name":"index"},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Link SOURCE-LINK's physical window into SESSION at the free INDEX.\nReturn a COMMAND-OUTCOME with the new window link when OBSERVE is true.\nSOURCE-LINK preserves the source session context, including tmux group rules.\nDETACHED defaults true. Never overwrites an occupied index. Signals STALE-TARGET\nor an operational condition; observation failure is retained separately."},"source":{"file":"src/placement.lisp","line":42,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-link-window"},{"id":"libtmux:list-buffers","publicId":"libtmux:list-buffers","qualifiedName":"libtmux:list-buffers","namespace":"libtmux","name":"list-buffers","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(list-buffers client &key (row-limit 10000) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"row-limit","default":"10000","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire buffer metadata; return a fresh simple vector of owned plists and an outcome.\nEach plist has :BUFFER/NAME, :BUFFER/SIZE (bytes) and :BUFFER/CREATED (Unix\nseconds). Preserve tmux's listing order; buffer names are mutable locators,\nnot captured entity identities. Empty listing returns #(). ROW-LIMIT bounds\ndecoding. Signals an operational or decoding condition with the raw outcome."},"source":{"file":"src/buffers.lisp","line":44,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-list-buffers"},{"id":"libtmux:list-commands","publicId":"libtmux:list-commands","qualifiedName":"libtmux:list-commands","namespace":"libtmux","name":"list-commands","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(list-commands client &key command format cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"command","optional":true,"keywordOnly":true},{"name":"format","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Inspect built-in tmux commands; return owned UTF-8 printer text and an outcome.\nOmit COMMAND to list all built-ins. COMMAND is an exact name or built-in alias\nthrough tmux 3.5a; unknown selectors produce no rows. From 3.6, unique prefixes\nare accepted and unknown/ambiguous selectors fail. Configured command-alias\nentries are not listed or expanded by this selector.","body":"FORMAT is explicit tmux format source, without time expansion. #() can start\nasynchronous jobs owned by this command client; results may be incomplete and\ndisconnect cleans up those jobs. Omission uses tmux's human-readable format.\nPreserve native escaping, whitespace and after-hook output; this is not a\ndecoded registry.\nBlocks under shared preflight/dispatch limits, never retries and starts no\ndaemon. Failures retain their outcome; invalid UTF-8 signals DECODING-ERROR.\n\nSee also: `libtmux:display-message`, `libtmux:error-outcome`, `libtmux:list-keys`, `libtmux:outcome-stdout`.","seeAlso":["libtmux:display-message","libtmux:error-outcome","libtmux:list-keys","libtmux:outcome-stdout"]},"source":{"file":"src/key-bindings.lisp","line":19,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-list-commands"},{"id":"libtmux:list-keys","publicId":"libtmux:list-keys","qualifiedName":"libtmux:list-keys","namespace":"libtmux","name":"list-keys","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(list-keys client &key table key format cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"table","optional":true,"keywordOnly":true},{"name":"key","optional":true,"keywordOnly":true},{"name":"format","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Inspect key bindings; return owned UTF-8 printer text and a command outcome.\nOmit TABLE to list every key table. TABLE and KEY are literal strings; native\nunknown-table and invalid-key failures remain errors. An unbound valid KEY is\nan error except on tmux 3.7 through 3.7c, which return empty text. Those releases\nalso send a single matching row to the server message log and any selected\nfrontend's status line instead of stdout. Empty text does not prove absence.\nFORMAT is explicit tmux format source\nand requires live tmux 3.7 or newer; older daemons signal UNSUPPORTED-CAPABILITY\nbefore payload dispatch. Omission uses the native human-readable listing.","body":"FORMAT has no time expansion. #() can start asynchronous command-client jobs,\nwhose output may be incomplete and whose cleanup follows client disconnect.\nEmpty expanded lines may be omitted. Native escaping, whitespace and after-hook\noutput are preserved; the text is not a parsed or replayable configuration.\nBlocks under shared preflight/dispatch limits and never retries. Invalid UTF-8 signals\nDECODING-ERROR; operational failures retain their outcome.\n\nSee also: `libtmux:bind-key`, `libtmux:error-outcome`, `libtmux:list-commands`, `libtmux:unbind-key`.","seeAlso":["libtmux:bind-key","libtmux:error-outcome","libtmux:list-commands","libtmux:unbind-key"]},"source":{"file":"src/key-bindings.lisp","line":41,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-list-keys"},{"id":"libtmux:list-server-access","publicId":"libtmux:list-server-access","qualifiedName":"libtmux:list-server-access","namespace":"libtmux","name":"list-server-access","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(list-server-access client &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Print the daemon ACL; return owned UTF-8 text and a COMMAND-OUTCOME.\nThe ordinary native listing preserves escaping and whitespace. Before 3.8,\nrows use (R)/(W); from 3.8 they include U/G account kinds. UID 0 is omitted and\nunresolvable names print as unknown. An empty listing does not prove that no\naccount has access. This is printer output, not a decoded authorization model.\nBlocks under shared preflight/dispatch limits and never retries or acquires an\nobservation. Invalid UTF-8 signals DECODING-ERROR; native and operational\nfailures retain their outcomes.","body":"See also: `libtmux:error-outcome`, `libtmux:outcome-stdout`, `libtmux:server-access`.","seeAlso":["libtmux:error-outcome","libtmux:outcome-stdout","libtmux:server-access"]},"source":{"file":"src/server-operations.lisp","line":38,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-list-server-access"},{"id":"libtmux:load-buffer","publicId":"libtmux:load-buffer","qualifiedName":"libtmux:load-buffer","namespace":"libtmux","name":"load-buffer","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(load-buffer client path &key name cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"path"},{"name":"name","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Load a file's bytes into a literal named or automatic buffer; return an outcome.\nPATH is literal path text, not a format. Relative paths follow the tmux command\nclient's cwd. An empty file is tmux's no-op and preserves an existing buffer.\nNew names reject backslashes, ASCII controls and DEL before I/O.\nUse SET-BUFFER for in-memory bytes. Signals INVALID-ARGUMENT or an operational\ncondition; a failure after dispatch may have an uncertain outcome."},"source":{"file":"src/buffers.lisp","line":99,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-load-buffer"},{"id":"libtmux:lock-client","publicId":"libtmux:lock-client","qualifiedName":"libtmux:lock-client","namespace":"libtmux","name":"lock-client","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(lock-client client target &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"target"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request locking of captured terminal TARGET; return a COMMAND-OUTCOME.\nThe frontend runs the session's configured lock-command through its shell.\nSuccess acknowledges the request, not lock startup, completion or authentication.\nAn already suspended frontend or an empty/oversized lock command can be a no-op.\nCLIENT must own TARGET.\nBlocks under shared preflight/dispatch limits; returns no replacement. Stale or\nforeign targets signal STALE-TARGET; other failures retain their outcome.\nPreflight cannot exclude client replacement before dispatch. Never retries.","body":"See also: `libtmux:fetch-clients`, `libtmux:lock-server`, `libtmux:lock-session`, `libtmux:outcome-status`, `libtmux:set-option`, `libtmux:suspend-client`.","seeAlso":["libtmux:fetch-clients","libtmux:lock-server","libtmux:lock-session","libtmux:outcome-status","libtmux:set-option","libtmux:suspend-client"]},"source":{"file":"src/client-operations.lisp","line":105,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-lock-client"},{"id":"libtmux:lock-server","publicId":"libtmux:lock-server","qualifiedName":"libtmux:lock-server","namespace":"libtmux","name":"lock-server","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(lock-server client &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request locking of all attached frontends on CLIENT's daemon.\nReturn a COMMAND-OUTCOME after guarded dispatch. Live frontend membership\ndetermines the recipients; this is wider than one captured session. Each\nfrontend runs its configured lock-command. Control clients, suspended\nfrontends and empty/oversized commands are skipped. Success acknowledges\nthe request, not startup, completion or authentication. Blocks under shared\npreflight/dispatch limits and returns no replacement. Failures retain their\noutcome. Lock programs belong to the frontends; closing CLIENT leaves them\nrunning. Never retries.","body":"See also: `libtmux:error-outcome`, `libtmux:lock-client`, `libtmux:lock-session`, `libtmux:outcome-status`, `libtmux:set-option`.","seeAlso":["libtmux:error-outcome","libtmux:lock-client","libtmux:lock-session","libtmux:outcome-status","libtmux:set-option"]},"source":{"file":"src/server-operations.lisp","line":114,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-lock-server"},{"id":"libtmux:lock-session","publicId":"libtmux:lock-session","qualifiedName":"libtmux:lock-session","namespace":"libtmux","name":"lock-session","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(lock-session client session &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request locking of SESSION's attached frontends; return a COMMAND-OUTCOME.\nCLIENT must own the captured SESSION. The live session membership determines\nwhich frontends receive the request. Each runs its configured lock-command;\ncontrol clients, suspended frontends and empty/oversized commands are skipped.\nSuccess acknowledges the request, not startup, completion or authentication.\nBlocks under shared preflight/dispatch limits and returns no replacement.\nForeign or vanished sessions signal STALE-TARGET; other failures retain their\noutcome. Lock programs belong to the frontends; closing CLIENT leaves them\nrunning. Never retries.","body":"See also: `libtmux:error-outcome`, `libtmux:lock-client`, `libtmux:lock-server`, `libtmux:outcome-status`, `libtmux:set-option`.","seeAlso":["libtmux:error-outcome","libtmux:lock-client","libtmux:lock-server","libtmux:outcome-status","libtmux:set-option"]},"source":{"file":"src/server-operations.lisp","line":98,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-lock-session"},{"id":"libtmux:make-cancellation-token","publicId":"libtmux:make-cancellation-token","qualifiedName":"libtmux:make-cancellation-token","namespace":"libtmux","name":"make-cancellation-token","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(make-cancellation-token)","params":[]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Create a token for one or more operations. CANCEL is idempotent.\nSignals UNSUPPORTED-PLATFORM outside the qualified runtime profile.","body":"See also: `libtmux:cancel`, `libtmux:cancelled-p`, `libtmux:open-client`.","seeAlso":["libtmux:cancel","libtmux:cancelled-p","libtmux:open-client"]},"source":{"file":"src/transport.lisp","line":74,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-make-cancellation-token"},{"id":"libtmux:move-pane","publicId":"libtmux:move-pane","qualifiedName":"libtmux:move-pane","namespace":"libtmux","name":"move-pane","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(move-pane client source destination &key (direction :vertical) size percent before full-size (detached t) (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"source"},{"name":"destination"},{"name":"direction","default":":vertical","optional":true,"keywordOnly":true},{"name":"size","optional":true,"keywordOnly":true},{"name":"percent","optional":true,"keywordOnly":true},{"name":"before","optional":true,"keywordOnly":true},{"name":"full-size","optional":true,"keywordOnly":true},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Move SOURCE pane beside DESTINATION; return an outcome with the moved pane.\nDIRECTION is :HORIZONTAL or :VERTICAL. SIZE is cells; PERCENT is 1..100,\nmutually exclusive with SIZE. BEFORE changes placement and FULL-SIZE spans the\nwindow. Percent sizing retains tmux's version semantics: with FULL-SIZE, 3.3a\nuses destination-pane dimensions and 3.8 uses whole-window dimensions. Use SIZE\nfor cell-based control. DETACHED defaults true.\nAn emptied source window is destroyed, including all its links. With DETACHED\nfalse, tmux chooses the session context of the physical destination. OBSERVE\nsupplies a replacement source pane; its old observation retains its old window.\nSignals STALE-TARGET or an operational condition."},"source":{"file":"src/placement.lisp","line":97,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-move-pane"},{"id":"libtmux:move-window","publicId":"libtmux:move-window","qualifiedName":"libtmux:move-window","namespace":"libtmux","name":"move-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(move-window client source-link session index &key (detached t) (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"source-link"},{"name":"session"},{"name":"index"},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Move SOURCE-LINK into SESSION at the free INDEX; return a COMMAND-OUTCOME.\nOther links to the physical window survive. Removing a session's last link can\ndestroy that session, following tmux semantics. OBSERVE supplies the destination\nlink. DETACHED defaults true; occupied indexes are never overwritten. Signals\nSTALE-TARGET or an operational condition; older link observations stay unchanged."},"source":{"file":"src/placement.lisp","line":53,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-move-window"},{"id":"libtmux:name","publicId":"libtmux:name","qualifiedName":"libtmux:name","namespace":"libtmux","name":"name","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(name entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:name\",[],[\"libtmux:attached-client\"]]","methodKind":"function","raw":"(name (entity libtmux:attached-client))","params":[{"name":"entity","type":"libtmux:attached-client"}],"label":"Primary method: libtmux:attached-client"},{"identity":"[\"libtmux:name\",[],[\"libtmux:session/type\"]]","methodKind":"function","raw":"(name (entity libtmux:session))","params":[{"name":"entity","type":"libtmux:session"}],"label":"Primary method: libtmux:session"},{"identity":"[\"libtmux:name\",[],[\"libtmux:window/type\"]]","methodKind":"function","raw":"(name (entity libtmux:window))","params":[{"name":"entity","type":"libtmux:window"}],"label":"Primary method: libtmux:window"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the captured name and presence, without I/O; text is copied."},"source":{"file":"src/model.lisp","line":173,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-name"},{"id":"libtmux:new-session","publicId":"libtmux:new-session","qualifiedName":"libtmux:new-session","namespace":"libtmux","name":"new-session","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(new-session client &key name window-name width height cwd environment (command nil command-p) (shell-command nil shell-command-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name","optional":true,"keywordOnly":true},{"name":"window-name","optional":true,"keywordOnly":true},{"name":"width","optional":true,"keywordOnly":true},{"name":"height","optional":true,"keywordOnly":true},{"name":"cwd","optional":true,"keywordOnly":true},{"name":"environment","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"shell-command","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Create a detached session on the selected live daemon; return a COMMAND-OUTCOME.\nNAME, WINDOW-NAME and CWD are literal. WIDTH/HEIGHT are positive initial cell\ndimensions through 65535. ENVIRONMENT, COMMAND and SHELL-COMMAND follow\nNEW-WINDOW. OUTCOME-VALUE supplies the created session; acquisition failure is\nretained separately. This operation requires an existing daemon and never\nsilently starts or replaces one.","body":"See also: `libtmux:new-window`, `libtmux:start-daemon`, `libtmux:with-daemon`.","seeAlso":["libtmux:new-window","libtmux:start-daemon","libtmux:with-daemon"]},"source":{"file":"src/creation.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-new-session"},{"id":"libtmux:new-window","publicId":"libtmux:new-window","qualifiedName":"libtmux:new-window","namespace":"libtmux","name":"new-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(new-window client session &key name index cwd environment (command nil command-p) (shell-command nil shell-command-p) (detached t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"name","optional":true,"keywordOnly":true},{"name":"index","optional":true,"keywordOnly":true},{"name":"cwd","optional":true,"keywordOnly":true},{"name":"environment","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"shell-command","default":"nil","optional":true,"keywordOnly":true},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Create a physical window in captured SESSION and return a COMMAND-OUTCOME.\nNAME and CWD are literal strings. INDEX chooses a free link index; omission uses\ntmux's next available index. DETACHED defaults true. ENVIRONMENT is a list/vector\nof (name . value) string pairs. COMMAND is nonempty argv; SHELL-COMMAND is a\nseparate, mutually exclusive shell string. Omit both for tmux's default shell.\nOUTCOME-VALUE supplies the resulting window; observation failure is separate.\nNever replaces an occupied index or retries a mutation. Limits cover all I/O."},"source":{"file":"src/creation.lisp","line":23,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-new-window"},{"id":"libtmux:next-layout","publicId":"libtmux:next-layout","qualifiedName":"libtmux:next-layout","namespace":"libtmux","name":"next-layout","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(next-layout client window &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Cycle WINDOW to tmux's next layout; return an outcome and optional replacement.\nUnzooms the window. Captured values remain unchanged. Signals STALE-TARGET or\nan operational condition; follow-up acquisition failure is retained separately."},"source":{"file":"src/geometry.lisp","line":94,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-next-layout"},{"id":"libtmux:next-window","publicId":"libtmux:next-window","qualifiedName":"libtmux:next-window","namespace":"libtmux","name":"next-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(next-window client session &key activity (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"activity","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select SESSION's next window link; return a COMMAND-OUTCOME.\nACTIVITY restricts selection to windows with an alert. OBSERVE supplies the\nnewly captured active link through OUTCOME-VALUE, or records an observation\nfailure separately. Signals STALE-TARGET or an operational condition."},"source":{"file":"src/selection.lisp","line":20,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-next-window"},{"id":"libtmux:open-client","publicId":"libtmux:open-client","qualifiedName":"libtmux:open-client","namespace":"libtmux","name":"open-client","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(open-client &key (program \"tmux\") socket-name socket-path config-file (timeout 30) (output-limit (* 16 1024 1024)))","params":[{"name":"program","default":"\"tmux\"","optional":true,"keywordOnly":true},{"name":"socket-name","optional":true,"keywordOnly":true},{"name":"socket-path","optional":true,"keywordOnly":true},{"name":"config-file","optional":true,"keywordOnly":true},{"name":"timeout","default":"30","optional":true,"keywordOnly":true},{"name":"output-limit","default":"(* 16 1024 1024)","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Open an SBCL/Linux subprocess client and check its tmux version.\nChecks the runtime profile and required OS facilities before resolving PROGRAM.\nAn unsupported profile or facility signals UNSUPPORTED-PLATFORM; ERROR-FEATURE\nidentifies the requirement. PROGRAM must resolve to a native x86_64 ELF tmux\nexecutable; pass the underlying binary when PATH selects a script or shim.\nSOCKET-NAME and SOCKET-PATH are mutually exclusive; omission selects tmux's\ndefault socket. No daemon is started. TIMEOUT is seconds; OUTPUT-LIMIT bounds\ncombined stdout/stderr bytes per command. Signals an operational condition on\nversion/launch failure. Returned configuration strings are owned by the client.","body":"See also: `libtmux:close-client`, `libtmux:error-feature`, `libtmux:unsupported-platform`, `libtmux:with-client`.","seeAlso":["libtmux:close-client","libtmux:error-feature","libtmux:unsupported-platform","libtmux:with-client"]},"source":{"file":"src/client.lisp","line":361,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-open-client"},{"id":"libtmux:outcome-arguments","publicId":"libtmux:outcome-arguments","qualifiedName":"libtmux:outcome-arguments","namespace":"libtmux","name":"outcome-arguments","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-arguments outcome)","params":[{"name":"outcome"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return an owned vector of the effective argv strings. No external I/O."},"source":{"file":"src/transport.lisp","line":46,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-outcome-arguments"},{"id":"libtmux:outcome-cleanup-failures","publicId":"libtmux:outcome-cleanup-failures","qualifiedName":"libtmux:outcome-cleanup-failures","namespace":"libtmux","name":"outcome-cleanup-failures","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-cleanup-failures outcome)","params":[{"name":"outcome"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of conditions encountered while releasing the process."},"source":{"file":"src/transport.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-outcome-cleanup-failures"},{"id":"libtmux:outcome-elapsed","publicId":"libtmux:outcome-elapsed","qualifiedName":"libtmux:outcome-elapsed","namespace":"libtmux","name":"outcome-elapsed","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-elapsed outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-elapsed\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-elapsed (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return elapsed monotonic seconds for this retained result. No I/O.\nRaw RUN-COMMAND measures its subprocess operation. Named operations include\npreflight, dispatch and follow-up acquisition in their retained outcome timing."},"source":{"file":"src/transport.lisp","line":19,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-outcome-elapsed"},{"id":"libtmux:outcome-exit-code","publicId":"libtmux:outcome-exit-code","qualifiedName":"libtmux:outcome-exit-code","namespace":"libtmux","name":"outcome-exit-code","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-exit-code outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-exit-code\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-exit-code (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the subprocess's integer exit status, or NIL if unknown. No I/O."},"source":{"file":"src/transport.lisp","line":14,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-outcome-exit-code"},{"id":"libtmux:outcome-observation-error","publicId":"libtmux:outcome-observation-error","qualifiedName":"libtmux:outcome-observation-error","namespace":"libtmux","name":"outcome-observation-error","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-observation-error outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-observation-error\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-observation-error (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the condition from follow-up acquisition, or NIL. No I/O.\nA successful mutation remains :SUCCEEDED when its replacement observation\nfails. Do not repeat the mutation merely to obtain a replacement observation."},"source":{"file":"src/transport.lisp","line":23,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-outcome-observation-error"},{"id":"libtmux:outcome-phase","publicId":"libtmux:outcome-phase","qualifiedName":"libtmux:outcome-phase","namespace":"libtmux","name":"outcome-phase","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-phase outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-phase\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-phase (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return retained dispatch evidence, without I/O.\nRaw process phases are :PREPARED, :LAUNCHING, :DISPATCHED and :EXITED. Named\noperations may also report :PREFLIGHT or :GUARD-REJECTED before payload dispatch.\nExplicit server termination reports :SERVER-TERMINATED only after retained\npidfd readiness proves exit. Phase is separate from OUTCOME-STATUS; an exited\nqueue can have partially completed effects even when it reported failure."},"source":{"file":"src/transport.lisp","line":7,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-outcome-phase"},{"id":"libtmux:outcome-reason","publicId":"libtmux:outcome-reason","qualifiedName":"libtmux:outcome-reason","namespace":"libtmux","name":"outcome-reason","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-reason outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-reason\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-reason (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the retained failure reason keyword, or NIL. No I/O.\nExamples include :DEADLINE and :CANCELLED; inspect the condition and phase too."},"source":{"file":"src/transport.lisp","line":16,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-outcome-reason"},{"id":"libtmux:outcome-status","publicId":"libtmux:outcome-status","qualifiedName":"libtmux:outcome-status","namespace":"libtmux","name":"outcome-status","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-status outcome)","params":[{"name":"outcome"}]},{"identity":"[\"libtmux:outcome-status\",[],[\"libtmux:command-outcome\"]]","methodKind":"function","raw":"(outcome-status (command-outcome libtmux:command-outcome))","params":[{"name":"command-outcome","type":"libtmux:command-outcome"}],"label":"Primary method: libtmux:command-outcome"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return :SUCCEEDED, :FAILED, :UNKNOWN or :NOT-DISPATCHED. No I/O.\nThese describe retained evidence, not rollback. Observation failure is separate\nfrom mutation success; inspect OUTCOME-OBSERVATION-ERROR and OUTCOME-VALUE."},"source":{"file":"src/transport.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-outcome-status"},{"id":"libtmux:outcome-stderr","publicId":"libtmux:outcome-stderr","qualifiedName":"libtmux:outcome-stderr","namespace":"libtmux","name":"outcome-stderr","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-stderr outcome)","params":[{"name":"outcome"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh octet vector containing retained diagnostic output."},"source":{"file":"src/transport.lisp","line":54,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-outcome-stderr"},{"id":"libtmux:outcome-stdout","publicId":"libtmux:outcome-stdout","qualifiedName":"libtmux:outcome-stdout","namespace":"libtmux","name":"outcome-stdout","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-stdout outcome)","params":[{"name":"outcome"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh octet vector containing retained standard output."},"source":{"file":"src/transport.lisp","line":50,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-outcome-stdout"},{"id":"libtmux:outcome-unknown","publicId":"libtmux:outcome-unknown","qualifiedName":"libtmux:outcome-unknown","namespace":"libtmux","name":"outcome-unknown","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A dispatched operation did not establish its final outcome."},"source":{"file":"src/conditions.lisp","line":77,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:command-failed"],"slug":"libtmux-outcome-unknown"},{"id":"libtmux:outcome-value","publicId":"libtmux:outcome-value","qualifiedName":"libtmux:outcome-value","namespace":"libtmux","name":"outcome-value","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(outcome-value outcome)","params":[{"name":"outcome"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the resulting value and presence as two values, without I/O.\nCopy data containers and strings; captured entity observations may be shared."},"source":{"file":"src/transport.lisp","line":58,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-outcome-value"},{"id":"libtmux:output-limit-exceeded","publicId":"libtmux:output-limit-exceeded","qualifiedName":"libtmux:output-limit-exceeded","namespace":"libtmux","name":"output-limit-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Combined stdout/stderr exceeded the configured byte limit."},"source":{"file":"src/conditions.lisp","line":83,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:outcome-unknown"],"slug":"libtmux-output-limit-exceeded"},{"id":"libtmux:pane","publicId":"libtmux:pane","qualifiedName":"libtmux:pane","namespace":"libtmux","name":"pane","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A physical pane belonging to one captured window."},"source":{"file":"src/model.lisp","line":27,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:entity"],"slug":"libtmux-pane"},{"id":"libtmux:panes","publicId":"libtmux:panes","qualifiedName":"libtmux:panes","namespace":"libtmux","name":"panes","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(panes observation)","params":[{"name":"observation"}]},{"identity":"[\"libtmux:panes\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(panes (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"},{"identity":"[\"libtmux:panes\",[],[\"libtmux:window/type\"]]","methodKind":"function","raw":"(panes (window libtmux:window))","params":[{"name":"window","type":"libtmux:window"}],"label":"Primary method: libtmux:window"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of captured physical panes, without I/O.\nSnapshots preserve first occurrence; windows preserve the captured pane order."},"source":{"file":"src/model.lisp","line":53,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-panes"},{"id":"libtmux:paste-buffer","publicId":"libtmux:paste-buffer","qualifiedName":"libtmux:paste-buffer","namespace":"libtmux","name":"paste-buffer","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(paste-buffer client pane &key name separator raw bracketed verbatim delete cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"name","optional":true,"keywordOnly":true},{"name":"separator","optional":true,"keywordOnly":true},{"name":"raw","optional":true,"keywordOnly":true},{"name":"bracketed","optional":true,"keywordOnly":true},{"name":"verbatim","optional":true,"keywordOnly":true},{"name":"delete","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Paste a named or top buffer into PANE; return a COMMAND-OUTCOME.\nNewlines become Return by default. RAW preserves newlines; SEPARATOR explicitly\nreplaces each newline with literal text and is mutually exclusive with RAW.\nVERBATIM preserves every byte, implies RAW and disables tmux's newer control-byte\nsanitization; it cannot be combined with a separator or bracket markers.\nBRACKETED uses bracketed paste when the pane enabled it. DELETE removes the\nselected buffer afterward. Tmux may accept without sending when input is\ndisabled; success does not prove application consumption. Signals STALE-TARGET\nor an operational condition."},"source":{"file":"src/buffers.lisp","line":123,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-paste-buffer"},{"id":"libtmux:pending-daemon-cleanups","publicId":"libtmux:pending-daemon-cleanups","qualifiedName":"libtmux:pending-daemon-cleanups","namespace":"libtmux","name":"pending-daemon-cleanups","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(pending-daemon-cleanups)","params":[]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of owners with incomplete cleanup, without daemon I/O.\nThe library retains them even when startup leaves through a nonlocal exit.\nSuccessful STOP-DAEMON removes an owner from this collection.","body":"See also: `libtmux:error-daemon`, `libtmux:stop-daemon`.","seeAlso":["libtmux:error-daemon","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":109,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-pending-daemon-cleanups"},{"id":"libtmux:pipe-pane","publicId":"libtmux:pipe-pane","qualifiedName":"libtmux:pipe-pane","namespace":"libtmux","name":"pipe-pane","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(pipe-pane client pane &key shell-command format-p (direction :output) toggle cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"shell-command","optional":true,"keywordOnly":true},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"direction","default":":output","optional":true,"keywordOnly":true},{"name":"toggle","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Configure PANE's tmux-owned pipe and return a COMMAND-OUTCOME.\nSHELL-COMMAND is shell source, literal to tmux by default; FORMAT-P explicitly\nenables tmux format and time expansion before shell execution. DIRECTION is\n:OUTPUT (pane to shell), :INPUT (shell to pane), or :BOTH. Omit SHELL-COMMAND,\nor pass an empty string, to close the pipe. TOGGLE closes an existing pipe\nwithout starting its replacement. Replacing a pipe closes the previous one.\nCompletion acknowledges configuration, not shell startup, success or output\nconsumption. The daemon owns the pipe child; closing CLIENT leaves it running.\nLiteral commands exceeding tmux's time-format capacity fail before I/O.\nSignals STALE-TARGET or an operational condition; never retries configuration."},"source":{"file":"src/process-operations.lisp","line":41,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-pipe-pane"},{"id":"libtmux:previous-layout","publicId":"libtmux:previous-layout","qualifiedName":"libtmux:previous-layout","namespace":"libtmux","name":"previous-layout","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(previous-layout client window &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Cycle WINDOW to tmux's previous layout; return an outcome and optional replacement.\nUnzooms the window. Captured values remain unchanged. Signals STALE-TARGET or\nan operational condition; follow-up acquisition failure is retained separately."},"source":{"file":"src/geometry.lisp","line":102,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-previous-layout"},{"id":"libtmux:previous-window","publicId":"libtmux:previous-window","qualifiedName":"libtmux:previous-window","namespace":"libtmux","name":"previous-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(previous-window client session &key activity (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"activity","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select SESSION's previous window link; return a COMMAND-OUTCOME.\nACTIVITY restricts selection to windows with an alert. OBSERVE supplies the\nnewly captured active link through OUTCOME-VALUE, or records an observation\nfailure separately. Signals STALE-TARGET or an operational condition."},"source":{"file":"src/selection.lisp","line":29,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-previous-window"},{"id":"libtmux:provenance","publicId":"libtmux:provenance","qualifiedName":"libtmux:provenance","namespace":"libtmux","name":"provenance","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(provenance observation)","params":[{"name":"observation"}]},{"identity":"[\"libtmux:provenance\",[],[\"libtmux:entity\"]]","methodKind":"function","raw":"(provenance (entity libtmux:entity))","params":[{"name":"entity","type":"libtmux:entity"}],"label":"Primary method: libtmux:entity"},{"identity":"[\"libtmux:provenance\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(provenance (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return fresh captured provenance and acquisition bounds, without I/O."},"source":{"file":"src/model.lisp","line":45,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-provenance"},{"id":"libtmux:refresh","publicId":"libtmux:refresh","qualifiedName":"libtmux:refresh","namespace":"libtmux","name":"refresh","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(refresh client observation &rest options)","params":[{"name":"client"},{"name":"observation"},{"name":"options","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire a replacement observation, leaving the earlier capture unchanged.\nCLIENT must own the original context/generation. Missing or replaced targets\nsignal STALE-TARGET. Attached-client refresh requires one unique live target\nname with the same PID/creation/tty fingerprint; its observation identity changes."},"source":{"file":"src/capture.lisp","line":201,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-refresh"},{"id":"libtmux:refresh-client","publicId":"libtmux:refresh-client","qualifiedName":"libtmux:refresh-client","namespace":"libtmux","name":"refresh-client","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(refresh-client client target &key status-only cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"target"},{"name":"status-only","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request a redraw of captured terminal TARGET; return a COMMAND-OUTCOME.\nSTATUS-ONLY requests only the status line; NIL requests the whole display.\nSuccess acknowledges scheduling, not completed terminal rendering. This is an\nexternal operation; REFRESH instead acquires a replacement observation.\nCLIENT must own TARGET. Blocks under shared preflight/dispatch limits. A stale\nor foreign target signals STALE-TARGET; other failures retain their outcome.\nThe client fingerprint is checked before dispatch, with a remaining replacement\nrace. Returns no replacement and never retries the request.","body":"See also: `libtmux:fetch-clients`, `libtmux:outcome-status`, `libtmux:refresh`.","seeAlso":["libtmux:fetch-clients","libtmux:outcome-status","libtmux:refresh"]},"source":{"file":"src/client-operations.lisp","line":78,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-refresh-client"},{"id":"libtmux:remove-environment","publicId":"libtmux:remove-environment","qualifiedName":"libtmux:remove-environment","namespace":"libtmux","name":"remove-environment","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(remove-environment client name &key scope target cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Store tmux's removal marker for NAME and return its COMMAND-OUTCOME.\nSCOPE/TARGET follow SET-ENVIRONMENT. A removal marker is distinct from absence\nand from a present empty string. UNSET-ENVIRONMENT deletes the entry instead.\nNever retries the mutation.","body":"See also: `libtmux:set-environment`, `libtmux:unset-environment`.","seeAlso":["libtmux:set-environment","libtmux:unset-environment"]},"source":{"file":"src/configuration-operations.lisp","line":253,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-remove-environment"},{"id":"libtmux:rename-session","publicId":"libtmux:rename-session","qualifiedName":"libtmux:rename-session","namespace":"libtmux","name":"rename-session","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(rename-session client session text &key format-p (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"session"},{"name":"text"},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Rename SESSION with literal TEXT, or an explicit FORMAT-P expression.\nReturn a COMMAND-OUTCOME. OBSERVE defaults true and supplies a replacement\nthrough OUTCOME-VALUE; observation failure is retained separately. Tmux enforces\nsession-name restrictions and uniqueness. Signals STALE-TARGET or an operational\ncondition. Timeout and byte limits cover preflight, mutation and observation."},"source":{"file":"src/operations.lisp","line":22,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-rename-session"},{"id":"libtmux:rename-window","publicId":"libtmux:rename-window","qualifiedName":"libtmux:rename-window","namespace":"libtmux","name":"rename-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(rename-window client window text &key format-p (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"text"},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Rename the selected physical WINDOW and return a COMMAND-OUTCOME.\nTEXT is literal by default; FORMAT-P explicitly enables tmux format expansion.\nTmux may normalize or reject names. OBSERVE acquires a replacement in\nOUTCOME-VALUE; a failed follow-up stays in OUTCOME-OBSERVATION-ERROR without\nerasing successful mutation. Earlier observations are unchanged. Signals\nSTALE-TARGET or an operational condition. Never retries the mutation."},"source":{"file":"src/operations.lisp","line":12,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-rename-window"},{"id":"libtmux:resize-pane","publicId":"libtmux:resize-pane","qualifiedName":"libtmux:resize-pane","namespace":"libtmux","name":"resize-pane","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(resize-pane client pane &key width height direction (amount 1 amount-p) zoom (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"width","optional":true,"keywordOnly":true},{"name":"height","optional":true,"keywordOnly":true},{"name":"direction","optional":true,"keywordOnly":true},{"name":"amount","default":"1","optional":true,"keywordOnly":true},{"name":"zoom","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Resize PANE and return a COMMAND-OUTCOME with an optional replacement pane.\nChoose cell WIDTH/HEIGHT (1..10000), a DIRECTION and positive AMOUNT, or ZOOM.\nDIRECTION is :LEFT, :RIGHT, :UP or :DOWN; AMOUNT defaults to one. ZOOM toggles\nthe window's zoom state. Modes are exclusive. Tmux may clamp sizes to the\navailable layout; inspect the observed value. Earlier captures stay unchanged.\nSignals INVALID-ARGUMENT, STALE-TARGET or an operational condition."},"source":{"file":"src/geometry.lisp","line":50,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-resize-pane"},{"id":"libtmux:resize-window","publicId":"libtmux:resize-window","qualifiedName":"libtmux:resize-window","namespace":"libtmux","name":"resize-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(resize-window client window &key width height direction (amount 1 amount-p) fit (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"width","optional":true,"keywordOnly":true},{"name":"height","optional":true,"keywordOnly":true},{"name":"direction","optional":true,"keywordOnly":true},{"name":"amount","default":"1","optional":true,"keywordOnly":true},{"name":"fit","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Resize physical WINDOW and return an outcome with an optional replacement.\nChoose cell WIDTH/HEIGHT (1..10000), a DIRECTION and positive AMOUNT, or FIT\n(:SMALLEST or :LARGEST attached client). Modes are exclusive; dimensions are\nsubject to tmux's layout constraints. A resize sets the window-size option to\nmanual, as tmux does. Signals INVALID-ARGUMENT, STALE-TARGET or an operational\ncondition. Observation failure is retained separately from mutation success."},"source":{"file":"src/geometry.lisp","line":63,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-resize-window"},{"id":"libtmux:respawn-pane","publicId":"libtmux:respawn-pane","qualifiedName":"libtmux:respawn-pane","namespace":"libtmux","name":"respawn-pane","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(respawn-pane client pane &key kill cwd environment (observe t) (command nil command-p) (shell-command nil shell-command-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"kill","optional":true,"keywordOnly":true},{"name":"cwd","optional":true,"keywordOnly":true},{"name":"environment","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"shell-command","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Restart PANE's process and return a COMMAND-OUTCOME.\nKILL explicitly replaces a running process; otherwise tmux requires it to have\nexited. Omit COMMAND and SHELL-COMMAND to reuse the previous command. Explicit\nargv, shell text, literal CWD and ENVIRONMENT follow NEW-WINDOW. OBSERVE returns\na replacement pane through OUTCOME-VALUE; its earlier capture stays unchanged.\nThe process may exit before observation. Signals STALE-TARGET or an operational\ncondition; never retries an uncertain restart."},"source":{"file":"src/process-operations.lisp","line":14,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-respawn-pane"},{"id":"libtmux:respawn-window","publicId":"libtmux:respawn-window","qualifiedName":"libtmux:respawn-window","namespace":"libtmux","name":"respawn-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(respawn-window client window &key kill cwd environment (observe t) (command nil command-p) (shell-command nil shell-command-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"kill","optional":true,"keywordOnly":true},{"name":"cwd","optional":true,"keywordOnly":true},{"name":"environment","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"shell-command","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Restart WINDOW as one pane and return a COMMAND-OUTCOME.\nKILL explicitly replaces running processes. Tmux retains its first pane and\ndestroys every other pane in the physical window, including through other links.\nOther options follow RESPAWN-PANE. OBSERVE supplies a replacement window without\nchanging earlier observations. Linked-window session context is selected by tmux.\nSignals STALE-TARGET or an operational condition; never retries the restart."},"source":{"file":"src/process-operations.lisp","line":28,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-respawn-window"},{"id":"libtmux:rotate-window","publicId":"libtmux:rotate-window","qualifiedName":"libtmux:rotate-window","namespace":"libtmux","name":"rotate-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(rotate-window client window &key (direction :up) preserve-zoom (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"direction","default":":up","optional":true,"keywordOnly":true},{"name":"preserve-zoom","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Rotate WINDOW's pane positions :UP or :DOWN; return an outcome and replacement.\nTmux also advances the active pane. PRESERVE-ZOOM restores zoom after rotating.\nSignals INVALID-ARGUMENT, STALE-TARGET or an operational condition. Captured\npane order remains unchanged in earlier observations."},"source":{"file":"src/placement.lisp","line":173,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-rotate-window"},{"id":"libtmux:run-command","publicId":"libtmux:run-command","qualifiedName":"libtmux:run-command","namespace":"libtmux","name":"run-command","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(run-command client arguments &key effect input cancel-token (timeout (slot-value client (quote timeout))) (output-limit (slot-value client (quote output-limit))))","params":[{"name":"client"},{"name":"arguments"},{"name":"effect","optional":true,"keywordOnly":true},{"name":"input","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","default":"(slot-value client (quote timeout))","optional":true,"keywordOnly":true},{"name":"output-limit","default":"(slot-value client (quote output-limit))","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Execute explicit tmux argv and return a retained COMMAND-OUTCOME.\nEFFECT must be :READ or :MUTATION. Arguments are literal argv strings; tmux's\nown command/format grammar still applies. INPUT is an octet vector or NIL.\nThis escape hatch does not validate captured target identities. Failures signal\nconditions retaining the outcome; uncertain mutations are never retried."},"source":{"file":"src/client.lisp","line":415,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-run-command"},{"id":"libtmux:same-entity-p","publicId":"libtmux:same-entity-p","qualifiedName":"libtmux:same-entity-p","namespace":"libtmux","name":"same-entity-p","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(same-entity-p left right)","params":[{"name":"left"},{"name":"right"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Compare captured identity, not captured field values. No I/O.\nContext and generation must agree. Link comparison retains its expected window\nand index. Attached clients compare equal only within their original capture."},"source":{"file":"src/model.lisp","line":139,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-same-entity-p"},{"id":"libtmux:save-buffer","publicId":"libtmux:save-buffer","qualifiedName":"libtmux:save-buffer","namespace":"libtmux","name":"save-buffer","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(save-buffer client path &key name append cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"path"},{"name":"name","optional":true,"keywordOnly":true},{"name":"append","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Save a named or top buffer's bytes to literal PATH; return a COMMAND-OUTCOME.\nOverwrite the file unless APPEND is true. Relative paths follow tmux's command\nclient cwd. Use SHOW-BUFFER for returned bytes. Success records tmux's reported\ncompletion, not independently verified file contents or durability. In particular,\ntmux 3.3a can suppress file-write errors. An uncertain write is never retried.\nSignals INVALID-ARGUMENT or an operational condition."},"source":{"file":"src/buffers.lisp","line":111,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-save-buffer"},{"id":"libtmux:select-layout","publicId":"libtmux:select-layout","qualifiedName":"libtmux:select-layout","namespace":"libtmux","name":"select-layout","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(select-layout client window layout &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"window"},{"name":"layout"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Apply LAYOUT to physical WINDOW; return an outcome and optional replacement.\nLAYOUT is :EVEN-HORIZONTAL, :EVEN-VERTICAL, :MAIN-HORIZONTAL, :MAIN-VERTICAL,\n:TILED, or (:CUSTOM string) containing a tmux layout description. Legacy custom\ntext requires four ASCII hex digits, a comma and a nonempty body; JSON-object\nlayouts require a live tmux daemon at least 3.8. Header checks precede I/O;\nthe existing target preflight checks the daemon version before dispatch.\nText is literal; tmux validates its checksum, JSON and geometry. This unzooms\nthe window. Signals INVALID-ARGUMENT, UNSUPPORTED-CAPABILITY, STALE-TARGET or\nan operational condition. Does not change earlier captured values.","body":"See also: `libtmux:next-layout`, `libtmux:outcome-value`, `libtmux:previous-layout`.","seeAlso":["libtmux:next-layout","libtmux:outcome-value","libtmux:previous-layout"]},"source":{"file":"src/geometry.lisp","line":76,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-select-layout"},{"id":"libtmux:select-pane","publicId":"libtmux:select-pane","qualifiedName":"libtmux:select-pane","namespace":"libtmux","name":"select-pane","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(select-pane client pane &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select PANE within its physical window; return a COMMAND-OUTCOME.\nOBSERVE supplies a replacement pane through OUTCOME-VALUE. Captured getters\nstay local and unchanged. Signals STALE-TARGET or an operational condition."},"source":{"file":"src/operations.lisp","line":41,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-select-pane"},{"id":"libtmux:select-window","publicId":"libtmux:select-window","qualifiedName":"libtmux:select-window","namespace":"libtmux","name":"select-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(select-window client link &key (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"link"},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Select a captured window LINK within its session; return a COMMAND-OUTCOME.\nThe expected session/index/window mapping is checked before dispatch. OBSERVE\nsupplies a replacement link through OUTCOME-VALUE. A moved or replaced mapping\nsignals STALE-TARGET; external failures retain their command outcome."},"source":{"file":"src/operations.lisp","line":31,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-select-window"},{"id":"libtmux:send-keys","publicId":"libtmux:send-keys","qualifiedName":"libtmux:send-keys","namespace":"libtmux","name":"send-keys","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(send-keys client pane keys &key (repeat 1) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"keys"},{"name":"repeat","default":"1","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Send a finite nonempty list/vector of tmux key strings to PANE.\nReturn a COMMAND-OUTCOME. REPEAT is a positive count. Tmux interprets key names\nsuch as C-c and Enter; its unrecognized strings fall back to literal input.\nUse SEND-TEXT when key-name interpretation must be disabled. Acknowledgment\ndoes not prove application readiness or consumption."},"source":{"file":"src/terminal-operations.lisp","line":17,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-send-keys"},{"id":"libtmux:send-prefix","publicId":"libtmux:send-prefix","qualifiedName":"libtmux:send-prefix","namespace":"libtmux","name":"send-prefix","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(send-prefix client pane &key second cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"second","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Send the session's configured prefix key to PANE; return a COMMAND-OUTCOME.\nSECOND selects prefix2. Tmux's active pane mode handles input; completion does\nnot establish application consumption. Signals STALE-TARGET or an operational\ncondition retaining its outcome."},"source":{"file":"src/terminal-operations.lisp","line":33,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-send-prefix"},{"id":"libtmux:send-text","publicId":"libtmux:send-text","qualifiedName":"libtmux:send-text","namespace":"libtmux","name":"send-text","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(send-text client pane text &key enter cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"text"},{"name":"enter","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Send literal TEXT to PANE through tmux and return a COMMAND-OUTCOME.\nENTER appends one Return key in the same command. Text such as C-c remains\nliteral text; it is not parsed as a key name, tmux format or shell command.\nTmux's active pane mode still handles the resulting input. Completion means\ntmux processed the send request, not that the application consumed it. An\noversized encoded command is rejected without silently splitting the input."},"source":{"file":"src/terminal-operations.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-send-text"},{"id":"libtmux:server-access","publicId":"libtmux:server-access","qualifiedName":"libtmux:server-access","namespace":"libtmux","name":"server-access","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(server-access client principal access &key group-p cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"principal"},{"name":"access"},{"name":"group-p","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Change PRINCIPAL's native daemon ACL entry; return a COMMAND-OUTCOME.\nPRINCIPAL is a nonempty literal account name, resolved by the daemon's name\nservice, not a numeric UID/GID. GROUP-P selects a group and requires live tmux\n3.8; older daemons signal UNSUPPORTED-CAPABILITY before payload dispatch.","body":"ACCESS is :ALLOW (add a writable entry), :DENY (remove an entry), :READ-ONLY\nor :READ-WRITE (update or add). Adding an existing entry and removing an absent\none are errors. Root and the daemon-owner UID cannot be changed. :DENY creates\nno deny rule: from 3.8, a removed user can still match its peer GID's entry.\nExplicit UID entries take precedence over that GID; supplementary groups are\nnot searched. Cross-user filesystem access must be configured separately.\n\nFrom 3.8, removal and permission updates recompute every connected client's\nread-only state. This can clear an unrelated frontend's separate read-only\nflag when its effective ACL entry is writable. Updates can schedule client\ndisconnection; success does not prove frontend exit. Already scheduled exits\nare not cancelled by a later grant.\n\nBlocks under shared preflight/dispatch limits, acquires no observation and\nnever retries. Invalid input signals INVALID-ARGUMENT; native errors and\nuncertain effects retain their outcome. Earlier captures stay unchanged.\n\nSee also: `libtmux:error-outcome`, `libtmux:fetch-clients`, `libtmux:list-server-access`, `libtmux:refresh`.","seeAlso":["libtmux:error-outcome","libtmux:fetch-clients","libtmux:list-server-access","libtmux:refresh"]},"source":{"file":"src/server-operations.lisp","line":3,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-server-access"},{"id":"libtmux:session/function","publicId":"libtmux:session/function","qualifiedName":"libtmux:session","namespace":"libtmux","name":"session","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(session entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:session/function\",[],[\"libtmux:attached-client\"]]","methodKind":"function","raw":"(session (client libtmux:attached-client))","params":[{"name":"client","type":"libtmux:attached-client"}],"label":"Primary method: libtmux:attached-client"},{"identity":"[\"libtmux:session/function\",[],[\"libtmux:window-link\"]]","methodKind":"function","raw":"(session (link libtmux:window-link))","params":[{"name":"link","type":"libtmux:window-link"}],"label":"Primary method: libtmux:window-link"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the locally captured session of a link or attached client."},"source":{"file":"src/model.lisp","line":63,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-session-function"},{"id":"libtmux:session/type","publicId":"libtmux:session/type","qualifiedName":"libtmux:session","namespace":"libtmux","name":"session","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A captured physical tmux session."},"source":{"file":"src/model.lisp","line":25,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:entity"],"slug":"libtmux-session-type"},{"id":"libtmux:sessions","publicId":"libtmux:sessions","qualifiedName":"libtmux:sessions","namespace":"libtmux","name":"sessions","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(sessions snapshot)","params":[{"name":"snapshot"}]},{"identity":"[\"libtmux:sessions\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(sessions (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of physical sessions in captured wire order. No I/O."},"source":{"file":"src/model.lisp","line":47,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-sessions"},{"id":"libtmux:set-buffer","publicId":"libtmux:set-buffer","qualifiedName":"libtmux:set-buffer","namespace":"libtmux","name":"set-buffer","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(set-buffer client data &key name append cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"data"},{"name":"name","optional":true,"keywordOnly":true},{"name":"append","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Store literal DATA in a named or automatic buffer; return a COMMAND-OUTCOME.\nDATA is a NUL-free string or an octet vector. Strings use tmux set-buffer;\noctets use its load-buffer stdin path and preserve NUL and invalid UTF-8.\nAPPEND is available only for strings. Empty DATA is tmux's no-op and preserves\nan existing buffer. NAME is literal; omission creates an automatic name.\nNew names reject backslashes, ASCII controls and DEL before I/O because tmux\nversions otherwise rewrite or reject them. Spaces and Unicode are supported.\nSignals INVALID-ARGUMENT or an operational condition."},"source":{"file":"src/buffers.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-set-buffer"},{"id":"libtmux:set-environment","publicId":"libtmux:set-environment","qualifiedName":"libtmux:set-environment","namespace":"libtmux","name":"set-environment","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(set-environment client name value &key scope target format-p hidden cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"value"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"hidden","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Set one raw tmux environment entry and return its COMMAND-OUTCOME.\nSCOPE is required: :GLOBAL rejects TARGET; :SESSION requires a captured session.\nNAME must match [A-Za-z_][A-Za-z0-9_]*. VALUE is literal unless FORMAT-P\nexplicitly requests tmux format expansion. HIDDEN sets tmux's hidden flag.\nThis mutates one raw table, not an effective merged child environment. Never\nretries or refreshes captured observations. See UNSET-ENVIRONMENT for deletion\nand REMOVE-ENVIRONMENT for an explicit tombstone.","body":"See also: `libtmux:remove-environment`, `libtmux:unset-environment`.","seeAlso":["libtmux:remove-environment","libtmux:unset-environment"]},"source":{"file":"src/configuration-operations.lisp","line":229,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-set-environment"},{"id":"libtmux:set-hook","publicId":"libtmux:set-hook","qualifiedName":"libtmux:set-hook","namespace":"libtmux","name":"set-hook","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(set-hook client name command-source &key scope target (key nil key-p) append cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"command-source"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"key","default":"nil","optional":true,"keywordOnly":true},{"name":"append","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Install tmux COMMAND-SOURCE for one registered hook and return an outcome.\nSCOPE/TARGET follow SET-OPTION. COMMAND-SOURCE is explicit tmux command\nlanguage, not Lisp code; this function neither reads nor executes it locally.\nKEY selects one hook-array entry. APPEND applies to an unkeyed hook assignment;\ntmux does not append command source within a keyed hook entry. The ordinary\ninstall path never uses set-hook -R, but tmux may still run a registered native\nafter-hook such as `after-set-hook` as a consequence of this set-hook command.\nDynamic @ event sources require a live catalog that supports them. SET-OPTION\nrejects registered hooks; use UNSET-HOOK to remove this state. Never retries.","body":"See also: `libtmux:set-option`, `libtmux:unset-hook`.","seeAlso":["libtmux:set-option","libtmux:unset-hook"]},"source":{"file":"src/configuration-operations.lisp","line":201,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-set-hook"},{"id":"libtmux:set-option","publicId":"libtmux:set-option","qualifiedName":"libtmux:set-option","namespace":"libtmux","name":"set-option","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(set-option client name value &key scope target (key nil key-p) format-p append only-if-unset cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"value"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"key","default":"nil","optional":true,"keywordOnly":true},{"name":"format-p","optional":true,"keywordOnly":true},{"name":"append","optional":true,"keywordOnly":true},{"name":"only-if-unset","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Set one typed tmux option and return its COMMAND-OUTCOME.\nSCOPE is required and names one explicit table: :SERVER, :GLOBAL-SESSION,\n:SESSION, :GLOBAL-WINDOW, :WINDOW or :PANE. Local scopes require a captured\nTARGET of the matching type; global scopes reject one. NAME is resolved in the\nexact live daemon catalog. Native numbers, Booleans and choices are validated\nbefore payload dispatch. User names must match @[A-Za-z0-9_.-]+ and remain\nstrings. KEY addresses a registered array element. FORMAT-P treats VALUE as an\nexplicit tmux format; otherwise VALUE is literal and typed. APPEND is supported\nfor strings, keyed string-array elements and unkeyed array assignment. An\nunkeyed array VALUE uses that option's native tmux list grammar; use KEY when\nVALUE must remain one literal element. ONLY-IF-UNSET requests tmux -o: write\nonly when the option, or the selected array key, is absent from the local table.\nInherited values permit a local write; present false and empty values refuse\nreplacement. Refusal retains normal condition/outcome evidence through\nERROR-OUTCOME. The condition applies to this command; later commands and hooks\nremain independent. Use UNSET-OPTION to remove state and SET-HOOK for registered\nhooks. Never retries or acquires a replacement capture.","body":"See also: `libtmux:error-outcome`, `libtmux:set-hook`, `libtmux:unset-option`.","seeAlso":["libtmux:error-outcome","libtmux:set-hook","libtmux:unset-option"]},"source":{"file":"src/configuration-operations.lisp","line":164,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-set-option"},{"id":"libtmux:show-buffer","publicId":"libtmux:show-buffer","qualifiedName":"libtmux:show-buffer","namespace":"libtmux","name":"show-buffer","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(show-buffer client &key name cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Read a literal named buffer, or tmux's top buffer; return octets and an outcome.\nOutput is an owned octet vector with no text decoding or trimming. Uses an\nordinary unattached tmux client and requires normal completion with empty stderr.\nNames select the buffer at dispatch, not an earlier incarnation. A post-launch\nfailure does not prove non-dispatch. Signals an operational condition retaining\nits outcome and any partial bytes."},"source":{"file":"src/buffers.lisp","line":87,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-show-buffer"},{"id":"libtmux:show-environment","publicId":"libtmux:show-environment","qualifiedName":"libtmux:show-environment","namespace":"libtmux","name":"show-environment","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(show-environment client &key scope target (names nil names-p) cancel-token timeout output-limit (record-limit 4096) (value-limit 1048576))","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"names","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true},{"name":"record-limit","default":"4096","optional":true,"keywordOnly":true},{"name":"value-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire named raw environment entries; return owned record/outcome vectors.\nSCOPE is :GLOBAL or :SESSION; session scope requires a captured TARGET. NAMES\nis required; explicit NIL/#() performs no I/O. Native names are nonempty UTF-8\nwithout NUL or =, including names outside the mutation identifier grammar.\nEach plist has :NAME, :SCOPE, :TARGET-ID, :VERSION, :STATE and :VALUE. States are\n:PRESENT, :REMOVED and :ABSENT. Empty strings remain present. Present/removal\nrecords additionally carry explicit :HIDDEN-P; absent records claim no visibility.\nRead ordinary visibility first, then hidden only after empty success. Contradictory\nviews retry under the original limits. This is not a merged child environment.\nShared limits, ordinary-output assumptions and failure evidence follow SHOW-OPTIONS.","body":"See also: `libtmux:configuration-read-failed`, `libtmux:set-environment`, `libtmux:show-environment-text`, `libtmux:show-options`.","seeAlso":["libtmux:configuration-read-failed","libtmux:set-environment","libtmux:show-environment-text","libtmux:show-options"]},"source":{"file":"src/configuration-acquisition.lisp","line":373,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-show-environment"},{"id":"libtmux:show-environment-text","publicId":"libtmux:show-environment-text","qualifiedName":"libtmux:show-environment-text","namespace":"libtmux","name":"show-environment-text","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(show-environment-text client &key scope target name hidden shell-format cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"name","optional":true,"keywordOnly":true},{"name":"hidden","optional":true,"keywordOnly":true},{"name":"shell-format","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Inspect a raw environment table; return owned UTF-8 text and a COMMAND-OUTCOME.\nRequired SCOPE is :GLOBAL or :SESSION; a session needs a captured TARGET.\nNAME is literal nonempty text without NUL or =, including names outside the\nmutation identifier grammar. Omission lists the table. HIDDEN selects hidden\nentries; NIL selects ordinary entries. A visibility mismatch can return empty\ntext, which does not prove absence. Empty values, removal markers and native\nescaping remain printer syntax. Session output is not a merged child environment.","body":"SHELL-FORMAT selects native shell-looking presentation (-s); returned text is\nnever evaluated or executed. Ordinary hook output is preserved. This is not a\ndecoded environment mapping. Blocks under shared preflight/dispatch limits,\nstarts no daemon and never retries. Missing names remain errors; operational,\nresource and UTF-8 failures retain client/outcome diagnostics.\n\nSee also: `libtmux:error-outcome`, `libtmux:remove-environment`, `libtmux:set-environment`, `libtmux:show-options-text`.","seeAlso":["libtmux:error-outcome","libtmux:remove-environment","libtmux:set-environment","libtmux:show-options-text"]},"source":{"file":"src/configuration-operations.lisp","line":323,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-show-environment-text"},{"id":"libtmux:show-hooks","publicId":"libtmux:show-hooks","qualifiedName":"libtmux:show-hooks","namespace":"libtmux","name":"show-hooks","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(show-hooks client &key scope target (names nil names-p) (include-inherited t) cancel-token timeout output-limit (record-limit 4096) (value-limit 1048576))","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"names","default":"nil","optional":true,"keywordOnly":true},{"name":"include-inherited","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true},{"name":"record-limit","default":"4096","optional":true,"keywordOnly":true},{"name":"value-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire owned hook records and native read outcomes, following SHOW-OPTIONS.\nOmitted NAMES enumerates built-in hooks. Explicit dynamic @ names require a\nsupporting catalog and remain ordinary strings, without a registration claim.\nBuiltin command values are inert canonical tmux source. Inspection never requests\nset-hook -R; ordinary after-read hooks still apply. :SERVER is unavailable.\nNo Lisp reader or evaluator parses source.","body":"See also: `libtmux:configuration-read-failed`, `libtmux:set-hook`, `libtmux:show-hooks-text`, `libtmux:show-options`.","seeAlso":["libtmux:configuration-read-failed","libtmux:set-hook","libtmux:show-hooks-text","libtmux:show-options"]},"source":{"file":"src/configuration-acquisition.lisp","line":340,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-show-hooks"},{"id":"libtmux:show-hooks-text","publicId":"libtmux:show-hooks-text","qualifiedName":"libtmux:show-hooks-text","namespace":"libtmux","name":"show-hooks-text","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(show-hooks-text client &key scope target name format monitors cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"name","optional":true,"keywordOnly":true},{"name":"format","optional":true,"keywordOnly":true},{"name":"monitors","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Inspect native hooks; return owned UTF-8 printer text and a COMMAND-OUTCOME.\nSCOPE/TARGET follow SET-HOOK; :SERVER is unavailable because show-hooks has no\nserver-table flag. NAME is a literal native reference; omission lists hooks.\nTmux can infer a built-in's table from NAME. A named ordinary @ option can\nalso be printed; that success does not prove event registration.","body":"FORMAT is explicit tmux format source with no implicit time expansion.\nMONITORS selects native monitor presentation (-B). Both require live tmux 3.8.\n#() in FORMAT can start command-client jobs with incomplete results and cleanup\non disconnect. Native escaping, whitespace and ordinary hook output remain\nprinter text, not a decoded or replayable configuration. No -R is invoked.\nBlocks under shared preflight/dispatch limits, starts no daemon and never\nretries. Missing names and decoding/resource failures retain outcome evidence.\n\nSee also: `libtmux:error-outcome`, `libtmux:set-hook`, `libtmux:show-options-text`, `libtmux:unset-hook`.","seeAlso":["libtmux:error-outcome","libtmux:set-hook","libtmux:show-options-text","libtmux:unset-hook"]},"source":{"file":"src/configuration-operations.lisp","line":294,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-show-hooks-text"},{"id":"libtmux:show-option","publicId":"libtmux:show-option","qualifiedName":"libtmux:show-option","namespace":"libtmux","name":"show-option","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(show-option client name &key scope target (key nil key-p) (include-inherited t) cancel-token timeout output-limit (record-limit 4096) (value-limit 1048576))","params":[{"name":"client"},{"name":"name"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"key","default":"nil","optional":true,"keywordOnly":true},{"name":"include-inherited","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true},{"name":"record-limit","default":"4096","optional":true,"keywordOnly":true},{"name":"value-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire one decoded option; return VALUE, PRESENT-P and a read-outcome vector.\nFalse returns NIL,T; absence returns NIL,NIL. KEY selects an entry only after\nacquiring a whole named array. A missing key does not fall through a present\nlocal array. Mutable key text is copied before I/O and bounded to 1 MiB UTF-8.\nKeys normalize under the exact live catalog before payload reads.\nScopes, limits, inheritance, ownership and failure evidence follow SHOW-OPTIONS.","body":"See also: `libtmux:configuration-read-failed`, `libtmux:outcome-value`, `libtmux:show-options`.","seeAlso":["libtmux:configuration-read-failed","libtmux:outcome-value","libtmux:show-options"]},"source":{"file":"src/configuration-acquisition.lisp","line":354,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-show-option"},{"id":"libtmux:show-options","publicId":"libtmux:show-options","qualifiedName":"libtmux:show-options","namespace":"libtmux","name":"show-options","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(show-options client &key scope target (names nil names-p) (include-inherited t) cancel-token timeout output-limit (record-limit 4096) (value-limit 1048576))","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"names","default":"nil","optional":true,"keywordOnly":true},{"name":"include-inherited","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true},{"name":"record-limit","default":"4096","optional":true,"keywordOnly":true},{"name":"value-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Acquire decoded options; return owned record and native read-outcome vectors.\nSCOPE and TARGET follow SET-OPTION. Omitted NAMES enumerates registered built-in\nnon-hook names in source order; explicit finite lists/vectors preserve requested\norder and duplicates, including user names. At most 4096 names of at most 1 MiB\nUTF-8 each are accepted, independently of RECORD-LIMIT. Explicit NIL/#() performs\nno I/O after argument validation.\nEach plist has :NAME, :SCOPE, :TARGET-ID, :VERSION, :TYPE, :ARRAY-P, :PRESENT-P,\n:VALUE, :SOURCE-SCOPE, :SOURCE-TARGET-ID and :INHERITED-P. A present false flag\nhas NIL value and true presence. Arrays are vectors of (key-text . typed-value)\npairs, including sparse and supported string keys; empty arrays are present.\nINCLUDE-INHERITED defaults true: use explicit ancestor tables only after local\nabsence and recheck every shadowing absence. Observations span an interval,\nnot a transaction. Read hooks can run again during bounded consistency retries.\nOne lease, token, deadline and aggregate byte/record budget covers all reads.\nRECORD-LIMIT counts decoded rows/negative observations, including rechecks.\nVALUE-LIMIT bounds each decoded UTF-8 value. Preparation and cleanup add wall time.\nThe ordinary printer must match its known schema; unrelated after-read output\nsignals a decoding failure. This assumes trusted native output, not per-leaf\norigin authentication. Raw SHOW-OPTIONS-TEXT preserves unrestricted inspection.\nEvery requested name has a record even when absent. Read outcomes retain native\nfailures for expected missing names; this does not prove later hooks succeeded.\nRecords contain no operational handle; strings/containers own their storage.","body":"See also: `libtmux:configuration-read-failed`, `libtmux:show-hooks`, `libtmux:show-option`, `libtmux:show-options-text`.","seeAlso":["libtmux:configuration-read-failed","libtmux:show-hooks","libtmux:show-option","libtmux:show-options-text"]},"source":{"file":"src/configuration-acquisition.lisp","line":310,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-show-options"},{"id":"libtmux:show-options-text","publicId":"libtmux:show-options-text","qualifiedName":"libtmux:show-options-text","namespace":"libtmux","name":"show-options-text","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(show-options-text client &key scope target name include-inherited include-hooks value-only format cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"name","optional":true,"keywordOnly":true},{"name":"include-inherited","optional":true,"keywordOnly":true},{"name":"include-hooks","optional":true,"keywordOnly":true},{"name":"value-only","optional":true,"keywordOnly":true},{"name":"format","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Inspect an option table; return owned UTF-8 printer text and a COMMAND-OUTCOME.\nRequired SCOPE and captured TARGET follow SET-OPTION. They select native flags;\ntmux can infer a built-in's table from NAME instead. NAME is a literal option\nreference with native abbreviation/array syntax; omission lists the table.\nINCLUDE-INHERITED uses -A, which does not promise inherited user @ options in a\nwhole-table listing. INCLUDE-HOOKS uses -H and VALUE-ONLY uses -v.","body":"FORMAT is explicit tmux format source, requires live tmux 3.8, and has no\nimplicit time expansion. #() can start asynchronous command-client jobs; their\nresults can be incomplete and disconnect cleans them up. Omission uses native\nprinter syntax. Escaping, whitespace and ordinary hook output remain text;\nthis does not decode values or prove presence, provenance or completeness.\nBlocks under shared preflight/dispatch limits, starts no daemon and never\nretries. Missing names remain errors with retained outcomes. Invalid UTF-8\nsignals DECODING-ERROR with the client and outcome.\n\nSee also: `libtmux:error-outcome`, `libtmux:set-option`, `libtmux:show-environment-text`, `libtmux:show-hooks-text`.","seeAlso":["libtmux:error-outcome","libtmux:set-option","libtmux:show-environment-text","libtmux:show-hooks-text"]},"source":{"file":"src/configuration-operations.lisp","line":263,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-show-options-text"},{"id":"libtmux:snapshot","publicId":"libtmux:snapshot","qualifiedName":"libtmux:snapshot","namespace":"libtmux","name":"snapshot","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A finite captured graph assembled over a recorded acquisition interval.\nIt contains owned observations, not a transactional view of a changing daemon.\nPublic accessors are local and return fresh mutable values."},"source":{"file":"src/model.lisp","line":7,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-snapshot"},{"id":"libtmux:split-pane","publicId":"libtmux:split-pane","qualifiedName":"libtmux:split-pane","namespace":"libtmux","name":"split-pane","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(split-pane client pane &key (direction :vertical) size percent before full-size cwd environment (detached t) (command nil command-p) (shell-command nil shell-command-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"pane"},{"name":"direction","default":":vertical","optional":true,"keywordOnly":true},{"name":"size","optional":true,"keywordOnly":true},{"name":"percent","optional":true,"keywordOnly":true},{"name":"before","optional":true,"keywordOnly":true},{"name":"full-size","optional":true,"keywordOnly":true},{"name":"cwd","optional":true,"keywordOnly":true},{"name":"environment","optional":true,"keywordOnly":true},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"command","default":"nil","optional":true,"keywordOnly":true},{"name":"shell-command","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Split captured PANE and return a COMMAND-OUTCOME with the created pane.\nDIRECTION is :HORIZONTAL (left/right) or :VERTICAL (top/bottom). SIZE is a\npositive cell count; PERCENT is 1 through 100, mutually exclusive with SIZE.\nBEFORE places the pane before its target; FULL-SIZE spans the whole window.\nDETACHED defaults true. CWD, ENVIRONMENT, COMMAND and SHELL-COMMAND follow\nNEW-WINDOW. Failed acquisition after successful creation is retained separately.\nSignals STALE-TARGET or an operational condition; never retries the mutation."},"source":{"file":"src/creation.lisp","line":45,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-split-pane"},{"id":"libtmux:stale-target","publicId":"libtmux:stale-target","qualifiedName":"libtmux:stale-target","namespace":"libtmux","name":"stale-target","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Captured target authority or required dispatch context no longer agrees with live state."},"source":{"file":"src/conditions.lisp","line":95,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-stale-target"},{"id":"libtmux:start-daemon","publicId":"libtmux:start-daemon","qualifiedName":"libtmux:start-daemon","namespace":"libtmux","name":"start-daemon","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(start-daemon &key (program \"tmux\") (environment nil environment-p) working-directory temporary-directory (timeout 30) (output-limit 1048576) cancel-token)","params":[{"name":"program","default":"\"tmux\"","optional":true,"keywordOnly":true},{"name":"environment","default":"nil","optional":true,"keywordOnly":true},{"name":"working-directory","optional":true,"keywordOnly":true},{"name":"temporary-directory","optional":true,"keywordOnly":true},{"name":"timeout","default":"30","optional":true,"keywordOnly":true},{"name":"output-limit","default":"1048576","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Start an owned empty-config daemon on a fresh private socket and await readiness.\nUses the qualified SBCL/Linux backend and explicit /dev/null configuration.\nENVIRONMENT is a finite list/vector of distinct NAME=VALUE strings; omission\ncopies the caller environment, and NIL selects an empty input environment.\nTmux selectors, socket activation and launcher controls are removed. Caller\nlocale is preserved; Bash shell metadata is not byte-transparent. Environment\nvalues and the native executable remain trusted application configuration.\nWORKING-DIRECTORY defaults to the captured current directory. The owner creates\na fresh directory under TEMPORARY-DIRECTORY (default UIOP's temporary directory).\nIts canonical ancestors must be owned by this user or root; writable ancestors\nmust have the sticky bit. No existing daemon or endpoint is adopted.\nTIMEOUT is one startup deadline after input preparation, including version and\nreadiness IPC. OUTPUT-LIMIT must be at least two bytes: half bounds daemon\nlifetime diagnostics; the remainder bounds version/readiness output. Cleanup\nadds bounded waits; synchronous setup and scheduling can extend caller wall time.\nCANCEL-TOKEN affects startup only; after READY, STOP-DAEMON owns cancellation.\nSignals DAEMON-START-FAILED with the original cause and owner on startup failure.","body":"See also: `libtmux:error-daemon`, `libtmux:open-client`, `libtmux:stop-daemon`, `libtmux:with-daemon`.","seeAlso":["libtmux:error-daemon","libtmux:open-client","libtmux:stop-daemon","libtmux:with-daemon"]},"source":{"file":"src/daemon.lisp","line":117,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-start-daemon"},{"id":"libtmux:stop-daemon","publicId":"libtmux:stop-daemon","qualifiedName":"libtmux:stop-daemon","namespace":"libtmux","name":"stop-daemon","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(stop-daemon daemon)","params":[{"name":"daemon"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Stop and reap DAEMON's owned child, then remove its checked socket and directory.\nIdempotent after success; returns no values. Never targets a daemon through a\nreusable PID or socket command. A 0.75-second admission wait and a separate\n0.75-second worker join precede any retried job cleanup (up to 0.5 seconds).\nSynchronous OS calls and scheduling can extend wall time. Failed cleanup signals\nDAEMON-CLEANUP-FAILED and retains the owner for retry. Closing an ordinary client\ndoes not call this function. Terminating the daemon does not establish exit of\nevery pane descendant.","body":"See also: `libtmux:daemon-cleanup-failures`, `libtmux:pending-daemon-cleanups`, `libtmux:with-daemon`.","seeAlso":["libtmux:daemon-cleanup-failures","libtmux:pending-daemon-cleanups","libtmux:with-daemon"]},"source":{"file":"src/daemon.lisp","line":143,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-stop-daemon"},{"id":"libtmux:suspend-client","publicId":"libtmux:suspend-client","qualifiedName":"libtmux:suspend-client","namespace":"libtmux","name":"suspend-client","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(suspend-client client target &key cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"target"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Request suspension of captured terminal TARGET; return a COMMAND-OUTCOME.\nTmux asks the frontend to stop with SIGTSTP. Success acknowledges the request;\nit does not prove process suspension. An already suspended frontend can be a\nno-op. Its controlling application owns resumption. CLIENT must own TARGET.\nBlocks under shared preflight/dispatch limits; returns no replacement. Stale or\nforeign targets signal STALE-TARGET; other failures retain their outcome.\nPreflight cannot exclude client replacement before dispatch. Never retries.","body":"See also: `libtmux:detach-client`, `libtmux:fetch-clients`, `libtmux:lock-client`, `libtmux:outcome-status`.","seeAlso":["libtmux:detach-client","libtmux:fetch-clients","libtmux:lock-client","libtmux:outcome-status"]},"source":{"file":"src/client-operations.lisp","line":92,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-suspend-client"},{"id":"libtmux:swap-panes","publicId":"libtmux:swap-panes","qualifiedName":"libtmux:swap-panes","namespace":"libtmux","name":"swap-panes","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(swap-panes client first-pane second-pane &key (detached t) preserve-zoom (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"first-pane"},{"name":"second-pane"},{"name":"detached","default":"t","optional":true,"keywordOnly":true},{"name":"preserve-zoom","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Swap two physical panes; return an outcome with replacements in a fresh vector.\nThe vector follows argument order. DETACHED defaults true; tmux still adjusts\nactive-pane references when panes change windows. PRESERVE-ZOOM restores zoom.\nSignals STALE-TARGET or an operational condition. Earlier captures stay local\nand unchanged; observation failure is retained separately."},"source":{"file":"src/placement.lisp","line":154,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-swap-panes"},{"id":"libtmux:swap-windows","publicId":"libtmux:swap-windows","qualifiedName":"libtmux:swap-windows","namespace":"libtmux","name":"swap-windows","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(swap-windows client first-link second-link &key select (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"first-link"},{"name":"second-link"},{"name":"select","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Swap physical windows at two captured links; return a COMMAND-OUTCOME.\nOBSERVE supplies a fresh vector of replacement links in argument order. SELECT\nselects the affected indexes in their sessions; omission keeps current indexes.\nTmux group restrictions apply. Signals STALE-TARGET or an operational condition;\nold links retain their original expected window IDs."},"source":{"file":"src/placement.lisp","line":75,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-swap-windows"},{"id":"libtmux:switch-client","publicId":"libtmux:switch-client","qualifiedName":"libtmux:switch-client","namespace":"libtmux","name":"switch-client","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(switch-client client target session &key update-environment (observe t) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"target"},{"name":"session"},{"name":"update-environment","optional":true,"keywordOnly":true},{"name":"observe","default":"t","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Switch captured terminal TARGET to SESSION and return a COMMAND-OUTCOME.\nCLIENT is the connection owning both observations. UPDATE-ENVIRONMENT defaults\nNIL, preserving the destination session environment; true applies tmux's\nupdate-environment option using TARGET's environment. OBSERVE defaults true and\nsupplies a replacement attached-client through OUTCOME-VALUE. Earlier captures\nstay unchanged; failed follow-up acquisition stays in OUTCOME-OBSERVATION-ERROR.\nBlocks for preflight, dispatch and optional observation under shared limits.\nPreflight checks the unique client name and PID/creation/tty fingerprint; tmux\ndoes not atomically guard that fingerprint at dispatch. A changed or foreign\ntarget signals STALE-TARGET. Operational failures retain their outcome; no\nmutation is retried. Control clients are not supported by this operation.","body":"See also: `libtmux:detach-client`, `libtmux:fetch-clients`, `libtmux:outcome-value`, `libtmux:refresh`.","seeAlso":["libtmux:detach-client","libtmux:fetch-clients","libtmux:outcome-value","libtmux:refresh"]},"source":{"file":"src/client-operations.lisp","line":41,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-switch-client"},{"id":"libtmux:title","publicId":"libtmux:title","qualifiedName":"libtmux:title","namespace":"libtmux","name":"title","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(title entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:title\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(title (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a copied captured pane title and presence; empty is present. No I/O."},"source":{"file":"src/model.lisp","line":188,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-title"},{"id":"libtmux:tmux-version","publicId":"libtmux:tmux-version","qualifiedName":"libtmux:tmux-version","namespace":"libtmux","name":"tmux-version","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(tmux-version client)","params":[{"name":"client"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh copy of the release string observed when CLIENT opened."},"source":{"file":"src/client.lisp","line":228,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-tmux-version"},{"id":"libtmux:unbind-key","publicId":"libtmux:unbind-key","qualifiedName":"libtmux:unbind-key","namespace":"libtmux","name":"unbind-key","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(unbind-key client key &key (table \"prefix\") cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"key"},{"name":"table","default":"\"prefix\"","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Remove exactly one KEY from TABLE and return a COMMAND-OUTCOME.\nTABLE defaults to prefix. Both strings are literal. A missing key in an\nexisting table is a native no-op; an absent table is an error. Removing its last\nbinding can delete the table, so repeated removal need not succeed. No bulk\ndeletion, reset or retry is implicit. Blocks under shared preflight/dispatch\nlimits. Success acknowledges removal and hooks; it cannot undo earlier key\nexecution. Native errors and uncertain outcomes retain their diagnostics.","body":"See also: `libtmux:bind-key`, `libtmux:error-outcome`, `libtmux:list-keys`.","seeAlso":["libtmux:bind-key","libtmux:error-outcome","libtmux:list-keys"]},"source":{"file":"src/key-bindings.lisp","line":95,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-unbind-key"},{"id":"libtmux:unlink-window","publicId":"libtmux:unlink-window","qualifiedName":"libtmux:unlink-window","namespace":"libtmux","name":"unlink-window","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(unlink-window client link &key kill-if-last cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"link"},{"name":"kill-if-last","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Remove the captured LINK and return a COMMAND-OUTCOME without a value.\nTmux refuses the last reference unless KILL-IF-LAST is explicit; group membership\naffects that check. Removing a last link can destroy its window and session.\nSignals STALE-TARGET or an operational condition. Does not refresh a deleted link."},"source":{"file":"src/placement.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-unlink-window"},{"id":"libtmux:unset-environment","publicId":"libtmux:unset-environment","qualifiedName":"libtmux:unset-environment","namespace":"libtmux","name":"unset-environment","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(unset-environment client name &key scope target cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Delete NAME from one raw tmux environment table and return its outcome.\nSCOPE/TARGET follow SET-ENVIRONMENT. Absence remains tmux's native idempotent\nunset behavior. This is distinct from REMOVE-ENVIRONMENT's tombstone; use\nSET-ENVIRONMENT to store a present value.","body":"See also: `libtmux:remove-environment`, `libtmux:set-environment`.","seeAlso":["libtmux:remove-environment","libtmux:set-environment"]},"source":{"file":"src/configuration-operations.lisp","line":243,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-unset-environment"},{"id":"libtmux:unset-hook","publicId":"libtmux:unset-hook","qualifiedName":"libtmux:unset-hook","namespace":"libtmux","name":"unset-hook","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(unset-hook client name &key scope target (key nil key-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"key","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Remove one registered hook or hook-array entry and return its outcome.\nSCOPE/TARGET and KEY follow SET-HOOK. The ordinary path never uses set-hook -R,\nbut tmux may run a remaining native after-hook as a consequence of this\nset-hook command. The operation does not retry and validates the exact live\ncatalog before payload dispatch.","body":"See also: `libtmux:set-hook`.","seeAlso":["libtmux:set-hook"]},"source":{"file":"src/configuration-operations.lisp","line":217,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-unset-hook"},{"id":"libtmux:unset-option","publicId":"libtmux:unset-option","qualifiedName":"libtmux:unset-option","namespace":"libtmux","name":"unset-option","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(unset-option client name &key scope target (key nil key-p) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"name"},{"name":"scope","optional":true,"keywordOnly":true},{"name":"target","optional":true,"keywordOnly":true},{"name":"key","default":"nil","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Remove one local option or array entry and return its COMMAND-OUTCOME.\nSCOPE/TARGET and KEY follow SET-OPTION. The exact live catalog validates the\nname, table and array shape before payload dispatch. Tmux's native unset/default\nbehavior applies; inherited state is not silently materialized. See SET-OPTION\nfor setting and scope rules. Never retries.","body":"See also: `libtmux:set-option`.","seeAlso":["libtmux:set-option"]},"source":{"file":"src/configuration-operations.lisp","line":189,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-unset-option"},{"id":"libtmux:unsupported-capability","publicId":"libtmux:unsupported-capability","qualifiedName":"libtmux:unsupported-capability","namespace":"libtmux","name":"unsupported-capability","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The live daemon does not support the requested operation contract."},"source":{"file":"src/conditions.lisp","line":47,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-unsupported-capability"},{"id":"libtmux:unsupported-configuration","publicId":"libtmux:unsupported-configuration","qualifiedName":"libtmux:unsupported-configuration","namespace":"libtmux","name":"unsupported-configuration","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Daemon configuration overrides a required built-in command contract."},"source":{"file":"src/conditions.lisp","line":60,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-unsupported-configuration"},{"id":"libtmux:unsupported-platform","publicId":"libtmux:unsupported-platform","qualifiedName":"libtmux:unsupported-platform","namespace":"libtmux","name":"unsupported-platform","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The selected runtime lacks a qualified backend or required facility.\nERROR-FEATURE identifies the requirement; ERROR-CAUSE retains a failed probe\nwhen available. OPEN-CLIENT checks the profile before resolving PROGRAM.","body":"See also: `libtmux:error-cause`, `libtmux:error-feature`, `libtmux:open-client`.","seeAlso":["libtmux:error-cause","libtmux:error-feature","libtmux:open-client"]},"source":{"file":"src/conditions.lisp","line":39,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-unsupported-platform"},{"id":"libtmux:unsupported-tmux","publicId":"libtmux:unsupported-tmux","qualifiedName":"libtmux:unsupported-tmux","namespace":"libtmux","name":"unsupported-tmux","kind":"exception","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"The selected tmux does not meet the supported version floor."},"source":{"file":"src/conditions.lisp","line":45,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-unsupported-tmux"},{"id":"libtmux:wait-for","publicId":"libtmux:wait-for","qualifiedName":"libtmux:wait-for","namespace":"libtmux","name":"wait-for","kind":"function","modifiers":[],"parent":"libtmux:client","signatures":[{"raw":"(wait-for client channel &key (operation :wait) cancel-token timeout output-limit)","params":[{"name":"client"},{"name":"channel"},{"name":"operation","default":":wait","optional":true,"keywordOnly":true},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","optional":true,"keywordOnly":true},{"name":"output-limit","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Wait, signal, lock or unlock the literal CHANNEL; return a COMMAND-OUTCOME.\nOPERATION is :WAIT (default), :SIGNAL, :LOCK or :UNLOCK. CHANNEL is a nonempty\nstring without NUL. This call performs I/O on an existing daemon. :WAIT and\n:LOCK require tmux 3.8, whose client-loss handling removes queued waiters;\nolder daemons signal UNSUPPORTED-CAPABILITY before dispatch. :SIGNAL and\n:UNLOCK support the library's tmux floor.","body":"A signal wakes current waiters or retains one pending wake. Repeated signals\nare not an idempotent latch or a counting semaphore. Locks have no owner and\nsurvive this call and CLOSE-CLIENT within the daemon's lifetime; unlock them\nexplicitly. Continuation does not identify a sender; server shutdown can flush\nwaiting requests. Signals and locks\nshare a channel, so applications should use separate names for those protocols.\n\nOne operation owns CLIENT at a time. Use another client to signal or unlock\na blocked call. TIMEOUT and OUTPUT-LIMIT cover preflight and waiting together.\nCancellation or lost acknowledgement can leave signal consumption or a lock\ngrant uncertain; inspect ERROR-OUTCOME. Never retries or unlocks automatically.\nSignals INVALID-ARGUMENT, COMMAND-FAILED or an operational condition.\n\nSee also: `libtmux:cancel`, `libtmux:close-client`, `libtmux:error-outcome`, `libtmux:outcome-status`, `libtmux:unsupported-capability`.","seeAlso":["libtmux:cancel","libtmux:close-client","libtmux:error-outcome","libtmux:outcome-status","libtmux:unsupported-capability"]},"source":{"file":"src/server-operations.lisp","line":129,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-wait-for"},{"id":"libtmux:width","publicId":"libtmux:width","qualifiedName":"libtmux:width","namespace":"libtmux","name":"width","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(width entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:width\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(width (entity libtmux:pane))","params":[{"name":"entity","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"},{"identity":"[\"libtmux:width\",[],[\"libtmux:window/type\"]]","methodKind":"function","raw":"(width (entity libtmux:window))","params":[{"name":"entity","type":"libtmux:window"}],"label":"Primary method: libtmux:window"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the positive captured width and presence, without I/O."},"source":{"file":"src/model.lisp","line":178,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-width"},{"id":"libtmux:window/function","publicId":"libtmux:window/function","qualifiedName":"libtmux:window","namespace":"libtmux","name":"window","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(window entity)","params":[{"name":"entity"}]},{"identity":"[\"libtmux:window/function\",[],[\"libtmux:window-link\"]]","methodKind":"function","raw":"(window (link libtmux:window-link))","params":[{"name":"link","type":"libtmux:window-link"}],"label":"Primary method: libtmux:window-link"},{"identity":"[\"libtmux:window/function\",[],[\"libtmux:pane\"]]","methodKind":"function","raw":"(window (pane libtmux:pane))","params":[{"name":"pane","type":"libtmux:pane"}],"label":"Primary method: libtmux:pane"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return the locally captured physical window of a pane or link."},"source":{"file":"src/model.lisp","line":61,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-window-function"},{"id":"libtmux:window/type","publicId":"libtmux:window/type","qualifiedName":"libtmux:window","namespace":"libtmux","name":"window","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A physical window shared by zero or more captured links."},"source":{"file":"src/model.lisp","line":26,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:entity"],"slug":"libtmux-window-type"},{"id":"libtmux:window-link","publicId":"libtmux:window-link","qualifiedName":"libtmux:window-link","namespace":"libtmux","name":"window-link","kind":"class","modifiers":["opaque"],"parent":"libtmux","signatures":[],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"A captured session/index locator with its expected physical window ID."},"source":{"file":"src/model.lisp","line":28,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:entity"],"slug":"libtmux-window-link"},{"id":"libtmux:window-links","publicId":"libtmux:window-links","qualifiedName":"libtmux:window-links","namespace":"libtmux","name":"window-links","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(window-links observation)","params":[{"name":"observation"}]},{"identity":"[\"libtmux:window-links\",[],[\"libtmux:session/type\"]]","methodKind":"function","raw":"(window-links (session libtmux:session))","params":[{"name":"session","type":"libtmux:session"}],"label":"Primary method: libtmux:session"},{"identity":"[\"libtmux:window-links\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(window-links (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"},{"identity":"[\"libtmux:window-links\",[],[\"libtmux:window/type\"]]","methodKind":"function","raw":"(window-links (window libtmux:window))","params":[{"name":"window","type":"libtmux:window"}],"label":"Primary method: libtmux:window"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return every captured window link in wire order as a fresh vector. No I/O."},"source":{"file":"src/model.lisp","line":56,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-window-links"},{"id":"libtmux:windows","publicId":"libtmux:windows","qualifiedName":"libtmux:windows","namespace":"libtmux","name":"windows","kind":"function","modifiers":[],"parent":"libtmux","signatures":[{"raw":"(windows observation)","params":[{"name":"observation"}]},{"identity":"[\"libtmux:windows\",[],[\"libtmux:session/type\"]]","methodKind":"function","raw":"(windows (session libtmux:session))","params":[{"name":"session","type":"libtmux:session"}],"label":"Primary method: libtmux:session"},{"identity":"[\"libtmux:windows\",[],[\"libtmux:snapshot\"]]","methodKind":"function","raw":"(windows (snapshot libtmux:snapshot))","params":[{"name":"snapshot","type":"libtmux:snapshot"}],"label":"Primary method: libtmux:snapshot"}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Return a fresh vector of captured windows, without I/O.\nSnapshot windows are physical entities in first-occurrence order. Session\nwindows contain one item per link and preserve repeated physical windows."},"source":{"file":"src/model.lisp","line":49,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-windows"},{"id":"libtmux:with-client","publicId":"libtmux:with-client","qualifiedName":"libtmux:with-client","namespace":"libtmux","name":"with-client","kind":"function","modifiers":["macro"],"parent":"libtmux","signatures":[{"raw":"(with-client (name &rest options) &body body)","params":[{"name":"(name &rest options)"},{"name":"body","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Bind NAME to a client and close the original resource on every exit.\nBody declarations and multiple values are preserved. Cleanup failure signals\nafter normal return; during unwind it is retained in CLIENT-CLEANUP-FAILURES."},"source":{"file":"src/client.lisp","line":406,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-with-client"},{"id":"libtmux:with-daemon","publicId":"libtmux:with-daemon","qualifiedName":"libtmux:with-daemon","namespace":"libtmux","name":"with-daemon","kind":"function","modifiers":["macro"],"parent":"libtmux","signatures":[{"raw":"(with-daemon (name &rest options) &body body)","params":[{"name":"(name &rest options)"},{"name":"body","variadic":"positional"}]}],"product":"core","package":"libtmux","publicOwner":"libtmux","apiScope":"exported","doc":{"summary":"Bind a newly started daemon and stop the original owner on every exit.\nAccepts START-DAEMON keyword options and body declarations. Preserves multiple\nvalues and the primary nonlocal exit. A cleanup failure after normal completion\nsignals; during an existing exit it is retained for explicit inspection/retry.","body":"See also: `libtmux:pending-daemon-cleanups`, `libtmux:start-daemon`, `libtmux:stop-daemon`.","seeAlso":["libtmux:pending-daemon-cleanups","libtmux:start-daemon","libtmux:stop-daemon"]},"source":{"file":"src/daemon.lisp","line":157,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-with-daemon"},{"id":"libtmux.control","publicId":"libtmux.control","qualifiedName":"libtmux.control","namespace":"","name":"libtmux.control","kind":"module","modifiers":[],"signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Persistent native tmux commands and bounded byte events.\nLoad the optional LIBTMUX/CONTROL system. The qualified backend requires the\ncore SBCL/Linux profile and an actual tmux daemon >=3.8. Connections own a\nworker and process independently of their originating LIBTMUX:CLIENT.\nSubmission is nonblocking; waits use condition notifications. One worker\nserializes requests and reads all protocol data. No application callback\nruns in that worker. Commands use tmux argv, not shell source.\nResults and events own their mutable bytes and containers. A completed\ncommand queue does not establish application readiness. No automatic replay\nor reconnect occurs. Explicit RECONNECT renews the original core client's\ngeneration and returns fresh observations.\nSee also: WITH-CONNECTION, WITH-RECONNECTION, SUBMIT-COMMAND, NEXT-EVENT."},"source":{"file":"src/control.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control"},{"id":"libtmux.control:await-request","publicId":"libtmux.control:await-request","qualifiedName":"libtmux.control:await-request","namespace":"libtmux.control","name":"await-request","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(await-request request &key (timeout 30))","params":[{"name":"request"},{"name":"timeout","default":"30","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Wait for owned result/:READY, or return NIL/:TIMEOUT without cancelling.\nTIMEOUT is nonnegative real seconds or NIL for an unbounded wait. Zero polls.\nThe result plist contains :STATUS, :OUTPUT bytes, :WIRE-TAIL bytes,\n:TRUNCATED-P, :EFFECT, :DISPATCHED-P, :REASON and :REPLY-COUNT. Wire tail is\nunterminated protocol data, not decoded output. Positive stdin progress makes\nDISPATCHED-P true conservatively, even for an incomplete line. A dispatched\nfailed/cancelled/timed-out/closed request may have effects; never infer rollback.\nCOMPLETED means the command queue reached its marker, not application readiness.\nOnly framed replies enter OUTPUT; unframed lines remain notification events.\nRepeated awaits return fresh byte storage. No exception hides a terminal result.","body":"See also: `libtmux.control:cancel-request`, `libtmux.control:next-event`, `libtmux.control:submit-command`.","seeAlso":["libtmux.control:cancel-request","libtmux.control:next-event","libtmux.control:submit-command"]},"source":{"file":"src/control.lisp","line":290,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-await-request"},{"id":"libtmux.control:cancel-request","publicId":"libtmux.control:cancel-request","qualifiedName":"libtmux.control:cancel-request","namespace":"libtmux.control","name":"cancel-request","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(cancel-request request)","params":[{"name":"request"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Request cancellation; return true only when this call changes live work.\nQueued work is removed without dispatch or connection closure. Active work\ncloses its connection and retires unissued queued requests. The worker records\nwrite progress before publishing :CANCELLED; await it to inspect that evidence.\nCancellation winning before completion preserves :CANCELLED; an already terminal\nrequest is unchanged. No command is replayed and dispatched effects are not undone.","body":"See also: `libtmux.control:await-request`, `libtmux.control:close-connection`, `libtmux.control:request-state`.","seeAlso":["libtmux.control:await-request","libtmux.control:close-connection","libtmux.control:request-state"]},"source":{"file":"src/control.lisp","line":305,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-cancel-request"},{"id":"libtmux.control:close-connection","publicId":"libtmux.control:close-connection","qualifiedName":"libtmux.control:close-connection","namespace":"libtmux.control","name":"close-connection","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(close-connection connection)","params":[{"name":"connection"}]},{"identity":"[\"libtmux.control:close-connection\",[],[\"libtmux.control:connection\"]]","methodKind":"function","raw":"(close-connection (connection libtmux.control:connection))","params":[{"name":"connection","type":"libtmux.control:connection"}],"label":"Primary method: libtmux.control:connection"}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Close this connection's worker and process; return NIL after cleanup.\nLeave the tmux daemon running. Concurrent closes serialize; repeated successful\nclose is harmless. In-flight results retain partial output and dispatch state.\nCleanup can add time beyond request deadlines. Failure signals\nCONNECTION-CLEANUP-FAILED and retains this resource for explicit retry.","body":"See also: `libtmux.control:connection-cleanup-failures`, `libtmux.control:pending-cleanups`, `libtmux.control:with-connection`.","seeAlso":["libtmux.control:connection-cleanup-failures","libtmux.control:pending-cleanups","libtmux.control:with-connection"]},"source":{"file":"src/control.lisp","line":153,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-close-connection"},{"id":"libtmux.control:connection","publicId":"libtmux.control:connection","qualifiedName":"libtmux.control:connection","namespace":"libtmux.control","name":"connection","kind":"class","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"An owned persistent tmux connection with one protocol worker.\nUse WITH-CONNECTION or CLOSE-CONNECTION to release it. Closing the originating\ncore client does not close this resource. Captured core observations remain\nseparate; raw control commands do not refresh them. RECONNECT requires that\noriginal core client to remain open.","body":"See also: `libtmux.control:connection-state`, `libtmux.control:open-connection`, `libtmux.control:pending-cleanups`, `libtmux.control:reconnect`.","seeAlso":["libtmux.control:connection-state","libtmux.control:open-connection","libtmux.control:pending-cleanups","libtmux.control:reconnect"]},"source":{"file":"src/control.lisp","line":24,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-control-connection"},{"id":"libtmux.control:connection-busy","publicId":"libtmux.control:connection-busy","qualifiedName":"libtmux.control:connection-busy","namespace":"libtmux.control","name":"connection-busy","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"The bounded request queue, including active work, is full.\nSubmission did not dispatch this command. See also: SUBMIT-COMMAND."},"source":{"file":"src/control.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.control:connection-error","libtmux:client-busy"],"slug":"libtmux-control-connection-busy"},{"id":"libtmux.control:connection-cleanup-failed","publicId":"libtmux.control:connection-cleanup-failed","qualifiedName":"libtmux.control:connection-cleanup-failed","namespace":"libtmux.control","name":"connection-cleanup-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Closing failed; retry CLOSE-CONNECTION on ERROR-CONNECTION.\nThe resource remains discoverable through PENDING-CLEANUPS. No mutation is\nreplayed. See also: CONNECTION-CLEANUP-FAILURES, LIBTMUX:ERROR-CAUSE."},"source":{"file":"src/control.lisp","line":55,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.control:connection-error","libtmux:cleanup-failed"],"slug":"libtmux-control-connection-cleanup-failed"},{"id":"libtmux.control:connection-cleanup-failures","publicId":"libtmux.control:connection-cleanup-failures","qualifiedName":"libtmux.control:connection-cleanup-failures","namespace":"libtmux.control","name":"connection-cleanup-failures","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(connection-cleanup-failures connection)","params":[{"name":"connection"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return a fresh vector of the last 16 close failures, newest first. No I/O.\nCondition objects are retained by identity. WITH-CONNECTION records secondary\ncleanup failures while preserving an existing body error or nonlocal exit.","body":"See also: `libtmux.control:close-connection`, `libtmux.control:pending-cleanups`.","seeAlso":["libtmux.control:close-connection","libtmux.control:pending-cleanups"]},"source":{"file":"src/control.lisp","line":124,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-connection-cleanup-failures"},{"id":"libtmux.control:connection-closed","publicId":"libtmux.control:connection-closed","qualifiedName":"libtmux.control:connection-closed","namespace":"libtmux.control","name":"connection-closed","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Submission attempted on a closing or closed connection.","body":"See also: `libtmux.control:connection-state`, `libtmux.control:submit-command`.","seeAlso":["libtmux.control:connection-state","libtmux.control:submit-command"]},"source":{"file":"src/control.lisp","line":60,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.control:connection-error","libtmux:client-closed"],"slug":"libtmux-control-connection-closed"},{"id":"libtmux.control:connection-error","publicId":"libtmux.control:connection-error","qualifiedName":"libtmux.control:connection-error","namespace":"libtmux.control","name":"connection-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"A control failure retaining its connection and original cause.","body":"See also: `libtmux:error-cause`, `libtmux.control:error-connection`.","seeAlso":["libtmux:error-cause","libtmux.control:error-connection"]},"source":{"file":"src/control.lisp","line":44,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-control-connection-error"},{"id":"libtmux.control:connection-failure","publicId":"libtmux.control:connection-failure","qualifiedName":"libtmux.control:connection-failure","namespace":"libtmux.control","name":"connection-failure","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(connection-failure connection)","params":[{"name":"connection"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return the retained worker failure condition, or NIL, without I/O.\nConditions retain identity; byte data comes from NEXT-EVENT or AWAIT-REQUEST.","body":"See also: `libtmux.control:connection-cleanup-failures`, `libtmux.control:connection-state`.","seeAlso":["libtmux.control:connection-cleanup-failures","libtmux.control:connection-state"]},"source":{"file":"src/control.lisp","line":116,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-connection-failure"},{"id":"libtmux.control:connection-stale","publicId":"libtmux.control:connection-stale","qualifiedName":"libtmux.control:connection-stale","namespace":"libtmux.control","name":"connection-stale","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"The original control client generation, daemon or session changed.\nERROR-CONNECTION and LIBTMUX:ERROR-TARGET retain the old public connection.\nAcquire fresh observations and use OPEN-CONNECTION explicitly; stale authority\ncannot authorize reconnection to a replacement target. No request is replayed.","body":"See also: `libtmux:error-cause`, `libtmux.control:reconnect`, `libtmux:stale-target`.","seeAlso":["libtmux:error-cause","libtmux.control:reconnect","libtmux:stale-target"]},"source":{"file":"src/control.lisp","line":68,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.control:connection-error","libtmux:stale-target"],"slug":"libtmux-control-connection-stale"},{"id":"libtmux.control:connection-start-failed","publicId":"libtmux.control:connection-start-failed","qualifiedName":"libtmux.control:connection-start-failed","namespace":"libtmux.control","name":"connection-start-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Startup failed after allocating a connection resource.\nERROR-CONNECTION retains the resource even if cleanup also failed. Core\nargument and unsupported-capability errors before allocation stay core types.","body":"See also: `libtmux.control:close-connection`, `libtmux.control:open-connection`, `libtmux.control:pending-cleanups`.","seeAlso":["libtmux.control:close-connection","libtmux.control:open-connection","libtmux.control:pending-cleanups"]},"source":{"file":"src/control.lisp","line":49,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.control:connection-error","libtmux:command-failed"],"slug":"libtmux-control-connection-start-failed"},{"id":"libtmux.control:connection-state","publicId":"libtmux.control:connection-state","qualifiedName":"libtmux.control:connection-state","namespace":"libtmux.control","name":"connection-state","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(connection-state connection)","params":[{"name":"connection"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return :STARTING, :READY, :CLOSING or :CLOSED without I/O.\nThis is an observation, not a lease for subsequent submission.","body":"See also: `libtmux.control:connection-failure`, `libtmux.control:submit-command`.","seeAlso":["libtmux.control:connection-failure","libtmux.control:submit-command"]},"source":{"file":"src/control.lisp","line":108,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-connection-state"},{"id":"libtmux.control:error-connection","publicId":"libtmux.control:error-connection","qualifiedName":"libtmux.control:error-connection","namespace":"libtmux.control","name":"error-connection","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(error-connection condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.control:error-connection\",[],[\"libtmux.control:connection-error\"]]","methodKind":"function","raw":"(error-connection (condition libtmux.control:connection-error))","params":[{"name":"condition","type":"libtmux.control:connection-error"}],"label":"Primary method: libtmux.control:connection-error"}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return the retained connection implicated in a CONNECTION-ERROR. No I/O.","body":"See also: `libtmux.control:close-connection`, `libtmux:error-cause`.","seeAlso":["libtmux.control:close-connection","libtmux:error-cause"]},"source":{"file":"src/control.lisp","line":40,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-error-connection"},{"id":"libtmux.control:next-event","publicId":"libtmux.control:next-event","qualifiedName":"libtmux.control:next-event","namespace":"libtmux.control","name":"next-event","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(next-event connection &key (timeout 30))","params":[{"name":"connection"},{"name":"timeout","default":"30","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Wait for an owned event/:READY or NIL/:TIMEOUT on this connection.\nTIMEOUT is nonnegative real seconds or NIL; zero polls. :OUTPUT has :PANE,\n:AGE, :EXTENDED-P and :DATA octets, preserving invalid UTF-8. :NOTIFICATION\ncontains a raw line without LF in :DATA, preserving unknown labels and bytes.\nNative %exit is a notification; transport end is reported independently.\nUnsolicited :REPLY also has :FAILED-P.\n:GAP reports :EVENTS and :BYTES dropped from the bounded queue. An oversized\nnew event reports loss without discarding retained smaller events.\nLocal loss does not pause tmux. Native pause/continue notices remain raw\nnotifications and are distinct from local :GAP delivery.\n:END follows retained events, with :REASON, :EXIT-CODE, :DIAGNOSTICS bytes,\n:WIRE-TAIL bytes and :CAUSE. After end, repeated reads return end immediately.\nCauses retain condition identity. No application callback executes in the reader.","body":"See also: `libtmux.control:await-request`, `libtmux.control:connection-failure`, `libtmux.control:open-connection`.","seeAlso":["libtmux.control:await-request","libtmux.control:connection-failure","libtmux.control:open-connection"]},"source":{"file":"src/control.lisp","line":316,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-next-event"},{"id":"libtmux.control:open-connection","publicId":"libtmux.control:open-connection","qualifiedName":"libtmux.control:open-connection","namespace":"libtmux.control","name":"open-connection","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(open-connection client session &key (timeout 30) (request-limit 16) (event-limit 256) (event-byte-limit 4194304) (reply-byte-limit 1048576))","params":[{"name":"client"},{"name":"session"},{"name":"timeout","default":"30","optional":true,"keywordOnly":true},{"name":"request-limit","default":"16","optional":true,"keywordOnly":true},{"name":"event-limit","default":"256","optional":true,"keywordOnly":true},{"name":"event-byte-limit","default":"4194304","optional":true,"keywordOnly":true},{"name":"reply-byte-limit","default":"1048576","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Attach a separate owned control connection to a captured SESSION.\nCLIENT supplies the core endpoint and authority. Startup preflights the target\nand requires the live daemon to be >=3.8. TIMEOUT bounds startup admission and\nsupervised execution; platform preparation and cleanup add caller wall time.\nREQUEST-LIMIT includes active and queued work. Events drop oldest entries at\nEVENT-LIMIT or EVENT-BYTE-LIMIT and report loss. REPLY-BYTE-LIMIT bounds each\nrequest's retained output; overflow closes the connection with a cause.\nThis call blocks until ready or failed. All limits must be positive integers\nexcept the nonnegative real TIMEOUT. No daemon is started or terminated.\nAttachment preserves the stored session environment; native attach hooks and\nserver lifecycle policies still apply. Readiness checks the observed daemon\nwitness after attachment, so a refused candidate may have appeared briefly.","body":"See also: `libtmux.control:close-connection`, `libtmux.control:next-event`, `libtmux.control:reconnect`, `libtmux.control:submit-command`, `libtmux.control:with-connection`.","seeAlso":["libtmux.control:close-connection","libtmux.control:next-event","libtmux.control:reconnect","libtmux.control:submit-command","libtmux.control:with-connection"]},"source":{"file":"src/control.lisp","line":82,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-open-connection"},{"id":"libtmux.control:pending-cleanups","publicId":"libtmux.control:pending-cleanups","qualifiedName":"libtmux.control:pending-cleanups","namespace":"libtmux.control","name":"pending-cleanups","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(pending-cleanups)","params":[]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return a fresh vector of connections retaining failed cleanup work. No I/O.\nRetry CLOSE-CONNECTION explicitly. Successful close removes the entry.","body":"See also: `libtmux.control:connection-cleanup-failed`, `libtmux.control:error-connection`.","seeAlso":["libtmux.control:connection-cleanup-failed","libtmux.control:error-connection"]},"source":{"file":"src/control.lisp","line":133,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-pending-cleanups"},{"id":"libtmux.control:reconnect","publicId":"libtmux.control:reconnect","qualifiedName":"libtmux.control:reconnect","namespace":"libtmux.control","name":"reconnect","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(reconnect connection &key (timeout 30) (request-limit nil request-limit-p) (event-limit nil event-limit-p) (event-byte-limit nil event-byte-limit-p) (reply-byte-limit nil reply-byte-limit-p))","params":[{"name":"connection"},{"name":"timeout","default":"30","optional":true,"keywordOnly":true},{"name":"request-limit","default":"nil","optional":true,"keywordOnly":true},{"name":"event-limit","default":"nil","optional":true,"keywordOnly":true},{"name":"event-byte-limit","default":"nil","optional":true,"keywordOnly":true},{"name":"reply-byte-limit","default":"nil","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Retire CONNECTION and return a fresh connection and complete snapshot.\nUse the original core client and exact session ID. The client must remain open\nin the original generation. Explicitly supplied limits must be positive integers;\nomitted queue/reply limits inherit the old connection. TIMEOUT is nonnegative\nreal seconds shared across preflight, retirement, recapture and startup;\npreparation and cleanup can add wall time. Capture output shares the core\nclient's output budget. Concurrent core work signals LIBTMUX:CLIENT-BUSY.\nPreflight refusal leaves a live old connection alone. After successful close,\nrenew the core generation even if later work fails. Every earlier core capture\nfrom that client becomes stale for operations, while local data remains usable.\nThe returned snapshot precedes new attachment; it does not include that new\nfrontend. A closing/closed old resource remains reconnectable with valid origin.\nOld requests/results/events stay on the retired resource. Pending work is closed,\nnever replayed; dispatched effects can remain uncertain. Other separately owned\ncontrol resources remain independent. No event continuity or replay is implied.\nThe CLOSE-CONNECTION generic runs on the caller thread; its failures are retained.\nCONNECTION-STALE refuses changed origin/session/daemon. Old cleanup failures\nretain the old resource; startup failures retain the new candidate through\nCONNECTION-START-FAILED. After failed cutover, acquire/select and open anew.\nUse WITH-RECONNECTION or close the returned resource explicitly.","body":"See also: `libtmux.control:await-request`, `libtmux.control:close-connection`, `libtmux.control:connection-stale`, `libtmux.control:with-reconnection`.","seeAlso":["libtmux.control:await-request","libtmux.control:close-connection","libtmux.control:connection-stale","libtmux.control:with-reconnection"]},"source":{"file":"src/control.lisp","line":170,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-reconnect"},{"id":"libtmux.control:request","publicId":"libtmux.control:request","qualifiedName":"libtmux.control:request","namespace":"libtmux.control","name":"request","kind":"class","modifiers":["opaque"],"parent":"libtmux.control","signatures":[],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"One queued command and its retained dispatch/result evidence.\nKeep this handle to await or cancel work. A wait timeout leaves it live.","body":"See also: `libtmux.control:await-request`, `libtmux.control:cancel-request`, `libtmux.control:submit-command`.","seeAlso":["libtmux.control:await-request","libtmux.control:cancel-request","libtmux.control:submit-command"]},"source":{"file":"src/control.lisp","line":34,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-control-request"},{"id":"libtmux.control:request-state","publicId":"libtmux.control:request-state","qualifiedName":"libtmux.control:request-state","namespace":"libtmux.control","name":"request-state","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(request-state request)","params":[{"name":"request"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Return retained request state without I/O.\nStates are :QUEUED, :WRITING, :RUNNING, :COMPLETED, :FAILED, :TIMED-OUT,\n:CANCELLED and :CLOSED. A terminal result is never replaced by cancellation.","body":"See also: `libtmux.control:await-request`, `libtmux.control:cancel-request`.","seeAlso":["libtmux.control:await-request","libtmux.control:cancel-request"]},"source":{"file":"src/control.lisp","line":279,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-request-state"},{"id":"libtmux.control:submit-command","publicId":"libtmux.control:submit-command","qualifiedName":"libtmux.control:submit-command","namespace":"libtmux.control","name":"submit-command","kind":"function","modifiers":[],"parent":"libtmux.control","signatures":[{"raw":"(submit-command connection argv &key effect (timeout 30))","params":[{"name":"connection"},{"name":"argv"},{"name":"effect","optional":true,"keywordOnly":true},{"name":"timeout","default":"30","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Queue copied tmux ARGV and return a REQUEST without waiting for its reply.\nEFFECT must explicitly be :READ or :MUTATION; it records caller intent, not a\ncommand restriction. TIMEOUT is a nonnegative real deadline budget starting at\nsubmission, including queue time. A zero budget can expire before dispatch.\nCommands execute serially. Full queues signal CONNECTION-BUSY; closing ones\nsignal CONNECTION-CLOSED. Use argv for tmux syntax, not shell interpolation.\nThis raw path does not validate or refresh captured operational targets.","body":"See also: `libtmux.control:await-request`, `libtmux.control:cancel-request`, `libtmux.control:request-state`.","seeAlso":["libtmux.control:await-request","libtmux.control:cancel-request","libtmux.control:request-state"]},"source":{"file":"src/control.lisp","line":261,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-submit-command"},{"id":"libtmux.control:with-connection","publicId":"libtmux.control:with-connection","qualifiedName":"libtmux.control:with-connection","namespace":"libtmux.control","name":"with-connection","kind":"function","modifiers":["macro"],"parent":"libtmux.control","signatures":[{"raw":"(with-connection (name client session &rest options) &body body)","params":[{"name":"(name client session &rest options)"},{"name":"body","variadic":"positional"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Bind NAME to a control connection and close the original resource on exit.\nEvaluate CLIENT, SESSION and OPEN-CONNECTION options once. BODY accepts\ndeclarations and returns all its values. Rebinding NAME cannot redirect cleanup.\nAfter normal return, propagate cleanup failure; during an error or nonlocal\nexit, preserve that exit and record cleanup failure on the connection.","body":"See also: `libtmux.control:close-connection`, `libtmux.control:connection-cleanup-failures`, `libtmux.control:open-connection`.","seeAlso":["libtmux.control:close-connection","libtmux.control:connection-cleanup-failures","libtmux.control:open-connection"]},"source":{"file":"src/control.lisp","line":236,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-with-connection"},{"id":"libtmux.control:with-reconnection","publicId":"libtmux.control:with-reconnection","qualifiedName":"libtmux.control:with-reconnection","namespace":"libtmux.control","name":"with-reconnection","kind":"function","modifiers":["macro"],"parent":"libtmux.control","signatures":[{"raw":"(with-reconnection (name snapshot previous &rest options) &body body)","params":[{"name":"(name snapshot previous &rest options)"},{"name":"body","variadic":"positional"}]}],"product":"core","package":"libtmux/control","publicOwner":"libtmux.control","apiScope":"exported","doc":{"summary":"Bind a fresh NAME and SNAPSHOT from explicit RECONNECT; close NAME on exit.\nEvaluate PREVIOUS and options once. BODY permits declarations and returns all\nvalues. Rebinding either visible name cannot redirect cleanup. Preserve primary\nerrors/nonlocal exits and record secondary cleanup errors on the new connection.\nThe previous resource retains its own old results and events.","body":"See also: `libtmux.control:connection-cleanup-failures`, `libtmux.control:reconnect`, `libtmux.control:with-connection`.","seeAlso":["libtmux.control:connection-cleanup-failures","libtmux.control:reconnect","libtmux.control:with-connection"]},"source":{"file":"src/control.lisp","line":247,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-control-with-reconnection"},{"id":"libtmux.json","publicId":"libtmux.json","qualifiedName":"libtmux.json","namespace":"","name":"libtmux.json","kind":"module","modifiers":[],"signatures":[],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"Bounded JSON interchange for native libtmux query filters.\nREAD-FILTER accepts a complete JSON string in schema libtmux.lisp.filter/1.\nIt resolves only registered names, rejects duplicate or unknown members, and\nnever evaluates input as Lisp code. WRITE-FILTER serializes only compiled\ndeclarative filters; native function predicates are not query documents."},"source":{"file":"src/json.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-json"},{"id":"libtmux.json:document-limit","publicId":"libtmux.json:document-limit","qualifiedName":"libtmux.json:document-limit","namespace":"libtmux.json","name":"document-limit","kind":"function","modifiers":[],"parent":"libtmux.json","signatures":[{"raw":"(document-limit condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.json:document-limit\",[],[\"libtmux.json:invalid-filter-document\"]]","methodKind":"function","raw":"(document-limit (condition libtmux.json:invalid-filter-document))","params":[{"name":"condition","type":"libtmux.json:invalid-filter-document"}],"label":"Primary method: libtmux.json:invalid-filter-document"}],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"Return the exhausted document limit name, or NIL."},"source":{"file":"src/json.lisp","line":18,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-json-document-limit"},{"id":"libtmux.json:document-path","publicId":"libtmux.json:document-path","qualifiedName":"libtmux.json:document-path","namespace":"libtmux.json","name":"document-path","kind":"function","modifiers":[],"parent":"libtmux.json","signatures":[{"raw":"(document-path condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.json:document-path\",[],[\"libtmux.json:invalid-filter-document\"]]","methodKind":"function","raw":"(document-path (condition libtmux.json:invalid-filter-document))","params":[{"name":"condition","type":"libtmux.json:invalid-filter-document"}],"label":"Primary method: libtmux.json:invalid-filter-document"}],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"Return a fresh vector locating a filter-document error."},"source":{"file":"src/json.lisp","line":15,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-json-document-path"},{"id":"libtmux.json:filter-document-limit-exceeded","publicId":"libtmux.json:filter-document-limit-exceeded","qualifiedName":"libtmux.json:filter-document-limit-exceeded","namespace":"libtmux.json","name":"filter-document-limit-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux.json","signatures":[],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"A filter document exceeds a configured parsing or query-data limit."},"source":{"file":"src/json.lisp","line":27,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.json:invalid-filter-document"],"slug":"libtmux-json-filter-document-limit-exceeded"},{"id":"libtmux.json:invalid-filter-document","publicId":"libtmux.json:invalid-filter-document","qualifiedName":"libtmux.json:invalid-filter-document","namespace":"libtmux.json","name":"invalid-filter-document","kind":"exception","modifiers":["opaque"],"parent":"libtmux.json","signatures":[],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"A filter document is malformed, unknown, or semantically invalid."},"source":{"file":"src/json.lisp","line":21,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-json-invalid-filter-document"},{"id":"libtmux.json:read-filter","publicId":"libtmux.json:read-filter","qualifiedName":"libtmux.json:read-filter","namespace":"libtmux.json","name":"read-filter","kind":"function","modifiers":[],"parent":"libtmux.json","signatures":[{"raw":"(read-filter source &key (allow-regex nil) (max-input-bytes +default-max-input-bytes+) (max-depth +default-max-depth+) (max-nodes +default-max-nodes+) (max-string-length +default-max-string-length+) (max-membership +default-max-membership+) (max-integer-digits +default-max-integer-digits+))","params":[{"name":"source"},{"name":"allow-regex","default":"nil","optional":true,"keywordOnly":true},{"name":"max-input-bytes","default":"+default-max-input-bytes+","optional":true,"keywordOnly":true},{"name":"max-depth","default":"+default-max-depth+","optional":true,"keywordOnly":true},{"name":"max-nodes","default":"+default-max-nodes+","optional":true,"keywordOnly":true},{"name":"max-string-length","default":"+default-max-string-length+","optional":true,"keywordOnly":true},{"name":"max-membership","default":"+default-max-membership+","optional":true,"keywordOnly":true},{"name":"max-integer-digits","default":"+default-max-integer-digits+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"Read one bounded libtmux.lisp.filter/1 JSON string into a compiled filter.\nExternal names resolve through closed registries and are never interned. Regex\nnodes are rejected unless ALLOW-REGEX is true and libtmux/regex is loaded.\nParser limits bound UTF-8 input bytes, nesting, JSON nodes, strings, membership\narrays and integer-token digits. Decimal and exponent number syntax is rejected\nbefore conversion. Parser limits do not interrupt CL-PPCRE execution."},"source":{"file":"src/json.lisp","line":399,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-json-read-filter"},{"id":"libtmux.json:write-filter","publicId":"libtmux.json:write-filter","qualifiedName":"libtmux.json:write-filter","namespace":"libtmux.json","name":"write-filter","kind":"function","modifiers":[],"parent":"libtmux.json","signatures":[{"raw":"(write-filter filter &key stream (pretty nil))","params":[{"name":"filter"},{"name":"stream","optional":true,"keywordOnly":true},{"name":"pretty","default":"nil","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/json","publicOwner":"libtmux.json","apiScope":"exported","doc":{"summary":"Serialize a COMPILED-FILTER as one libtmux.lisp.filter/1 JSON document.\nReturn a fresh string when STREAM is NIL; otherwise write to the supplied open\noutput character stream and return NIL without closing it. Pathnames and binary\nstreams are rejected. The wire contract is native to this port and does not\nimply cross-port regex or query equivalence."},"source":{"file":"src/json.lisp","line":527,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-json-write-filter"},{"id":"libtmux.query","publicId":"libtmux.query","qualifiedName":"libtmux.query","namespace":"","name":"libtmux.query","kind":"module","modifiers":[],"signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Validated native queries over finite captured libtmux observations.\nLoading this package adds no transport dependency and performs no tmux I/O."},"source":{"file":"src/query.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query"},{"id":"libtmux.query:ambiguous-match","publicId":"libtmux.query:ambiguous-match","qualifiedName":"libtmux.query:ambiguous-match","namespace":"libtmux.query","name":"ambiguous-match","kind":"exception","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Strict selection received more than one item."},"source":{"file":"src/query.lisp","line":64,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-query-ambiguous-match"},{"id":"libtmux.query:compile-filter","publicId":"libtmux.query:compile-filter","qualifiedName":"libtmux.query:compile-filter","namespace":"libtmux.query","name":"compile-filter","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(compile-filter model form &key (max-depth +default-max-depth+) (max-input-visits +default-max-input-visits+) (max-membership +default-max-membership+) (max-string-length +default-max-string-length+) (max-retained-characters +default-max-retained-characters+) (max-execution-visits +default-max-execution-visits+))","params":[{"name":"model"},{"name":"form"},{"name":"max-depth","default":"+default-max-depth+","optional":true,"keywordOnly":true},{"name":"max-input-visits","default":"+default-max-input-visits+","optional":true,"keywordOnly":true},{"name":"max-membership","default":"+default-max-membership+","optional":true,"keywordOnly":true},{"name":"max-string-length","default":"+default-max-string-length+","optional":true,"keywordOnly":true},{"name":"max-retained-characters","default":"+default-max-retained-characters+","optional":true,"keywordOnly":true},{"name":"max-execution-visits","default":"+default-max-execution-visits+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Compile FORM for captured MODEL into an owned local filter.\nScalar and registered relation operators perform no I/O and never evaluate\nFORM as Lisp code. Regex operators require the optional regex system.\nKeyword limits bound container depth, input visits, membership size, copied\ncharacter counts and later predicate execution. Limit failures signal\nQUERY-LIMIT-EXCEEDED; malformed or mistyped forms signal INVALID-FILTER."},"source":{"file":"src/query.lisp","line":535,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-compile-filter"},{"id":"libtmux.query:compiled-filter","publicId":"libtmux.query:compiled-filter","qualifiedName":"libtmux.query:compiled-filter","namespace":"libtmux.query","name":"compiled-filter","kind":"class","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"An owned validated expression and reusable local evaluator."},"source":{"file":"src/query.lisp","line":99,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-query-compiled-filter"},{"id":"libtmux.query:count-exact-p","publicId":"libtmux.query:count-exact-p","qualifiedName":"libtmux.query:count-exact-p","namespace":"libtmux.query","name":"count-exact-p","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(count-exact-p condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:count-exact-p\",[],[\"libtmux.query:ambiguous-match\"]]","methodKind":"function","raw":"(count-exact-p (condition libtmux.query:ambiguous-match))","params":[{"name":"condition","type":"libtmux.query:ambiguous-match"}],"label":"Primary method: libtmux.query:ambiguous-match"},{"identity":"[\"libtmux.query:count-exact-p\",[],[\"libtmux.query:no-match\"]]","methodKind":"function","raw":"(count-exact-p (condition libtmux.query:no-match))","params":[{"name":"condition","type":"libtmux.query:no-match"}],"label":"Primary method: libtmux.query:no-match"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return true when MATCH-COUNT is exact, false when it is a lower bound."},"source":{"file":"src/query.lisp","line":27,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-count-exact-p"},{"id":"libtmux.query:error-expected","publicId":"libtmux.query:error-expected","qualifiedName":"libtmux.query:error-expected","namespace":"libtmux.query","name":"error-expected","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(error-expected condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:error-expected\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-expected (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return an owned bounded description of the expected query shape or type."},"source":{"file":"src/query.lisp","line":21,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-error-expected"},{"id":"libtmux.query:error-operator","publicId":"libtmux.query:error-operator","qualifiedName":"libtmux.query:error-operator","namespace":"libtmux.query","name":"error-operator","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(error-operator condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:error-operator\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-operator (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a bounded invalid-operator summary, or NIL."},"source":{"file":"src/query.lisp","line":19,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-error-operator"},{"id":"libtmux.query:error-path","publicId":"libtmux.query:error-path","qualifiedName":"libtmux.query:error-path","namespace":"libtmux.query","name":"error-path","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(error-path condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:error-path\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-path (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh bounded vector locating the invalid query input."},"source":{"file":"src/query.lisp","line":17,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-error-path"},{"id":"libtmux.query:error-received","publicId":"libtmux.query:error-received","qualifiedName":"libtmux.query:error-received","namespace":"libtmux.query","name":"error-received","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(error-received condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:error-received\",[],[\"libtmux.query:invalid-filter\"]]","methodKind":"function","raw":"(error-received (condition libtmux.query:invalid-filter))","params":[{"name":"condition","type":"libtmux.query:invalid-filter"}],"label":"Primary method: libtmux.query:invalid-filter"},{"identity":"[\"libtmux.query:error-received\",[],[\"libtmux.query:invalid-query-target\"]]","methodKind":"function","raw":"(error-received (condition libtmux.query:invalid-query-target))","params":[{"name":"condition","type":"libtmux.query:invalid-query-target"}],"label":"Primary method: libtmux.query:invalid-query-target"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a safe bounded description of the received query value or target."},"source":{"file":"src/query.lisp","line":23,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-error-received"},{"id":"libtmux.query:explain","publicId":"libtmux.query:explain","qualifiedName":"libtmux.query:explain","namespace":"libtmux.query","name":"explain","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(explain filter)","params":[{"name":"filter"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return fresh execution metadata for FILTER. Query execution is local and acquires nothing."},"source":{"file":"src/query.lisp","line":631,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-explain"},{"id":"libtmux.query:expression","publicId":"libtmux.query:expression","qualifiedName":"libtmux.query:expression","namespace":"libtmux.query","name":"expression","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(expression filter)","params":[{"name":"filter"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh ordinary-data copy of FILTER's canonical native expression."},"source":{"file":"src/query.lisp","line":590,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-expression"},{"id":"libtmux.query:fields","publicId":"libtmux.query:fields","qualifiedName":"libtmux.query:fields","namespace":"libtmux.query","name":"fields","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(fields model)","params":[{"name":"model"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return fresh field metadata for one captured query MODEL in key order.\nMODEL is one of :SESSION, :WINDOW, :PANE, :WINDOW-LINK or :CLIENT. Wire bounds\ndescribe capture decoding and do not restrict native query integer operands."},"source":{"file":"src/query.lisp","line":620,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-fields"},{"id":"libtmux.query:from","publicId":"libtmux.query:from","qualifiedName":"libtmux.query:from","namespace":"libtmux.query","name":"from","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(from values &key model (max-items +default-max-selection-items+))","params":[{"name":"values"},{"name":"model","optional":true,"keywordOnly":true},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Copy finite VALUES into an eager local QUERY-SET.\nVALUES is a proper list, non-string vector or another query set. MODEL may name\none registered captured entity model; omit it for unrestricted ordinary data."},"source":{"file":"src/query.lisp","line":712,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-from"},{"id":"libtmux.query:invalid-filter","publicId":"libtmux.query:invalid-filter","qualifiedName":"libtmux.query:invalid-filter","namespace":"libtmux.query","name":"invalid-filter","kind":"exception","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"A declarative filter is malformed, mistyped or exceeds a compile limit."},"source":{"file":"src/query.lisp","line":30,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-query-invalid-filter"},{"id":"libtmux.query:invalid-query-target","publicId":"libtmux.query:invalid-query-target","qualifiedName":"libtmux.query:invalid-query-target","namespace":"libtmux.query","name":"invalid-query-target","kind":"exception","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"A compiled filter received an object outside its captured root model."},"source":{"file":"src/query.lisp","line":39,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-query-invalid-query-target"},{"id":"libtmux.query:items","publicId":"libtmux.query:items","qualifiedName":"libtmux.query:items","namespace":"libtmux.query","name":"items","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(items set)","params":[{"name":"set"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh simple vector containing SET's selected items in order."},"source":{"file":"src/query.lisp","line":707,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-items"},{"id":"libtmux.query:match-count","publicId":"libtmux.query:match-count","qualifiedName":"libtmux.query:match-count","namespace":"libtmux.query","name":"match-count","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(match-count condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.query:match-count\",[],[\"libtmux.query:ambiguous-match\"]]","methodKind":"function","raw":"(match-count (condition libtmux.query:ambiguous-match))","params":[{"name":"condition","type":"libtmux.query:ambiguous-match"}],"label":"Primary method: libtmux.query:ambiguous-match"},{"identity":"[\"libtmux.query:match-count\",[],[\"libtmux.query:no-match\"]]","methodKind":"function","raw":"(match-count (condition libtmux.query:no-match))","params":[{"name":"condition","type":"libtmux.query:no-match"}],"label":"Primary method: libtmux.query:no-match"}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return the known cardinality associated with a selection condition."},"source":{"file":"src/query.lisp","line":25,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-match-count"},{"id":"libtmux.query:match-sample","publicId":"libtmux.query:match-sample","qualifiedName":"libtmux.query:match-sample","namespace":"libtmux.query","name":"match-sample","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(match-sample condition)","params":[{"name":"condition"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh bounded vector of safe selected-item summaries."},"source":{"file":"src/query.lisp","line":70,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-match-sample"},{"id":"libtmux.query:matching","publicId":"libtmux.query:matching","qualifiedName":"libtmux.query:matching","namespace":"libtmux.query","name":"matching","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(matching filter values &key (max-items +default-max-selection-items+) max-execution-visits)","params":[{"name":"filter"},{"name":"values"},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true},{"name":"max-execution-visits","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh simple vector of VALUES accepted by FILTER.\nVALUES must be a finite list or non-string vector. The result preserves order,\nmultiplicity and the original captured handles. MAX-ITEMS bounds validation.\nOne execution budget is shared across the entire traversal; no I/O occurs."},"source":{"file":"src/query.lisp","line":807,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-matching"},{"id":"libtmux.query:no-match","publicId":"libtmux.query:no-match","qualifiedName":"libtmux.query:no-match","namespace":"libtmux.query","name":"no-match","kind":"exception","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Strict selection received no items."},"source":{"file":"src/query.lisp","line":58,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-query-no-match"},{"id":"libtmux.query:one","publicId":"libtmux.query:one","qualifiedName":"libtmux.query:one","namespace":"libtmux.query","name":"one","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(one values &key (max-items +default-max-selection-items+))","params":[{"name":"values"},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return the only item in finite VALUES.\nSignal NO-MATCH for zero items or AMBIGUOUS-MATCH for more than one. The full\nbounded container is validated before a candidate is returned. NIL is an item."},"source":{"file":"src/query.lisp","line":843,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-one"},{"id":"libtmux.query:one-or-none","publicId":"libtmux.query:one-or-none","qualifiedName":"libtmux.query:one-or-none","namespace":"libtmux.query","name":"one-or-none","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(one-or-none values &key (max-items +default-max-selection-items+))","params":[{"name":"values"},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return the only item and T, or NIL,NIL when finite VALUES is empty.\nSignal AMBIGUOUS-MATCH for more than one item after validating the full bounded\ncontainer. A singleton containing NIL returns NIL,T."},"source":{"file":"src/query.lisp","line":857,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-one-or-none"},{"id":"libtmux.query:order-by","publicId":"libtmux.query:order-by","qualifiedName":"libtmux.query:order-by","namespace":"libtmux.query","name":"order-by","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(order-by set predicate &key (key (function identity)) (max-items +default-max-selection-items+))","params":[{"name":"set"},{"name":"predicate"},{"name":"key","default":"(function identity)","optional":true,"keywordOnly":true},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a new query set stably ordered by native PREDICATE and KEY.\nPREDICATE and KEY are function objects or symbols naming global functions,\neach resolved once before sorting. Invalid designators signal\nLIBTMUX:INVALID-ARGUMENT. Their calls follow the STABLE-SORT callback contract.\nSorting is eager and local, mutating only a private simple-vector copy. SET\nremains unchanged; items are shared and equal keys retain input order.","body":"See also: `libtmux.query:from`, `libtmux.query:items`, `libtmux.query:where-if`.","seeAlso":["libtmux.query:from","libtmux.query:items","libtmux.query:where-if"]},"source":{"file":"src/query.lisp","line":790,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-order-by"},{"id":"libtmux.query:predicate","publicId":"libtmux.query:predicate","qualifiedName":"libtmux.query:predicate","namespace":"libtmux.query","name":"predicate","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(predicate filter)","params":[{"name":"filter"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a genuine one-argument function that evaluates FILTER locally.\nEach invocation receives a fresh execution budget and performs no tmux I/O."},"source":{"file":"src/query.lisp","line":651,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-predicate"},{"id":"libtmux.query:query-limit-exceeded","publicId":"libtmux.query:query-limit-exceeded","qualifiedName":"libtmux.query:query-limit-exceeded","namespace":"libtmux.query","name":"query-limit-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"A bounded query compilation, execution or selection exhausted its budget."},"source":{"file":"src/query.lisp","line":55,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.query:invalid-filter"],"slug":"libtmux-query-query-limit-exceeded"},{"id":"libtmux.query:query-set","publicId":"libtmux.query:query-set","qualifiedName":"libtmux.query:query-set","namespace":"libtmux.query","name":"query-set","kind":"class","modifiers":["opaque"],"parent":"libtmux.query","signatures":[],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"An eager owned local selection with optional captured-model metadata."},"source":{"file":"src/query.lisp","line":110,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-query-query-set"},{"id":"libtmux.query:query-set-model","publicId":"libtmux.query:query-set-model","qualifiedName":"libtmux.query:query-set-model","namespace":"libtmux.query","name":"query-set-model","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(query-set-model set)","params":[{"name":"set"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return SET's declared captured model, or NIL for untyped ordinary data."},"source":{"file":"src/query.lisp","line":702,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-query-set-model"},{"id":"libtmux.query:required-fields","publicId":"libtmux.query:required-fields","qualifiedName":"libtmux.query:required-fields","namespace":"libtmux.query","name":"required-fields","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(required-fields filter)","params":[{"name":"filter"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh vector of scalar fields in first-occurrence order."},"source":{"file":"src/query.lisp","line":598,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-required-fields"},{"id":"libtmux.query:required-relations","publicId":"libtmux.query:required-relations","qualifiedName":"libtmux.query:required-relations","namespace":"libtmux.query","name":"required-relations","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(required-relations filter)","params":[{"name":"filter"}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a fresh vector of relation fields in first-occurrence order."},"source":{"file":"src/query.lisp","line":603,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-required-relations"},{"id":"libtmux.query:where","publicId":"libtmux.query:where","qualifiedName":"libtmux.query:where","namespace":"libtmux.query","name":"where","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(where set filter &key (max-items +default-max-selection-items+) max-execution-visits)","params":[{"name":"set"},{"name":"filter"},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true},{"name":"max-execution-visits","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a new query set containing SET items accepted by compiled FILTER.\nEvaluation is eager and local. FILTER supplies the result model; conflicting\ndeclared model metadata signals INVALID-QUERY-TARGET before evaluation."},"source":{"file":"src/query.lisp","line":739,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-where"},{"id":"libtmux.query:where-if","publicId":"libtmux.query:where-if","qualifiedName":"libtmux.query:where-if","namespace":"libtmux.query","name":"where-if","kind":"function","modifiers":[],"parent":"libtmux.query","signatures":[{"raw":"(where-if set function &key (max-items +default-max-selection-items+))","params":[{"name":"set"},{"name":"function"},{"name":"max-items","default":"+default-max-selection-items+","optional":true,"keywordOnly":true}]}],"product":"core","package":"libtmux/query","publicOwner":"libtmux.query","apiScope":"exported","doc":{"summary":"Return a new query set selected by native FUNCTION in input order.\nFUNCTION is a function object or a symbol naming a global function, resolved\nonce before traversal. Invalid designators signal LIBTMUX:INVALID-ARGUMENT.\nOn normal completion it has been called exactly once per item, eagerly and\nlocally. Its effects and call order are never optimized as declarative data.\nThe result owns its container and shares the selected items with SET.","body":"See also: `libtmux.query:from`, `libtmux.query:items`, `libtmux.query:order-by`, `libtmux.query:where`.","seeAlso":["libtmux.query:from","libtmux.query:items","libtmux.query:order-by","libtmux.query:where"]},"source":{"file":"src/query.lisp","line":770,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-query-where-if"},{"id":"libtmux.workspace","publicId":"libtmux.workspace","qualifiedName":"libtmux.workspace","namespace":"","name":"libtmux.workspace","kind":"module","modifiers":[],"signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Owned Common Lisp workspace descriptions and explicit tmux application.\nMAKE-WORKSPACE validates inert native data without evaluation. PLAN-WORKSPACE\nis local and pure; APPLY-WORKSPACE is the explicit external-operation boundary.\nWorkspace objects, plans, steps, results, and their readers return defensive\ndata. Conflicts fail before mutation, and partial application retains evidence."},"source":{"file":"src/workspace.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace"},{"id":"libtmux.workspace:apply-workspace","publicId":"libtmux.workspace:apply-workspace","qualifiedName":"libtmux.workspace:apply-workspace","namespace":"libtmux.workspace","name":"apply-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(apply-workspace client workspace &key cancel-token (timeout nil timeout-p) (output-limit nil output-limit-p) (total-timeout nil total-timeout-p) reconcile)","params":[{"name":"client"},{"name":"workspace"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","default":"nil","optional":true,"keywordOnly":true},{"name":"output-limit","default":"nil","optional":true,"keywordOnly":true},{"name":"total-timeout","default":"nil","optional":true,"keywordOnly":true},{"name":"reconcile","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Apply WORKSPACE through explicit CLIENT and return a WORKSPACE-RESULT.\nWorkspace/1 retains topology-only creation/reuse. Workspace/2 freshly acquires\nowned state and replans; a preview is never mutation authority. By default\nowned declaration changes or drift are refused; :RECONCILE permits only the\nqualified additive, rename, metadata and layout changes. It never adopts an\nunowned session or repeats an uncertain mutation. RECONCILE requires schema /2.","body":"TIMEOUT and OUTPUT-LIMIT apply per core operation; CANCEL-TOKEN is shared.\nTOTAL-TIMEOUT, when supplied, is a nonnegative finite number of seconds shared\nacross acquisition, planning and application. It controls admission, including\nno-op planning, and is not a hard caller wall-time bound. Synchronous setup and\ncleanup can extend an admitted call. Invalid arguments fail before application.\n\nOwned results retain read outcomes even for no-mutation reapplication.\nRESULT-DATA separates selected/candidate/observed metadata and publication\nstatus; RESULT-CREATED-P reports creation of the owned session. Conditional\npublication is the final mutation, and later observation is read-only.\n\nOwned acquisition, planning and execution failures signal WORKSPACE-APPLY-FAILED\nwith local RESULT-DATA, RESULT-SNAPSHOT, RESULT-OUTCOMES and RESULT-CAUSES.\nFAILED-STEP retains the actual step where known. Successful publication with\nfailed observation remains distinguishable from failed/uncertain publication.\nLegacy failures retain their original early-validation and partial-outcome\nbehavior. No rollback, hidden refresh during inspection or automatic retry.\n\nSee also: `libtmux.workspace:failed-step`, `libtmux.workspace:fetch-workspace-state`, `libtmux.workspace:plan-workspace`, `libtmux.workspace:result-causes`, `libtmux.workspace:result-data`, `libtmux.workspace:result-outcomes`, `libtmux.workspace:result-snapshot`, `libtmux.workspace:workspace-deadline-exceeded`.","seeAlso":["libtmux.workspace:failed-step","libtmux.workspace:fetch-workspace-state","libtmux.workspace:plan-workspace","libtmux.workspace:result-causes","libtmux.workspace:result-data","libtmux.workspace:result-outcomes","libtmux.workspace:result-snapshot","libtmux.workspace:workspace-deadline-exceeded"]},"source":{"file":"src/workspace-api.lisp","line":347,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-apply-workspace"},{"id":"libtmux.workspace:failed-step","publicId":"libtmux.workspace:failed-step","qualifiedName":"libtmux.workspace:failed-step","namespace":"libtmux.workspace","name":"failed-step","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(failed-step condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.workspace:failed-step\",[],[\"libtmux.workspace:workspace-apply-failed\"]]","methodKind":"function","raw":"(failed-step (condition libtmux.workspace:workspace-apply-failed))","params":[{"name":"condition","type":"libtmux.workspace:workspace-apply-failed"}],"label":"Primary method: libtmux.workspace:workspace-apply-failed"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return the failed or refused next WORKSPACE-STEP, or NIL for final verification.\nNIL does not imply that no mutations completed; inspect RESULT-OUTCOMES.","body":"See also: `libtmux.workspace:apply-workspace`, `libtmux.workspace:result-outcomes`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux.workspace:result-outcomes"]},"source":{"file":"src/workspace.lisp","line":34,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-failed-step"},{"id":"libtmux.workspace:fetch-workspace-state","publicId":"libtmux.workspace:fetch-workspace-state","qualifiedName":"libtmux.workspace:fetch-workspace-state","namespace":"libtmux.workspace","name":"fetch-workspace-state","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(fetch-workspace-state client workspace &key cancel-token (timeout (slot-value client (quote timeout))) (output-limit (slot-value client (quote output-limit))) (record-limit 100000))","params":[{"name":"client"},{"name":"workspace"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","default":"(slot-value client (quote timeout))","optional":true,"keywordOnly":true},{"name":"output-limit","default":"(slot-value client (quote output-limit))","optional":true,"keywordOnly":true},{"name":"record-limit","default":"100000","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Acquire ready/vacant owned metadata and a captured graph explicitly through CLIENT.\nWORKSPACE must use schema /2; /1 is refused before I/O. TIMEOUT and OUTPUT-LIMIT\nshare the bounded read policy across attempts. RECORD-LIMIT is an integer from\n1 through 100000; CANCEL-TOKEN is shared. No mutation occurs. Returns a\nWORKSPACE-STATE for local planning, usable after client close. Actual read\nfailures signal WORKSPACE-STATE-ERROR with partial evidence; invalid arguments\nremain validation failures. Failure is never reported as vacancy.","body":"See also: `libtmux.workspace:inspect-workspace`, `libtmux.workspace:plan-workspace`, `libtmux.workspace:state-causes`, `libtmux.workspace:state-data`, `libtmux.workspace:state-outcomes`, `libtmux.workspace:state-snapshot`.","seeAlso":["libtmux.workspace:inspect-workspace","libtmux.workspace:plan-workspace","libtmux.workspace:state-causes","libtmux.workspace:state-data","libtmux.workspace:state-outcomes","libtmux.workspace:state-snapshot"]},"source":{"file":"src/workspace-api.lisp","line":279,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-fetch-workspace-state"},{"id":"libtmux.workspace:inspect-workspace","publicId":"libtmux.workspace:inspect-workspace","qualifiedName":"libtmux.workspace:inspect-workspace","namespace":"libtmux.workspace","name":"inspect-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspect-workspace client workspace &key cancel-token (timeout (slot-value client (quote timeout))) (output-limit (slot-value client (quote output-limit))) (record-limit 100000))","params":[{"name":"client"},{"name":"workspace"},{"name":"cancel-token","optional":true,"keywordOnly":true},{"name":"timeout","default":"(slot-value client (quote timeout))","optional":true,"keywordOnly":true},{"name":"output-limit","default":"(slot-value client (quote output-limit))","optional":true,"keywordOnly":true},{"name":"record-limit","default":"100000","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Acquire explicit incomplete-workspace evidence through CLIENT without mutation.\nWORKSPACE must use schema /2; /1 is refused before I/O. Read limits and\nCANCEL-TOKEN have FETCH-WORKSPACE-STATE's meanings. Returns a distinct\nWORKSPACE-INSPECTION, never a planning input. Completed inspection can describe\nBUSY or invalid ownership. A terminal failure signals WORKSPACE-INSPECTION-ERROR\nwith a partial inspection and original/terminal causes separately retained.","body":"See also: `libtmux.workspace:inspection-causes`, `libtmux.workspace:inspection-data`, `libtmux.workspace:inspection-evidence`, `libtmux.workspace:inspection-outcomes`, `libtmux.workspace:inspection-snapshots`, `libtmux.workspace:inspection-terminal`.","seeAlso":["libtmux.workspace:inspection-causes","libtmux.workspace:inspection-data","libtmux.workspace:inspection-evidence","libtmux.workspace:inspection-outcomes","libtmux.workspace:inspection-snapshots","libtmux.workspace:inspection-terminal"]},"source":{"file":"src/workspace-api.lisp","line":304,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-inspect-workspace"},{"id":"libtmux.workspace:inspection-causes","publicId":"libtmux.workspace:inspection-causes","qualifiedName":"libtmux.workspace:inspection-causes","namespace":"libtmux.workspace","name":"inspection-causes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-causes inspection)","params":[{"name":"inspection"}]},{"identity":"[\"libtmux.workspace:inspection-causes\",[],[\"libtmux.workspace:workspace-inspection\"]]","methodKind":"function","raw":"(inspection-causes (value libtmux.workspace:workspace-inspection))","params":[{"name":"value","type":"libtmux.workspace:workspace-inspection"}],"label":"Primary method: libtmux.workspace:workspace-inspection"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return original retained conditions in a fresh simple vector. No I/O.","body":"See also: `libtmux:error-cause`, `libtmux.workspace:inspection-data`, `libtmux.workspace:inspection-terminal`.","seeAlso":["libtmux:error-cause","libtmux.workspace:inspection-data","libtmux.workspace:inspection-terminal"]},"source":{"file":"src/workspace-api.lisp","line":178,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-inspection-causes"},{"id":"libtmux.workspace:inspection-data","publicId":"libtmux.workspace:inspection-data","qualifiedName":"libtmux.workspace:inspection-data","namespace":"libtmux.workspace","name":"inspection-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-data inspection)","params":[{"name":"inspection"}]},{"identity":"[\"libtmux.workspace:inspection-data\",[],[\"libtmux.workspace:workspace-inspection\"]]","methodKind":"function","raw":"(inspection-data (value libtmux.workspace:workspace-inspection))","params":[{"name":"value","type":"libtmux.workspace:workspace-inspection"}],"label":"Primary method: libtmux.workspace:workspace-inspection"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return fresh attempts, record roles and diagnostics from INSPECTION. No I/O.\nRead completion does not establish valid ownership or application success.","body":"See also: `libtmux.workspace:inspect-workspace`, `libtmux.workspace:inspection-causes`, `libtmux.workspace:inspection-snapshots`.","seeAlso":["libtmux.workspace:inspect-workspace","libtmux.workspace:inspection-causes","libtmux.workspace:inspection-snapshots"]},"source":{"file":"src/workspace-api.lisp","line":164,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-inspection-data"},{"id":"libtmux.workspace:inspection-evidence","publicId":"libtmux.workspace:inspection-evidence","qualifiedName":"libtmux.workspace:inspection-evidence","namespace":"libtmux.workspace","name":"inspection-evidence","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-evidence condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.workspace:inspection-evidence\",[],[\"libtmux.workspace:workspace-inspection-error\"]]","methodKind":"function","raw":"(inspection-evidence (condition libtmux.workspace:workspace-inspection-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-inspection-error"}],"label":"Primary method: libtmux.workspace:workspace-inspection-error"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return the partial WORKSPACE-INSPECTION retained by CONDITION. No I/O.","body":"See also: `libtmux.workspace:inspection-data`, `libtmux.workspace:inspection-terminal`, `libtmux.workspace:workspace-inspection-error`.","seeAlso":["libtmux.workspace:inspection-data","libtmux.workspace:inspection-terminal","libtmux.workspace:workspace-inspection-error"]},"source":{"file":"src/workspace-api.lisp","line":182,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-inspection-evidence"},{"id":"libtmux.workspace:inspection-outcomes","publicId":"libtmux.workspace:inspection-outcomes","qualifiedName":"libtmux.workspace:inspection-outcomes","namespace":"libtmux.workspace","name":"inspection-outcomes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-outcomes inspection)","params":[{"name":"inspection"}]},{"identity":"[\"libtmux.workspace:inspection-outcomes\",[],[\"libtmux.workspace:workspace-inspection\"]]","methodKind":"function","raw":"(inspection-outcomes (value libtmux.workspace:workspace-inspection))","params":[{"name":"value","type":"libtmux.workspace:workspace-inspection"}],"label":"Primary method: libtmux.workspace:workspace-inspection"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return INSPECTION's read outcomes in a fresh simple vector. No I/O.","body":"See also: `libtmux.workspace:inspection-data`, `libtmux:outcome-status`.","seeAlso":["libtmux.workspace:inspection-data","libtmux:outcome-status"]},"source":{"file":"src/workspace-api.lisp","line":174,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-inspection-outcomes"},{"id":"libtmux.workspace:inspection-snapshots","publicId":"libtmux.workspace:inspection-snapshots","qualifiedName":"libtmux.workspace:inspection-snapshots","namespace":"libtmux.workspace","name":"inspection-snapshots","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-snapshots inspection)","params":[{"name":"inspection"}]},{"identity":"[\"libtmux.workspace:inspection-snapshots\",[],[\"libtmux.workspace:workspace-inspection\"]]","methodKind":"function","raw":"(inspection-snapshots (value libtmux.workspace:workspace-inspection))","params":[{"name":"value","type":"libtmux.workspace:workspace-inspection"}],"label":"Primary method: libtmux.workspace:workspace-inspection"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return retained captured SNAPSHOT objects in a fresh simple vector. No I/O.\nEach capture remains paired with its attempt's metadata in INSPECTION-DATA.","body":"See also: `libtmux.workspace:inspection-data`, `libtmux.workspace:inspection-outcomes`.","seeAlso":["libtmux.workspace:inspection-data","libtmux.workspace:inspection-outcomes"]},"source":{"file":"src/workspace-api.lisp","line":169,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-inspection-snapshots"},{"id":"libtmux.workspace:inspection-terminal","publicId":"libtmux.workspace:inspection-terminal","qualifiedName":"libtmux.workspace:inspection-terminal","namespace":"libtmux.workspace","name":"inspection-terminal","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(inspection-terminal condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.workspace:inspection-terminal\",[],[\"libtmux.workspace:workspace-inspection-error\"]]","methodKind":"function","raw":"(inspection-terminal (condition libtmux.workspace:workspace-inspection-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-inspection-error"}],"label":"Primary method: libtmux.workspace:workspace-inspection-error"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return the terminal condition that stopped inspection. No I/O.\nThe original metadata cause remains in the cause chain and inspection evidence.","body":"See also: `libtmux:error-cause`, `libtmux.workspace:inspection-causes`, `libtmux.workspace:inspection-evidence`.","seeAlso":["libtmux:error-cause","libtmux.workspace:inspection-causes","libtmux.workspace:inspection-evidence"]},"source":{"file":"src/workspace-api.lisp","line":186,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-inspection-terminal"},{"id":"libtmux.workspace:invalid-workspace","publicId":"libtmux.workspace:invalid-workspace","qualifiedName":"libtmux.workspace:invalid-workspace","namespace":"libtmux.workspace","name":"invalid-workspace","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Native workspace data violates the closed workspace grammar."},"source":{"file":"src/workspace.lisp","line":81,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-invalid-workspace"},{"id":"libtmux.workspace:invalid-workspace-document","publicId":"libtmux.workspace:invalid-workspace-document","qualifiedName":"libtmux.workspace:invalid-workspace-document","namespace":"libtmux.workspace","name":"invalid-workspace-document","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"A workspace JSON document is malformed, unknown, or invalid."},"source":{"file":"src/workspace.lisp","line":88,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.workspace:invalid-workspace"],"slug":"libtmux-workspace-invalid-workspace-document"},{"id":"libtmux.workspace:make-workspace","publicId":"libtmux.workspace:make-workspace","qualifiedName":"libtmux.workspace:make-workspace","namespace":"libtmux.workspace","name":"make-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(make-workspace data &key (max-windows 100) (max-panes 1000) (max-argv 256) (max-environment 256))","params":[{"name":"data"},{"name":"max-windows","default":"100","optional":true,"keywordOnly":true},{"name":"max-panes","default":"1000","optional":true,"keywordOnly":true},{"name":"max-argv","default":"256","optional":true,"keywordOnly":true},{"name":"max-environment","default":"256","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Validate inert native DATA and return an owned WORKSPACE without I/O.\nDATA is a finite keyword plist declaring libtmux.lisp.workspace/1 or /2.\nWorkspace/1 describes name-based topology reuse. Workspace/2 requires stable\nIDs at the root, session, windows and panes; duplicate window names are allowed.\nMutable inputs are copied. Unknown/duplicate keys, cyclic containers and invalid\nvalues signal INVALID-WORKSPACE with WORKSPACE-PATH and WORKSPACE-LIMIT.","body":"MAX-WINDOWS, MAX-PANES, MAX-ARGV and MAX-ENVIRONMENT limit topology, individual\nargv vectors and session environment pairs. Owned protocol ceilings remain in\nforce when a caller chooses larger limits. :COMMAND is literal argv;\n:SHELL-COMMAND is explicit shell source. Cwd, environment and named/custom\nlayouts retain their creation meanings; changing existing processes is refused.\n\nSee also: `libtmux.workspace:apply-workspace`, `libtmux:new-session`, `libtmux.workspace:parse-workspace`, `libtmux.workspace:plan-workspace`, `libtmux.workspace:read-workspace`, `libtmux.workspace:workspace-data`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux:new-session","libtmux.workspace:parse-workspace","libtmux.workspace:plan-workspace","libtmux.workspace:read-workspace","libtmux.workspace:workspace-data"]},"source":{"file":"src/workspace-api.lisp","line":19,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-make-workspace"},{"id":"libtmux.workspace:parse-workspace","publicId":"libtmux.workspace:parse-workspace","qualifiedName":"libtmux.workspace:parse-workspace","namespace":"libtmux.workspace","name":"parse-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(parse-workspace source &key (max-input-bytes +default-max-input-bytes+) (max-depth +default-max-depth+) (max-nodes +default-max-nodes+) (max-string-length +default-max-string-length+) (max-windows +default-max-windows+) (max-panes +default-max-panes+) (max-argv +default-max-argv+) (max-environment +default-max-environment+) (max-integer-digits +default-max-integer-digits+))","params":[{"name":"source"},{"name":"max-input-bytes","default":"+default-max-input-bytes+","optional":true,"keywordOnly":true},{"name":"max-depth","default":"+default-max-depth+","optional":true,"keywordOnly":true},{"name":"max-nodes","default":"+default-max-nodes+","optional":true,"keywordOnly":true},{"name":"max-string-length","default":"+default-max-string-length+","optional":true,"keywordOnly":true},{"name":"max-windows","default":"+default-max-windows+","optional":true,"keywordOnly":true},{"name":"max-panes","default":"+default-max-panes+","optional":true,"keywordOnly":true},{"name":"max-argv","default":"+default-max-argv+","optional":true,"keywordOnly":true},{"name":"max-environment","default":"+default-max-environment+","optional":true,"keywordOnly":true},{"name":"max-integer-digits","default":"+default-max-integer-digits+","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Parse one bounded workspace/1 or workspace/2 JSON string into a WORKSPACE.\nThe declared schema selects a closed grammar. Unknown/duplicate members,\ninvalid values and incomplete input fail; no external names are interned or\nevaluated. Limits bound UTF-8 bytes, nesting, nodes, string length, topology,\nargv length, session environment pairs and integer token digits. Owned protocol\nceilings remain in force when callers choose larger limits.","body":"Workspace/2 requires stable IDs and permits repeated window names. Command\narrays are literal argv; shell_command is explicit source. Named/custom layouts\nand all other creation inputs have the same meanings as MAKE-WORKSPACE.\nRetained strings and containers are owned. Signals INVALID-WORKSPACE-DOCUMENT\nor WORKSPACE-LIMIT-EXCEEDED with WORKSPACE-PATH and WORKSPACE-LIMIT. No tmux I/O.\n\nSee also: `libtmux.workspace:make-workspace`, `libtmux.workspace:read-workspace`, `libtmux.workspace:workspace-data`.","seeAlso":["libtmux.workspace:make-workspace","libtmux.workspace:read-workspace","libtmux.workspace:workspace-data"]},"source":{"file":"src/workspace-api.lisp","line":57,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-parse-workspace"},{"id":"libtmux.workspace:plan-data","publicId":"libtmux.workspace:plan-data","qualifiedName":"libtmux.workspace:plan-data","namespace":"libtmux.workspace","name":"plan-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(plan-data plan)","params":[{"name":"plan"}]},{"identity":"[\"libtmux.workspace:plan-data\",[],[\"libtmux.workspace:workspace-conflict\"]]","methodKind":"function","raw":"(plan-data (condition libtmux.workspace:workspace-conflict))","params":[{"name":"condition","type":"libtmux.workspace:workspace-conflict"}],"label":"Primary method: libtmux.workspace:workspace-conflict"},{"identity":"[\"libtmux.workspace:plan-data\",[],[\"libtmux.workspace:workspace-plan\"]]","methodKind":"function","raw":"(plan-data (value libtmux.workspace:workspace-plan))","params":[{"name":"value","type":"libtmux.workspace:workspace-plan"}],"label":"Primary method: libtmux.workspace:workspace-plan"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return (values fresh-owned-data T), or (values NIL NIL) for legacy evidence.\nAccepts WORKSPACE-PLAN or WORKSPACE-CONFLICT. Owned data separates declaration\nchanges, captured drift, informational context, conflicts and :PUBLISH-P.\nAn empty step vector can still require metadata publication. No I/O.","body":"See also: `libtmux.workspace:plan-steps`, `libtmux.workspace:plan-workspace`, `libtmux.workspace:workspace-conflict`.","seeAlso":["libtmux.workspace:plan-steps","libtmux.workspace:plan-workspace","libtmux.workspace:workspace-conflict"]},"source":{"file":"src/workspace-api.lisp","line":191,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-plan-data"},{"id":"libtmux.workspace:plan-steps","publicId":"libtmux.workspace:plan-steps","qualifiedName":"libtmux.workspace:plan-steps","namespace":"libtmux.workspace","name":"plan-steps","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(plan-steps plan)","params":[{"name":"plan"}]},{"identity":"[\"libtmux.workspace:plan-steps\",[],[\"libtmux.workspace:workspace-plan\"]]","methodKind":"function","raw":"(plan-steps (plan libtmux.workspace:workspace-plan))","params":[{"name":"plan","type":"libtmux.workspace:workspace-plan"}],"label":"Primary method: libtmux.workspace:workspace-plan"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return PLAN's ordered steps as a fresh simple vector. No I/O.\nAn owned plan with no domain steps can still require metadata publication.","body":"See also: `libtmux.workspace:plan-data`, `libtmux.workspace:plan-workspace`, `libtmux.workspace:step-action`, `libtmux.workspace:step-data`.","seeAlso":["libtmux.workspace:plan-data","libtmux.workspace:plan-workspace","libtmux.workspace:step-action","libtmux.workspace:step-data"]},"source":{"file":"src/workspace.lisp","line":55,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-plan-steps"},{"id":"libtmux.workspace:plan-workspace","publicId":"libtmux.workspace:plan-workspace","qualifiedName":"libtmux.workspace:plan-workspace","namespace":"libtmux.workspace","name":"plan-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(plan-workspace workspace &optional observation &key reconcile)","params":[{"name":"workspace"},{"name":"observation","optional":true},{"name":"reconcile","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return a local WORKSPACE-PLAN for WORKSPACE and captured OBSERVATION.\nWorkspace/1 accepts a SNAPSHOT or no observation for a creation preview; an\nexact captured topology produces no steps. Workspace/2 requires an explicitly\nacquired WORKSPACE-STATE for the same workspace ID. A snapshot or incomplete\ninspection cannot establish ownership. Matching acquired state remains usable\nafter its client closes. No acquisition, refresh or mutation occurs.","body":"Owned planning separates declaration changes and captured drift. By default,\neither requires explicit :RECONCILE before a plan can be returned; unsupported\nchanges remain conflicts. PLAN-DATA exposes diagnostics on a plan or\nWORKSPACE-CONFLICT. An empty owned step vector can still require metadata\npublication: inspect :PUBLISH-P. Application always reacquires and replans.\nNon-NIL RECONCILE is invalid for workspace/1.\n\nSee also: `libtmux.workspace:apply-workspace`, `libtmux.workspace:fetch-workspace-state`, `libtmux.workspace:plan-data`, `libtmux.workspace:plan-steps`, `libtmux.workspace:workspace-conflict`, `libtmux.workspace:workspace-state`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux.workspace:fetch-workspace-state","libtmux.workspace:plan-data","libtmux.workspace:plan-steps","libtmux.workspace:workspace-conflict","libtmux.workspace:workspace-state"]},"source":{"file":"src/workspace-api.lisp","line":243,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-plan-workspace"},{"id":"libtmux.workspace:read-workspace","publicId":"libtmux.workspace:read-workspace","qualifiedName":"libtmux.workspace:read-workspace","namespace":"libtmux.workspace","name":"read-workspace","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(read-workspace path &rest options &key (max-input-bytes +default-max-input-bytes+) &allow-other-keys)","params":[{"name":"path"},{"name":"options","variadic":"positional"},{"name":"max-input-bytes","default":"+default-max-input-bytes+","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Read one bounded regular UTF-8 JSON file and return an owned WORKSPACE.\nPATH is opened for input and never modified. MAX-INPUT-BYTES is enforced on\nbytes read even if the file changes after opening. The descriptor is opened\nnonblocking, then directories and special files are rejected before reading.\nOther OPTIONS are forwarded to PARSE-WORKSPACE. Signals\nINVALID-WORKSPACE-DOCUMENT or WORKSPACE-LIMIT-EXCEEDED and closes the stream.","body":"See also: `libtmux.workspace:parse-workspace`, `libtmux.workspace:workspace-data`.","seeAlso":["libtmux.workspace:parse-workspace","libtmux.workspace:workspace-data"]},"source":{"file":"src/workspace.lisp","line":967,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-read-workspace"},{"id":"libtmux.workspace:result-causes","publicId":"libtmux.workspace:result-causes","qualifiedName":"libtmux.workspace:result-causes","namespace":"libtmux.workspace","name":"result-causes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(result-causes result)","params":[{"name":"result"}]},{"identity":"[\"libtmux.workspace:result-causes\",[],[\"libtmux.workspace:workspace-apply-failed\"]]","methodKind":"function","raw":"(result-causes (condition libtmux.workspace:workspace-apply-failed))","params":[{"name":"condition","type":"libtmux.workspace:workspace-apply-failed"}],"label":"Primary method: libtmux.workspace:workspace-apply-failed"},{"identity":"[\"libtmux.workspace:result-causes\",[],[\"libtmux.workspace:workspace-result\"]]","methodKind":"function","raw":"(result-causes (value libtmux.workspace:workspace-result))","params":[{"name":"value","type":"libtmux.workspace:workspace-result"}],"label":"Primary method: libtmux.workspace:workspace-result"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return retained application conditions in a fresh simple vector. No I/O.\nConditions keep primary-first order and identity deduplication; successful\napplications without failures return an empty vector.","body":"See also: `libtmux:error-cause`, `libtmux.workspace:result-data`, `libtmux.workspace:workspace-apply-failed`.","seeAlso":["libtmux:error-cause","libtmux.workspace:result-data","libtmux.workspace:workspace-apply-failed"]},"source":{"file":"src/workspace-api.lisp","line":205,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-result-causes"},{"id":"libtmux.workspace:result-created-p","publicId":"libtmux.workspace:result-created-p","qualifiedName":"libtmux.workspace:result-created-p","namespace":"libtmux.workspace","name":"result-created-p","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(result-created-p result)","params":[{"name":"result"}]},{"identity":"[\"libtmux.workspace:result-created-p\",[],[\"libtmux.workspace:workspace-result\"]]","methodKind":"function","raw":"(result-created-p (workspace-result libtmux.workspace:workspace-result))","params":[{"name":"workspace-result","type":"libtmux.workspace:workspace-result"}],"label":"Primary method: libtmux.workspace:workspace-result"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return true when APPLY-WORKSPACE created the declared session.","body":"See also: `libtmux.workspace:apply-workspace`, `libtmux.workspace:result-outcomes`, `libtmux.workspace:result-snapshot`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux.workspace:result-outcomes","libtmux.workspace:result-snapshot"]},"source":{"file":"src/workspace.lisp","line":71,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-result-created-p"},{"id":"libtmux.workspace:result-data","publicId":"libtmux.workspace:result-data","qualifiedName":"libtmux.workspace:result-data","namespace":"libtmux.workspace","name":"result-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(result-data result)","params":[{"name":"result"}]},{"identity":"[\"libtmux.workspace:result-data\",[],[\"libtmux.workspace:workspace-apply-failed\"]]","methodKind":"function","raw":"(result-data (condition libtmux.workspace:workspace-apply-failed))","params":[{"name":"condition","type":"libtmux.workspace:workspace-apply-failed"}],"label":"Primary method: libtmux.workspace:workspace-apply-failed"},{"identity":"[\"libtmux.workspace:result-data\",[],[\"libtmux.workspace:workspace-result\"]]","methodKind":"function","raw":"(result-data (value libtmux.workspace:workspace-result))","params":[{"name":"value","type":"libtmux.workspace:workspace-result"}],"label":"Primary method: libtmux.workspace:workspace-result"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return owned application data and presence as two values, without I/O.\nAccepts WORKSPACE-RESULT or WORKSPACE-APPLY-FAILED. Returns fresh data and T for\nowned evidence; legacy evidence returns NIL,NIL. Data distinguishes phase,\nmappings, selected/candidate/observed metadata and publication status.","body":"See also: `libtmux.workspace:failed-step`, `libtmux.workspace:result-causes`, `libtmux.workspace:result-outcomes`, `libtmux.workspace:result-snapshot`.","seeAlso":["libtmux.workspace:failed-step","libtmux.workspace:result-causes","libtmux.workspace:result-outcomes","libtmux.workspace:result-snapshot"]},"source":{"file":"src/workspace-api.lisp","line":198,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-result-data"},{"id":"libtmux.workspace:result-outcomes","publicId":"libtmux.workspace:result-outcomes","qualifiedName":"libtmux.workspace:result-outcomes","namespace":"libtmux.workspace","name":"result-outcomes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(result-outcomes result)","params":[{"name":"result"}]},{"identity":"[\"libtmux.workspace:result-outcomes\",[],[\"libtmux.workspace:workspace-apply-failed\"]]","methodKind":"function","raw":"(result-outcomes (condition libtmux.workspace:workspace-apply-failed))","params":[{"name":"condition","type":"libtmux.workspace:workspace-apply-failed"}],"label":"Primary method: libtmux.workspace:workspace-apply-failed"},{"identity":"[\"libtmux.workspace:result-outcomes\",[],[\"libtmux.workspace:workspace-result\"]]","methodKind":"function","raw":"(result-outcomes (result libtmux.workspace:workspace-result))","params":[{"name":"result","type":"libtmux.workspace:workspace-result"}],"label":"Primary method: libtmux.workspace:workspace-result"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return retained COMMAND-OUTCOME objects in a fresh simple vector.","body":"See also: `libtmux.workspace:failed-step`, `libtmux.workspace:result-created-p`, `libtmux.workspace:result-snapshot`.","seeAlso":["libtmux.workspace:failed-step","libtmux.workspace:result-created-p","libtmux.workspace:result-snapshot"]},"source":{"file":"src/workspace.lisp","line":66,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-result-outcomes"},{"id":"libtmux.workspace:result-snapshot","publicId":"libtmux.workspace:result-snapshot","qualifiedName":"libtmux.workspace:result-snapshot","namespace":"libtmux.workspace","name":"result-snapshot","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(result-snapshot result)","params":[{"name":"result"}]},{"identity":"[\"libtmux.workspace:result-snapshot\",[],[\"libtmux.workspace:workspace-apply-failed\"]]","methodKind":"function","raw":"(result-snapshot (condition libtmux.workspace:workspace-apply-failed))","params":[{"name":"condition","type":"libtmux.workspace:workspace-apply-failed"}],"label":"Primary method: libtmux.workspace:workspace-apply-failed"},{"identity":"[\"libtmux.workspace:result-snapshot\",[],[\"libtmux.workspace:workspace-result\"]]","methodKind":"function","raw":"(result-snapshot (workspace-result libtmux.workspace:workspace-result))","params":[{"name":"workspace-result","type":"libtmux.workspace:workspace-result"}],"label":"Primary method: libtmux.workspace:workspace-result"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return the final captured SNAPSHOT retained by RESULT. No I/O.","body":"See also: `libtmux.workspace:apply-workspace`, `libtmux.workspace:result-created-p`, `libtmux.workspace:result-outcomes`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux.workspace:result-created-p","libtmux.workspace:result-outcomes"]},"source":{"file":"src/workspace.lisp","line":61,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-result-snapshot"},{"id":"libtmux.workspace:state-causes","publicId":"libtmux.workspace:state-causes","qualifiedName":"libtmux.workspace:state-causes","namespace":"libtmux.workspace","name":"state-causes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(state-causes state)","params":[{"name":"state"}]},{"identity":"[\"libtmux.workspace:state-causes\",[],[\"libtmux.workspace:workspace-state-error\"]]","methodKind":"function","raw":"(state-causes (condition libtmux.workspace:workspace-state-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-state-error"}],"label":"Primary method: libtmux.workspace:workspace-state-error"},{"identity":"[\"libtmux.workspace:state-causes\",[],[\"libtmux.workspace:workspace-state\"]]","methodKind":"function","raw":"(state-causes (state libtmux.workspace:workspace-state))","params":[{"name":"state","type":"libtmux.workspace:workspace-state"}],"label":"Primary method: libtmux.workspace:workspace-state"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return retained acquisition conditions in a fresh simple vector. No I/O.\nSuccessful state has an empty vector. Original condition objects are shared.","body":"See also: `libtmux:error-cause`, `libtmux.workspace:workspace-state-error`.","seeAlso":["libtmux:error-cause","libtmux.workspace:workspace-state-error"]},"source":{"file":"src/workspace-api.lisp","line":159,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-state-causes"},{"id":"libtmux.workspace:state-data","publicId":"libtmux.workspace:state-data","qualifiedName":"libtmux.workspace:state-data","namespace":"libtmux.workspace","name":"state-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(state-data state)","params":[{"name":"state"}]},{"identity":"[\"libtmux.workspace:state-data\",[],[\"libtmux.workspace:workspace-state-error\"]]","methodKind":"function","raw":"(state-data (condition libtmux.workspace:workspace-state-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-state-error"}],"label":"Primary method: libtmux.workspace:workspace-state-error"},{"identity":"[\"libtmux.workspace:state-data\",[],[\"libtmux.workspace:workspace-state\"]]","methodKind":"function","raw":"(state-data (state libtmux.workspace:workspace-state))","params":[{"name":"state","type":"libtmux.workspace:workspace-state"}],"label":"Primary method: libtmux.workspace:workspace-state"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return fresh finite metadata for WORKSPACE-STATE or WORKSPACE-STATE-ERROR.\nNo I/O. Partial metadata from an error does not prove readiness or vacancy.","body":"See also: `libtmux.workspace:state-causes`, `libtmux.workspace:state-outcomes`, `libtmux.workspace:state-snapshot`.","seeAlso":["libtmux.workspace:state-causes","libtmux.workspace:state-outcomes","libtmux.workspace:state-snapshot"]},"source":{"file":"src/workspace-api.lisp","line":145,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-state-data"},{"id":"libtmux.workspace:state-outcomes","publicId":"libtmux.workspace:state-outcomes","qualifiedName":"libtmux.workspace:state-outcomes","namespace":"libtmux.workspace","name":"state-outcomes","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(state-outcomes state)","params":[{"name":"state"}]},{"identity":"[\"libtmux.workspace:state-outcomes\",[],[\"libtmux.workspace:workspace-state-error\"]]","methodKind":"function","raw":"(state-outcomes (condition libtmux.workspace:workspace-state-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-state-error"}],"label":"Primary method: libtmux.workspace:workspace-state-error"},{"identity":"[\"libtmux.workspace:state-outcomes\",[],[\"libtmux.workspace:workspace-state\"]]","methodKind":"function","raw":"(state-outcomes (state libtmux.workspace:workspace-state))","params":[{"name":"state","type":"libtmux.workspace:workspace-state"}],"label":"Primary method: libtmux.workspace:workspace-state"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return STATE's read COMMAND-OUTCOME objects in a fresh simple vector.\nIncludes retained unsuccessful reads. No I/O.","body":"See also: `libtmux:outcome-status`, `libtmux.workspace:state-causes`.","seeAlso":["libtmux:outcome-status","libtmux.workspace:state-causes"]},"source":{"file":"src/workspace-api.lisp","line":154,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-state-outcomes"},{"id":"libtmux.workspace:state-snapshot","publicId":"libtmux.workspace:state-snapshot","qualifiedName":"libtmux.workspace:state-snapshot","namespace":"libtmux.workspace","name":"state-snapshot","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(state-snapshot state)","params":[{"name":"state"}]},{"identity":"[\"libtmux.workspace:state-snapshot\",[],[\"libtmux.workspace:workspace-state-error\"]]","methodKind":"function","raw":"(state-snapshot (condition libtmux.workspace:workspace-state-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-state-error"}],"label":"Primary method: libtmux.workspace:workspace-state-error"},{"identity":"[\"libtmux.workspace:state-snapshot\",[],[\"libtmux.workspace:workspace-state\"]]","methodKind":"function","raw":"(state-snapshot (state libtmux.workspace:workspace-state))","params":[{"name":"state","type":"libtmux.workspace:workspace-state"}],"label":"Primary method: libtmux.workspace:workspace-state"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return STATE's retained captured SNAPSHOT, or NIL before capture. No I/O.","body":"See also: `libtmux.workspace:fetch-workspace-state`, `libtmux:panes`, `libtmux.workspace:state-data`.","seeAlso":["libtmux.workspace:fetch-workspace-state","libtmux:panes","libtmux.workspace:state-data"]},"source":{"file":"src/workspace-api.lisp","line":150,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-state-snapshot"},{"id":"libtmux.workspace:step-action","publicId":"libtmux.workspace:step-action","qualifiedName":"libtmux.workspace:step-action","namespace":"libtmux.workspace","name":"step-action","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(step-action step)","params":[{"name":"step"}]},{"identity":"[\"libtmux.workspace:step-action\",[],[\"libtmux.workspace:workspace-step\"]]","methodKind":"function","raw":"(step-action (workspace-step libtmux.workspace:workspace-step))","params":[{"name":"workspace-step","type":"libtmux.workspace:workspace-step"}],"label":"Primary method: libtmux.workspace:workspace-step"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return STEP's action keyword, without I/O.","body":"See also: `libtmux.workspace:plan-steps`, `libtmux.workspace:step-data`.","seeAlso":["libtmux.workspace:plan-steps","libtmux.workspace:step-data"]},"source":{"file":"src/workspace.lisp","line":45,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-step-action"},{"id":"libtmux.workspace:step-data","publicId":"libtmux.workspace:step-data","qualifiedName":"libtmux.workspace:step-data","namespace":"libtmux.workspace","name":"step-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(step-data step)","params":[{"name":"step"}]},{"identity":"[\"libtmux.workspace:step-data\",[],[\"libtmux.workspace:workspace-step\"]]","methodKind":"function","raw":"(step-data (step libtmux.workspace:workspace-step))","params":[{"name":"step","type":"libtmux.workspace:workspace-step"}],"label":"Primary method: libtmux.workspace:workspace-step"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return a fresh plist of STEP operands, without I/O.","body":"See also: `libtmux.workspace:plan-steps`, `libtmux.workspace:step-action`.","seeAlso":["libtmux.workspace:plan-steps","libtmux.workspace:step-action"]},"source":{"file":"src/workspace.lisp","line":50,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-step-data"},{"id":"libtmux.workspace:workspace","publicId":"libtmux.workspace:workspace","qualifiedName":"libtmux.workspace:workspace","namespace":"libtmux.workspace","name":"workspace","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"An immutable-by-contract, owned workspace description."},"source":{"file":"src/workspace.lisp","line":132,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace"},{"id":"libtmux.workspace:workspace-apply-failed","publicId":"libtmux.workspace:workspace-apply-failed","qualifiedName":"libtmux.workspace:workspace-apply-failed","namespace":"libtmux.workspace","name":"workspace-apply-failed","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Workspace application stopped with retained partial outcomes."},"source":{"file":"src/workspace.lisp","line":94,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-workspace-apply-failed"},{"id":"libtmux.workspace:workspace-conflict","publicId":"libtmux.workspace:workspace-conflict","qualifiedName":"libtmux.workspace:workspace-conflict","namespace":"libtmux.workspace","name":"workspace-conflict","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Captured topology conflicts with the declared workspace."},"source":{"file":"src/workspace.lisp","line":84,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-workspace-conflict"},{"id":"libtmux.workspace:workspace-data","publicId":"libtmux.workspace:workspace-data","qualifiedName":"libtmux.workspace:workspace-data","namespace":"libtmux.workspace","name":"workspace-data","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(workspace-data workspace)","params":[{"name":"workspace"}]},{"identity":"[\"libtmux.workspace:workspace-data\",[],[\"libtmux.workspace:workspace\"]]","methodKind":"function","raw":"(workspace-data (workspace libtmux.workspace:workspace))","params":[{"name":"workspace","type":"libtmux.workspace:workspace"}],"label":"Primary method: libtmux.workspace:workspace"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return fresh closed native data for WORKSPACE, without I/O.","body":"See also: `libtmux.workspace:make-workspace`, `libtmux.workspace:plan-workspace`.","seeAlso":["libtmux.workspace:make-workspace","libtmux.workspace:plan-workspace"]},"source":{"file":"src/workspace.lisp","line":40,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-workspace-data"},{"id":"libtmux.workspace:workspace-deadline-exceeded","publicId":"libtmux.workspace:workspace-deadline-exceeded","qualifiedName":"libtmux.workspace:workspace-deadline-exceeded","namespace":"libtmux.workspace","name":"workspace-deadline-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"The application budget expired at a workspace boundary.\nWORKSPACE-LIMIT returns :TOTAL-TIMEOUT. No new command outcome is implied;\nprevious completed outcomes remain on a wrapping WORKSPACE-APPLY-FAILED.\nAn already admitted core call retains its own timeout and cleanup contract.","body":"See also: `libtmux.workspace:apply-workspace`, `libtmux.workspace:result-outcomes`, `libtmux.workspace:workspace-limit`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux.workspace:result-outcomes","libtmux.workspace:workspace-limit"]},"source":{"file":"src/workspace.lisp","line":102,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-workspace-deadline-exceeded"},{"id":"libtmux.workspace:workspace-error","publicId":"libtmux.workspace:workspace-error","qualifiedName":"libtmux.workspace:workspace-error","namespace":"libtmux.workspace","name":"workspace-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"A workspace validation, planning, or application failure."},"source":{"file":"src/workspace.lisp","line":76,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux:libtmux-error"],"slug":"libtmux-workspace-workspace-error"},{"id":"libtmux.workspace:workspace-inspection","publicId":"libtmux.workspace:workspace-inspection","qualifiedName":"libtmux.workspace:workspace-inspection","namespace":"libtmux.workspace","name":"workspace-inspection","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Explicit read evidence, including incomplete or invalid owned work.\nAn inspection cannot stand in for WORKSPACE-STATE in local planning.","body":"See also: `libtmux.workspace:inspect-workspace`, `libtmux.workspace:inspection-data`, `libtmux.workspace:workspace-inspection-error`.","seeAlso":["libtmux.workspace:inspect-workspace","libtmux.workspace:inspection-data","libtmux.workspace:workspace-inspection-error"]},"source":{"file":"src/workspace-api.lisp","line":130,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace-inspection"},{"id":"libtmux.workspace:workspace-inspection-error","publicId":"libtmux.workspace:workspace-inspection-error","qualifiedName":"libtmux.workspace:workspace-inspection-error","namespace":"libtmux.workspace","name":"workspace-inspection-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Inspection stopped with its original and terminal failures retained.\nINSPECTION-EVIDENCE returns the partial public observation. Its causes remain\nseparate from INSPECTION-TERMINAL; neither admits planning or mutation.","body":"See also: `libtmux.workspace:inspection-causes`, `libtmux.workspace:inspection-evidence`, `libtmux.workspace:inspection-terminal`.","seeAlso":["libtmux.workspace:inspection-causes","libtmux.workspace:inspection-evidence","libtmux.workspace:inspection-terminal"]},"source":{"file":"src/workspace-api.lisp","line":137,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-workspace-inspection-error"},{"id":"libtmux.workspace:workspace-limit","publicId":"libtmux.workspace:workspace-limit","qualifiedName":"libtmux.workspace:workspace-limit","namespace":"libtmux.workspace","name":"workspace-limit","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(workspace-limit condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.workspace:workspace-limit\",[],[\"libtmux.workspace:workspace-error\"]]","methodKind":"function","raw":"(workspace-limit (condition libtmux.workspace:workspace-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-error"}],"label":"Primary method: libtmux.workspace:workspace-error"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return the exhausted workspace limit name, or NIL, without I/O."},"source":{"file":"src/workspace.lisp","line":31,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-workspace-limit"},{"id":"libtmux.workspace:workspace-limit-exceeded","publicId":"libtmux.workspace:workspace-limit-exceeded","qualifiedName":"libtmux.workspace:workspace-limit-exceeded","namespace":"libtmux.workspace","name":"workspace-limit-exceeded","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"A workspace JSON or file input exceeds a configured bound."},"source":{"file":"src/workspace.lisp","line":91,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.workspace:invalid-workspace-document"],"slug":"libtmux-workspace-workspace-limit-exceeded"},{"id":"libtmux.workspace:workspace-path","publicId":"libtmux.workspace:workspace-path","qualifiedName":"libtmux.workspace:workspace-path","namespace":"libtmux.workspace","name":"workspace-path","kind":"function","modifiers":[],"parent":"libtmux.workspace","signatures":[{"raw":"(workspace-path condition)","params":[{"name":"condition"}]},{"identity":"[\"libtmux.workspace:workspace-path\",[],[\"libtmux.workspace:workspace-error\"]]","methodKind":"function","raw":"(workspace-path (condition libtmux.workspace:workspace-error))","params":[{"name":"condition","type":"libtmux.workspace:workspace-error"}],"label":"Primary method: libtmux.workspace:workspace-error"}],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Return a fresh vector locating the workspace error, without I/O."},"source":{"file":"src/workspace.lisp","line":28,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-workspace-path"},{"id":"libtmux.workspace:workspace-plan","publicId":"libtmux.workspace:workspace-plan","qualifiedName":"libtmux.workspace:workspace-plan","namespace":"libtmux.workspace","name":"workspace-plan","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"A finite local preview, with separate owned publication metadata."},"source":{"file":"src/workspace.lisp","line":143,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace-plan"},{"id":"libtmux.workspace:workspace-result","publicId":"libtmux.workspace:workspace-result","qualifiedName":"libtmux.workspace:workspace-result","namespace":"libtmux.workspace","name":"workspace-result","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Retained workspace application evidence and final captured topology."},"source":{"file":"src/workspace.lisp","line":147,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace-result"},{"id":"libtmux.workspace:workspace-state","publicId":"libtmux.workspace:workspace-state","qualifiedName":"libtmux.workspace:workspace-state","namespace":"libtmux.workspace","name":"workspace-state","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Captured ready/vacant owned workspace evidence for local planning.\nAcquire through FETCH-WORKSPACE-STATE. Readers remain usable after client close.","body":"See also: `libtmux.workspace:plan-workspace`, `libtmux.workspace:state-data`, `libtmux.workspace:state-snapshot`, `libtmux.workspace:workspace-inspection`.","seeAlso":["libtmux.workspace:plan-workspace","libtmux.workspace:state-data","libtmux.workspace:state-snapshot","libtmux.workspace:workspace-inspection"]},"source":{"file":"src/workspace-api.lisp","line":114,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace-state"},{"id":"libtmux.workspace:workspace-state-error","publicId":"libtmux.workspace:workspace-state-error","qualifiedName":"libtmux.workspace:workspace-state-error","namespace":"libtmux.workspace","name":"workspace-state-error","kind":"exception","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"Owned state acquisition failed with retained partial read evidence.\nFailure does not imply vacancy or grant ownership. Inspect STATE-DATA,\nSTATE-SNAPSHOT, STATE-OUTCOMES and STATE-CAUSES without further I/O.","body":"See also: `libtmux:error-cause`, `libtmux.workspace:fetch-workspace-state`, `libtmux.workspace:inspect-workspace`.","seeAlso":["libtmux:error-cause","libtmux.workspace:fetch-workspace-state","libtmux.workspace:inspect-workspace"]},"source":{"file":"src/workspace-api.lisp","line":121,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["libtmux.workspace:workspace-error"],"slug":"libtmux-workspace-workspace-state-error"},{"id":"libtmux.workspace:workspace-step","publicId":"libtmux.workspace:workspace-step","qualifiedName":"libtmux.workspace:workspace-step","namespace":"libtmux.workspace","name":"workspace-step","kind":"class","modifiers":["opaque"],"parent":"libtmux.workspace","signatures":[],"product":"workspace","package":"libtmux/workspace","publicOwner":"libtmux.workspace","apiScope":"exported","doc":{"summary":"One inspectable, inert workspace operation in execution order."},"source":{"file":"src/workspace.lisp","line":138,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"extends":["common-lisp:standard-object"],"slug":"libtmux-workspace-workspace-step"},{"id":"libtmux.workspace.cli","publicId":"libtmux.workspace.cli","qualifiedName":"libtmux.workspace.cli","namespace":"","name":"libtmux.workspace.cli","kind":"module","modifiers":[],"signatures":[],"product":"workspace","package":"libtmux/workspace/cli","publicOwner":"libtmux.workspace.cli","apiScope":"exported","doc":{"summary":"Command-line adapter for bounded libtmux workspace documents.\nVALIDATE and v1 offline PLAN are local. Owned PLAN, INSPECT and APPLY require an\nexplicit socket path and use a scoped libtmux client. Output is one JSON summary;\nfailures return a nonzero status without entering the debugger."},"source":{"file":"src/workspace-cli.lisp","line":1,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-cli"},{"id":"libtmux.workspace.cli:main","publicId":"libtmux.workspace.cli:main","qualifiedName":"libtmux.workspace.cli:main","namespace":"libtmux.workspace.cli","name":"main","kind":"function","modifiers":[],"parent":"libtmux.workspace.cli","signatures":[{"raw":"(main &key (arguments (command-line-arguments)) (stdout *standard-output*) (stderr *error-output*))","params":[{"name":"arguments","default":"(command-line-arguments)","optional":true,"keywordOnly":true},{"name":"stdout","default":"*standard-output*","optional":true,"keywordOnly":true},{"name":"stderr","default":"*error-output*","optional":true,"keywordOnly":true}]}],"product":"workspace","package":"libtmux/workspace/cli","publicOwner":"libtmux.workspace.cli","apiScope":"exported","doc":{"summary":"Run the workspace CLI for ARGUMENTS and return process status 0, 1, or 2.\nVALIDATE is local. PLAN without an endpoint is local and requires workspace/1;\nendpoint PLAN reads a snapshot or owned state before producing a local preview.\nAPPLY and owned-only INSPECT require --socket-path. --program selects the native\nexecutable. The standalone --reconcile flag is owned-only for PLAN and APPLY.\nOptions and schema misuse fail before opening a client. The scoped client closes\nwithout terminating the server. STDOUT receives one JSON result or help.\nSTDERR receives usage text or one JSON error retaining condition causes, failed\nstep data, and command outcomes, including byte arrays and unknown dispatch\nstatus. An unavailable exit code or failed step is omitted. MAIN does not call\nUIOP:QUIT, close caller streams, or enter the debugger.\nOwned summaries add DATA with native lowercase keyword names. Vectors are arrays,\nBoolean fields preserve false and absent optional values become null. Environment\nand session-group associations are objects. Native snapshots are not serialized.\nCompleted INSPECT returns 0 even for busy or invalid ownership; DATA's COMPLETE-P\ndescribes read completion, not readiness. Failed inspection retains its partial\ndata and original/terminal causes. Nested condition details stop after eight\nlevels and mark detailsTruncated. No command is automatically retried.","body":"See also: `libtmux.workspace:apply-workspace`, `libtmux:outcome-phase`, `libtmux:outcome-status`.","seeAlso":["libtmux.workspace:apply-workspace","libtmux:outcome-phase","libtmux:outcome-status"]},"source":{"file":"src/workspace-cli.lisp","line":402,"repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","extractedRevision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3"},"slug":"libtmux-workspace-cli-main"}]} diff --git a/site/src/data/api/lisp.nav.json b/site/src/data/api/lisp.nav.json index ef1c910e1..e2d65c718 100644 --- a/site/src/data/api/lisp.nav.json +++ b/site/src/data/api/lisp.nav.json @@ -1 +1 @@ -{"port":"lisp","buckets":[{"id":"server","label":"Server","collapsed":false},{"id":"session","label":"Session","collapsed":false},{"id":"window","label":"Window","collapsed":false},{"id":"pane","label":"Pane","collapsed":false},{"id":"client","label":"Client","collapsed":false},{"id":"hooks","label":"Hooks","collapsed":false},{"id":"options","label":"Options","collapsed":false,"children":[{"id":"options-functions","label":"Functions","collapsed":false},{"id":"options-constants","label":"Constants and variables","collapsed":false}]},{"id":"keys","label":"Keys and bindings","collapsed":false},{"id":"buffers","label":"Buffers","collapsed":false},{"id":"layout","label":"Layout and geometry","collapsed":false},{"id":"environment","label":"Environment","collapsed":false},{"id":"capabilities","label":"Terminal capabilities","collapsed":false},{"id":"version","label":"Versions","collapsed":false},{"id":"commands","label":"Commands","collapsed":false},{"id":"control","label":"Control mode","collapsed":false},{"id":"formats","label":"Formats","collapsed":false},{"id":"queries","label":"Queries","collapsed":false,"children":[{"id":"queries-fields","label":"Fields","collapsed":false},{"id":"queries-operators","label":"Operators","collapsed":false},{"id":"queries-expressions","label":"Expressions","collapsed":false}]},{"id":"snapshots","label":"Snapshots","collapsed":false},{"id":"workspace","label":"Workspaces","collapsed":false,"children":[{"id":"workspace-plan","label":"Plans","collapsed":false},{"id":"workspace-steps","label":"Steps","collapsed":false},{"id":"workspace-targets","label":"Targets and slots","collapsed":false},{"id":"workspace-session","label":"Session","collapsed":false},{"id":"workspace-window","label":"Window","collapsed":false},{"id":"workspace-pane","label":"Pane","collapsed":false},{"id":"workspace-functions","label":"Functions","collapsed":false},{"id":"workspace-constants","label":"Constants and variables","collapsed":false}]},{"id":"requests","label":"Requests","collapsed":true,"children":[{"id":"requests-server","label":"Server","collapsed":false},{"id":"requests-session","label":"Session","collapsed":false},{"id":"requests-window","label":"Window","collapsed":false},{"id":"requests-pane","label":"Pane","collapsed":false},{"id":"requests-client","label":"Client","collapsed":false}]},{"id":"errors","label":"Errors","collapsed":true,"children":[{"id":"errors-server","label":"Server","collapsed":false},{"id":"errors-session","label":"Session","collapsed":false},{"id":"errors-window","label":"Window","collapsed":false},{"id":"errors-pane","label":"Pane","collapsed":false}]},{"id":"constants","label":"Constants and enums","collapsed":true,"children":[{"id":"constants-server","label":"Server","collapsed":false},{"id":"constants-session","label":"Session","collapsed":false},{"id":"constants-window","label":"Window","collapsed":false},{"id":"constants-pane","label":"Pane","collapsed":false},{"id":"constants-client","label":"Client","collapsed":false}]},{"id":"runtime","label":"Runtime adapters","collapsed":false},{"id":"async","label":"Async","collapsed":false},{"id":"mcp","label":"MCP","collapsed":true,"children":[{"id":"mcp-functions","label":"Functions","collapsed":false},{"id":"mcp-constants","label":"Constants and variables","collapsed":false}]},{"id":"testing","label":"Testing utilities","collapsed":true},{"id":"internal","label":"Internal","collapsed":true,"children":[{"id":"internal-commands","label":"Commands","collapsed":false},{"id":"internal-options","label":"Options","collapsed":false}]}],"assignments":{"server":[{"id":"libtmux:client","name":"client","slug":"libtmux-client","kind":"class"},{"id":"libtmux:daemon","name":"daemon","slug":"libtmux-daemon","kind":"class"},{"id":"libtmux:daemon-cleanup-failures","name":"daemon-cleanup-failures","slug":"libtmux-daemon-cleanup-failures","kind":"function"},{"id":"libtmux:daemon-failure","name":"daemon-failure","slug":"libtmux-daemon-failure","kind":"function"},{"id":"libtmux:daemon-program","name":"daemon-program","slug":"libtmux-daemon-program","kind":"function"},{"id":"libtmux:daemon-socket-path","name":"daemon-socket-path","slug":"libtmux-daemon-socket-path","kind":"function"},{"id":"libtmux:daemon-state","name":"daemon-state","slug":"libtmux-daemon-state","kind":"function"},{"id":"libtmux:kill-server","name":"kill-server","slug":"libtmux-kill-server","kind":"function"},{"id":"libtmux:list-server-access","name":"list-server-access","slug":"libtmux-list-server-access","kind":"function"},{"id":"libtmux:lock-server","name":"lock-server","slug":"libtmux-lock-server","kind":"function"},{"id":"libtmux:pending-daemon-cleanups","name":"pending-daemon-cleanups","slug":"libtmux-pending-daemon-cleanups","kind":"function"},{"id":"libtmux:server-access","name":"server-access","slug":"libtmux-server-access","kind":"function"},{"id":"libtmux:start-daemon","name":"start-daemon","slug":"libtmux-start-daemon","kind":"function"},{"id":"libtmux:stop-daemon","name":"stop-daemon","slug":"libtmux-stop-daemon","kind":"function"},{"id":"libtmux:with-daemon","name":"with-daemon","slug":"libtmux-with-daemon","kind":"function"}],"session":[{"id":"libtmux:session/type","name":"session","slug":"libtmux-session-type","kind":"class"},{"id":"libtmux:fetch-sessions","name":"fetch-sessions","slug":"libtmux-fetch-sessions","kind":"function"},{"id":"libtmux:kill-session","name":"kill-session","slug":"libtmux-kill-session","kind":"function"},{"id":"libtmux:lock-session","name":"lock-session","slug":"libtmux-lock-session","kind":"function"},{"id":"libtmux:new-session","name":"new-session","slug":"libtmux-new-session","kind":"function"},{"id":"libtmux:rename-session","name":"rename-session","slug":"libtmux-rename-session","kind":"function"},{"id":"libtmux:session/function","name":"session","slug":"libtmux-session-function","kind":"function"},{"id":"libtmux:sessions","name":"sessions","slug":"libtmux-sessions","kind":"function"}],"window":[{"id":"libtmux:window/type","name":"window","slug":"libtmux-window-type","kind":"class"},{"id":"libtmux:window-link","name":"window-link","slug":"libtmux-window-link","kind":"class"},{"id":"libtmux:fetch-windows","name":"fetch-windows","slug":"libtmux-fetch-windows","kind":"function"},{"id":"libtmux:kill-window","name":"kill-window","slug":"libtmux-kill-window","kind":"function"},{"id":"libtmux:last-window","name":"last-window","slug":"libtmux-last-window","kind":"function"},{"id":"libtmux:link-window","name":"link-window","slug":"libtmux-link-window","kind":"function"},{"id":"libtmux:move-window","name":"move-window","slug":"libtmux-move-window","kind":"function"},{"id":"libtmux:new-window","name":"new-window","slug":"libtmux-new-window","kind":"function"},{"id":"libtmux:next-window","name":"next-window","slug":"libtmux-next-window","kind":"function"},{"id":"libtmux:previous-window","name":"previous-window","slug":"libtmux-previous-window","kind":"function"},{"id":"libtmux:rename-window","name":"rename-window","slug":"libtmux-rename-window","kind":"function"},{"id":"libtmux:resize-window","name":"resize-window","slug":"libtmux-resize-window","kind":"function"},{"id":"libtmux:rotate-window","name":"rotate-window","slug":"libtmux-rotate-window","kind":"function"},{"id":"libtmux:select-window","name":"select-window","slug":"libtmux-select-window","kind":"function"},{"id":"libtmux:swap-windows","name":"swap-windows","slug":"libtmux-swap-windows","kind":"function"},{"id":"libtmux:unlink-window","name":"unlink-window","slug":"libtmux-unlink-window","kind":"function"},{"id":"libtmux:window/function","name":"window","slug":"libtmux-window-function","kind":"function"},{"id":"libtmux:window-links","name":"window-links","slug":"libtmux-window-links","kind":"function"},{"id":"libtmux:windows","name":"windows","slug":"libtmux-windows","kind":"function"}],"pane":[{"id":"libtmux:pane","name":"pane","slug":"libtmux-pane","kind":"class"},{"id":"libtmux:break-pane","name":"break-pane","slug":"libtmux-break-pane","kind":"function"},{"id":"libtmux:clear-history","name":"clear-history","slug":"libtmux-clear-history","kind":"function"},{"id":"libtmux:copy-mode","name":"copy-mode","slug":"libtmux-copy-mode","kind":"function"},{"id":"libtmux:current-path","name":"current-path","slug":"libtmux-current-path","kind":"function"},{"id":"libtmux:dead-p","name":"dead-p","slug":"libtmux-dead-p","kind":"function"},{"id":"libtmux:fetch-panes","name":"fetch-panes","slug":"libtmux-fetch-panes","kind":"function"},{"id":"libtmux:join-pane","name":"join-pane","slug":"libtmux-join-pane","kind":"function"},{"id":"libtmux:kill-pane","name":"kill-pane","slug":"libtmux-kill-pane","kind":"function"},{"id":"libtmux:last-pane","name":"last-pane","slug":"libtmux-last-pane","kind":"function"},{"id":"libtmux:move-pane","name":"move-pane","slug":"libtmux-move-pane","kind":"function"},{"id":"libtmux:panes","name":"panes","slug":"libtmux-panes","kind":"function"},{"id":"libtmux:resize-pane","name":"resize-pane","slug":"libtmux-resize-pane","kind":"function"},{"id":"libtmux:select-pane","name":"select-pane","slug":"libtmux-select-pane","kind":"function"},{"id":"libtmux:split-pane","name":"split-pane","slug":"libtmux-split-pane","kind":"function"},{"id":"libtmux:swap-panes","name":"swap-panes","slug":"libtmux-swap-panes","kind":"function"}],"client":[{"id":"libtmux:attached-client","name":"attached-client","slug":"libtmux-attached-client","kind":"class"},{"id":"libtmux:client-cleanup-failures","name":"client-cleanup-failures","slug":"libtmux-client-cleanup-failures","kind":"function"},{"id":"libtmux:client-open-p","name":"client-open-p","slug":"libtmux-client-open-p","kind":"function"},{"id":"libtmux:clients","name":"clients","slug":"libtmux-clients","kind":"function"},{"id":"libtmux:close-client","name":"close-client","slug":"libtmux-close-client","kind":"function"},{"id":"libtmux:detach-client","name":"detach-client","slug":"libtmux-detach-client","kind":"function"},{"id":"libtmux:fetch-clients","name":"fetch-clients","slug":"libtmux-fetch-clients","kind":"function"},{"id":"libtmux:lock-client","name":"lock-client","slug":"libtmux-lock-client","kind":"function"},{"id":"libtmux:open-client","name":"open-client","slug":"libtmux-open-client","kind":"function"},{"id":"libtmux:refresh-client","name":"refresh-client","slug":"libtmux-refresh-client","kind":"function"},{"id":"libtmux:run-command","name":"run-command","slug":"libtmux-run-command","kind":"function"},{"id":"libtmux:suspend-client","name":"suspend-client","slug":"libtmux-suspend-client","kind":"function"},{"id":"libtmux:switch-client","name":"switch-client","slug":"libtmux-switch-client","kind":"function"},{"id":"libtmux:tmux-version","name":"tmux-version","slug":"libtmux-tmux-version","kind":"function"},{"id":"libtmux:with-client","name":"with-client","slug":"libtmux-with-client","kind":"function"}],"hooks":[{"id":"libtmux:set-hook","name":"set-hook","slug":"libtmux-set-hook","kind":"function"},{"id":"libtmux:show-hooks","name":"show-hooks","slug":"libtmux-show-hooks","kind":"function"},{"id":"libtmux:show-hooks-text","name":"show-hooks-text","slug":"libtmux-show-hooks-text","kind":"function"},{"id":"libtmux:unset-hook","name":"unset-hook","slug":"libtmux-unset-hook","kind":"function"}],"options":[],"options-functions":[{"id":"libtmux:set-option","name":"set-option","slug":"libtmux-set-option","kind":"function"},{"id":"libtmux:show-option","name":"show-option","slug":"libtmux-show-option","kind":"function"},{"id":"libtmux:show-options","name":"show-options","slug":"libtmux-show-options","kind":"function"},{"id":"libtmux:show-options-text","name":"show-options-text","slug":"libtmux-show-options-text","kind":"function"},{"id":"libtmux:unset-option","name":"unset-option","slug":"libtmux-unset-option","kind":"function"}],"options-constants":[],"keys":[{"id":"libtmux:bind-key","name":"bind-key","slug":"libtmux-bind-key","kind":"function"},{"id":"libtmux:list-commands","name":"list-commands","slug":"libtmux-list-commands","kind":"function"},{"id":"libtmux:list-keys","name":"list-keys","slug":"libtmux-list-keys","kind":"function"},{"id":"libtmux:send-keys","name":"send-keys","slug":"libtmux-send-keys","kind":"function"},{"id":"libtmux:send-prefix","name":"send-prefix","slug":"libtmux-send-prefix","kind":"function"},{"id":"libtmux:send-text","name":"send-text","slug":"libtmux-send-text","kind":"function"},{"id":"libtmux:unbind-key","name":"unbind-key","slug":"libtmux-unbind-key","kind":"function"}],"buffers":[{"id":"libtmux:delete-buffer","name":"delete-buffer","slug":"libtmux-delete-buffer","kind":"function"},{"id":"libtmux:list-buffers","name":"list-buffers","slug":"libtmux-list-buffers","kind":"function"},{"id":"libtmux:load-buffer","name":"load-buffer","slug":"libtmux-load-buffer","kind":"function"},{"id":"libtmux:paste-buffer","name":"paste-buffer","slug":"libtmux-paste-buffer","kind":"function"},{"id":"libtmux:save-buffer","name":"save-buffer","slug":"libtmux-save-buffer","kind":"function"},{"id":"libtmux:set-buffer","name":"set-buffer","slug":"libtmux-set-buffer","kind":"function"},{"id":"libtmux:show-buffer","name":"show-buffer","slug":"libtmux-show-buffer","kind":"function"}],"layout":[{"id":"libtmux:height","name":"height","slug":"libtmux-height","kind":"function"},{"id":"libtmux:next-layout","name":"next-layout","slug":"libtmux-next-layout","kind":"function"},{"id":"libtmux:previous-layout","name":"previous-layout","slug":"libtmux-previous-layout","kind":"function"},{"id":"libtmux:select-layout","name":"select-layout","slug":"libtmux-select-layout","kind":"function"},{"id":"libtmux:width","name":"width","slug":"libtmux-width","kind":"function"}],"environment":[{"id":"libtmux:remove-environment","name":"remove-environment","slug":"libtmux-remove-environment","kind":"function"},{"id":"libtmux:set-environment","name":"set-environment","slug":"libtmux-set-environment","kind":"function"},{"id":"libtmux:show-environment","name":"show-environment","slug":"libtmux-show-environment","kind":"function"},{"id":"libtmux:show-environment-text","name":"show-environment-text","slug":"libtmux-show-environment-text","kind":"function"},{"id":"libtmux:unset-environment","name":"unset-environment","slug":"libtmux-unset-environment","kind":"function"}],"capabilities":[],"version":[],"commands":[{"id":"libtmux:cancellation-token","name":"cancellation-token","slug":"libtmux-cancellation-token","kind":"class"},{"id":"libtmux:command-outcome","name":"command-outcome","slug":"libtmux-command-outcome","kind":"class"},{"id":"libtmux:cancel","name":"cancel","slug":"libtmux-cancel","kind":"function"},{"id":"libtmux:cancelled-p","name":"cancelled-p","slug":"libtmux-cancelled-p","kind":"function"},{"id":"libtmux:current-command","name":"current-command","slug":"libtmux-current-command","kind":"function"},{"id":"libtmux:make-cancellation-token","name":"make-cancellation-token","slug":"libtmux-make-cancellation-token","kind":"function"},{"id":"libtmux:outcome-arguments","name":"outcome-arguments","slug":"libtmux-outcome-arguments","kind":"function"},{"id":"libtmux:outcome-cleanup-failures","name":"outcome-cleanup-failures","slug":"libtmux-outcome-cleanup-failures","kind":"function"},{"id":"libtmux:outcome-elapsed","name":"outcome-elapsed","slug":"libtmux-outcome-elapsed","kind":"function"},{"id":"libtmux:outcome-exit-code","name":"outcome-exit-code","slug":"libtmux-outcome-exit-code","kind":"function"},{"id":"libtmux:outcome-observation-error","name":"outcome-observation-error","slug":"libtmux-outcome-observation-error","kind":"function"},{"id":"libtmux:outcome-phase","name":"outcome-phase","slug":"libtmux-outcome-phase","kind":"function"},{"id":"libtmux:outcome-reason","name":"outcome-reason","slug":"libtmux-outcome-reason","kind":"function"},{"id":"libtmux:outcome-status","name":"outcome-status","slug":"libtmux-outcome-status","kind":"function"},{"id":"libtmux:outcome-stderr","name":"outcome-stderr","slug":"libtmux-outcome-stderr","kind":"function"},{"id":"libtmux:outcome-stdout","name":"outcome-stdout","slug":"libtmux-outcome-stdout","kind":"function"},{"id":"libtmux:outcome-value","name":"outcome-value","slug":"libtmux-outcome-value","kind":"function"},{"id":"libtmux:pipe-pane","name":"pipe-pane","slug":"libtmux-pipe-pane","kind":"function"},{"id":"libtmux:respawn-pane","name":"respawn-pane","slug":"libtmux-respawn-pane","kind":"function"},{"id":"libtmux:respawn-window","name":"respawn-window","slug":"libtmux-respawn-window","kind":"function"}],"control":[{"id":"libtmux.control","name":"libtmux.control","slug":"libtmux-control","kind":"module"},{"id":"libtmux.control:connection","name":"connection","slug":"libtmux-control-connection","kind":"class"},{"id":"libtmux.control:request","name":"request","slug":"libtmux-control-request","kind":"class"},{"id":"libtmux.control:await-request","name":"await-request","slug":"libtmux-control-await-request","kind":"function"},{"id":"libtmux.control:cancel-request","name":"cancel-request","slug":"libtmux-control-cancel-request","kind":"function"},{"id":"libtmux.control:close-connection","name":"close-connection","slug":"libtmux-control-close-connection","kind":"function"},{"id":"libtmux.control:connection-cleanup-failures","name":"connection-cleanup-failures","slug":"libtmux-control-connection-cleanup-failures","kind":"function"},{"id":"libtmux.control:connection-failure","name":"connection-failure","slug":"libtmux-control-connection-failure","kind":"function"},{"id":"libtmux.control:connection-state","name":"connection-state","slug":"libtmux-control-connection-state","kind":"function"},{"id":"libtmux.control:error-connection","name":"error-connection","slug":"libtmux-control-error-connection","kind":"function"},{"id":"libtmux.control:next-event","name":"next-event","slug":"libtmux-control-next-event","kind":"function"},{"id":"libtmux.control:open-connection","name":"open-connection","slug":"libtmux-control-open-connection","kind":"function"},{"id":"libtmux.control:pending-cleanups","name":"pending-cleanups","slug":"libtmux-control-pending-cleanups","kind":"function"},{"id":"libtmux.control:reconnect","name":"reconnect","slug":"libtmux-control-reconnect","kind":"function"},{"id":"libtmux.control:request-state","name":"request-state","slug":"libtmux-control-request-state","kind":"function"},{"id":"libtmux.control:submit-command","name":"submit-command","slug":"libtmux-control-submit-command","kind":"function"},{"id":"libtmux:wait-for","name":"wait-for","slug":"libtmux-wait-for","kind":"function"},{"id":"libtmux.control:with-connection","name":"with-connection","slug":"libtmux-control-with-connection","kind":"function"},{"id":"libtmux.control:with-reconnection","name":"with-reconnection","slug":"libtmux-control-with-reconnection","kind":"function"}],"formats":[{"id":"libtmux:display-message","name":"display-message","slug":"libtmux-display-message","kind":"function"},{"id":"libtmux.json:document-limit","name":"document-limit","slug":"libtmux-json-document-limit","kind":"function"},{"id":"libtmux.json:document-path","name":"document-path","slug":"libtmux-json-document-path","kind":"function"}],"queries":[{"id":"libtmux.query","name":"libtmux.query","slug":"libtmux-query","kind":"module"},{"id":"libtmux.query:compiled-filter","name":"compiled-filter","slug":"libtmux-query-compiled-filter","kind":"class"},{"id":"libtmux.query:query-set","name":"query-set","slug":"libtmux-query-query-set","kind":"class"},{"id":"libtmux.query:compile-filter","name":"compile-filter","slug":"libtmux-query-compile-filter","kind":"function"},{"id":"libtmux.query:count-exact-p","name":"count-exact-p","slug":"libtmux-query-count-exact-p","kind":"function"},{"id":"libtmux.query:error-expected","name":"error-expected","slug":"libtmux-query-error-expected","kind":"function"},{"id":"libtmux.query:error-operator","name":"error-operator","slug":"libtmux-query-error-operator","kind":"function"},{"id":"libtmux.query:error-path","name":"error-path","slug":"libtmux-query-error-path","kind":"function"},{"id":"libtmux.query:error-received","name":"error-received","slug":"libtmux-query-error-received","kind":"function"},{"id":"libtmux.query:explain","name":"explain","slug":"libtmux-query-explain","kind":"function"},{"id":"libtmux.query:expression","name":"expression","slug":"libtmux-query-expression","kind":"function"},{"id":"libtmux:field-value","name":"field-value","slug":"libtmux-field-value","kind":"function"},{"id":"libtmux.query:fields","name":"fields","slug":"libtmux-query-fields","kind":"function"},{"id":"libtmux.query:from","name":"from","slug":"libtmux-query-from","kind":"function"},{"id":"libtmux.query:items","name":"items","slug":"libtmux-query-items","kind":"function"},{"id":"libtmux.query:match-count","name":"match-count","slug":"libtmux-query-match-count","kind":"function"},{"id":"libtmux.query:match-sample","name":"match-sample","slug":"libtmux-query-match-sample","kind":"function"},{"id":"libtmux.query:matching","name":"matching","slug":"libtmux-query-matching","kind":"function"},{"id":"libtmux.query:one","name":"one","slug":"libtmux-query-one","kind":"function"},{"id":"libtmux.query:one-or-none","name":"one-or-none","slug":"libtmux-query-one-or-none","kind":"function"},{"id":"libtmux.query:order-by","name":"order-by","slug":"libtmux-query-order-by","kind":"function"},{"id":"libtmux.query:predicate","name":"predicate","slug":"libtmux-query-predicate","kind":"function"},{"id":"libtmux.query:query-set-model","name":"query-set-model","slug":"libtmux-query-query-set-model","kind":"function"},{"id":"libtmux.json:read-filter","name":"read-filter","slug":"libtmux-json-read-filter","kind":"function"},{"id":"libtmux.query:required-fields","name":"required-fields","slug":"libtmux-query-required-fields","kind":"function"},{"id":"libtmux.query:required-relations","name":"required-relations","slug":"libtmux-query-required-relations","kind":"function"},{"id":"libtmux.query:where","name":"where","slug":"libtmux-query-where","kind":"function"},{"id":"libtmux.query:where-if","name":"where-if","slug":"libtmux-query-where-if","kind":"function"},{"id":"libtmux.json:write-filter","name":"write-filter","slug":"libtmux-json-write-filter","kind":"function"}],"queries-fields":[],"queries-operators":[],"queries-expressions":[],"snapshots":[{"id":"libtmux:entity","name":"entity","slug":"libtmux-entity","kind":"class"},{"id":"libtmux:snapshot","name":"snapshot","slug":"libtmux-snapshot","kind":"class"},{"id":"libtmux:active-p","name":"active-p","slug":"libtmux-active-p","kind":"function"},{"id":"libtmux:capture-pane","name":"capture-pane","slug":"libtmux-capture-pane","kind":"function"},{"id":"libtmux:capture-pane-bytes","name":"capture-pane-bytes","slug":"libtmux-capture-pane-bytes","kind":"function"},{"id":"libtmux:entity-data","name":"entity-data","slug":"libtmux-entity-data","kind":"function"},{"id":"libtmux:entity-model","name":"entity-model","slug":"libtmux-entity-model","kind":"function"},{"id":"libtmux:fetch-snapshot","name":"fetch-snapshot","slug":"libtmux-fetch-snapshot","kind":"function"},{"id":"libtmux:id","name":"id","slug":"libtmux-id","kind":"function"},{"id":"libtmux:index","name":"index","slug":"libtmux-index","kind":"function"},{"id":"libtmux:name","name":"name","slug":"libtmux-name","kind":"function"},{"id":"libtmux:provenance","name":"provenance","slug":"libtmux-provenance","kind":"function"},{"id":"libtmux:refresh","name":"refresh","slug":"libtmux-refresh","kind":"function"},{"id":"libtmux:same-entity-p","name":"same-entity-p","slug":"libtmux-same-entity-p","kind":"function"},{"id":"libtmux:title","name":"title","slug":"libtmux-title","kind":"function"}],"workspace":[{"id":"libtmux.workspace:workspace","name":"workspace","slug":"libtmux-workspace-workspace","kind":"class"},{"id":"libtmux.workspace:workspace-inspection","name":"workspace-inspection","slug":"libtmux-workspace-workspace-inspection","kind":"class"},{"id":"libtmux.workspace:workspace-plan","name":"workspace-plan","slug":"libtmux-workspace-workspace-plan","kind":"class"},{"id":"libtmux.workspace:workspace-result","name":"workspace-result","slug":"libtmux-workspace-workspace-result","kind":"class"},{"id":"libtmux.workspace:workspace-state","name":"workspace-state","slug":"libtmux-workspace-workspace-state","kind":"class"},{"id":"libtmux.workspace:workspace-step","name":"workspace-step","slug":"libtmux-workspace-workspace-step","kind":"class"},{"id":"libtmux.workspace.cli:main","name":"main","slug":"libtmux-workspace-cli-main","kind":"function"}],"workspace-plan":[],"workspace-steps":[],"workspace-targets":[],"workspace-session":[],"workspace-window":[],"workspace-pane":[],"workspace-functions":[{"id":"libtmux.workspace:apply-workspace","name":"apply-workspace","slug":"libtmux-workspace-apply-workspace","kind":"function"},{"id":"libtmux.workspace:failed-step","name":"failed-step","slug":"libtmux-workspace-failed-step","kind":"function"},{"id":"libtmux.workspace:fetch-workspace-state","name":"fetch-workspace-state","slug":"libtmux-workspace-fetch-workspace-state","kind":"function"},{"id":"libtmux.workspace:inspect-workspace","name":"inspect-workspace","slug":"libtmux-workspace-inspect-workspace","kind":"function"},{"id":"libtmux.workspace:inspection-causes","name":"inspection-causes","slug":"libtmux-workspace-inspection-causes","kind":"function"},{"id":"libtmux.workspace:inspection-data","name":"inspection-data","slug":"libtmux-workspace-inspection-data","kind":"function"},{"id":"libtmux.workspace:inspection-evidence","name":"inspection-evidence","slug":"libtmux-workspace-inspection-evidence","kind":"function"},{"id":"libtmux.workspace:inspection-outcomes","name":"inspection-outcomes","slug":"libtmux-workspace-inspection-outcomes","kind":"function"},{"id":"libtmux.workspace:inspection-snapshots","name":"inspection-snapshots","slug":"libtmux-workspace-inspection-snapshots","kind":"function"},{"id":"libtmux.workspace:inspection-terminal","name":"inspection-terminal","slug":"libtmux-workspace-inspection-terminal","kind":"function"},{"id":"libtmux.workspace:make-workspace","name":"make-workspace","slug":"libtmux-workspace-make-workspace","kind":"function"},{"id":"libtmux.workspace:parse-workspace","name":"parse-workspace","slug":"libtmux-workspace-parse-workspace","kind":"function"},{"id":"libtmux.workspace:plan-data","name":"plan-data","slug":"libtmux-workspace-plan-data","kind":"function"},{"id":"libtmux.workspace:plan-steps","name":"plan-steps","slug":"libtmux-workspace-plan-steps","kind":"function"},{"id":"libtmux.workspace:plan-workspace","name":"plan-workspace","slug":"libtmux-workspace-plan-workspace","kind":"function"},{"id":"libtmux.workspace:read-workspace","name":"read-workspace","slug":"libtmux-workspace-read-workspace","kind":"function"},{"id":"libtmux.workspace:result-causes","name":"result-causes","slug":"libtmux-workspace-result-causes","kind":"function"},{"id":"libtmux.workspace:result-created-p","name":"result-created-p","slug":"libtmux-workspace-result-created-p","kind":"function"},{"id":"libtmux.workspace:result-data","name":"result-data","slug":"libtmux-workspace-result-data","kind":"function"},{"id":"libtmux.workspace:result-outcomes","name":"result-outcomes","slug":"libtmux-workspace-result-outcomes","kind":"function"},{"id":"libtmux.workspace:result-snapshot","name":"result-snapshot","slug":"libtmux-workspace-result-snapshot","kind":"function"},{"id":"libtmux.workspace:state-causes","name":"state-causes","slug":"libtmux-workspace-state-causes","kind":"function"},{"id":"libtmux.workspace:state-data","name":"state-data","slug":"libtmux-workspace-state-data","kind":"function"},{"id":"libtmux.workspace:state-outcomes","name":"state-outcomes","slug":"libtmux-workspace-state-outcomes","kind":"function"},{"id":"libtmux.workspace:state-snapshot","name":"state-snapshot","slug":"libtmux-workspace-state-snapshot","kind":"function"},{"id":"libtmux.workspace:step-action","name":"step-action","slug":"libtmux-workspace-step-action","kind":"function"},{"id":"libtmux.workspace:step-data","name":"step-data","slug":"libtmux-workspace-step-data","kind":"function"},{"id":"libtmux.workspace:workspace-data","name":"workspace-data","slug":"libtmux-workspace-workspace-data","kind":"function"},{"id":"libtmux.workspace:workspace-limit","name":"workspace-limit","slug":"libtmux-workspace-workspace-limit","kind":"function"},{"id":"libtmux.workspace:workspace-path","name":"workspace-path","slug":"libtmux-workspace-workspace-path","kind":"function"}],"workspace-constants":[],"requests":[],"requests-server":[],"requests-session":[],"requests-window":[],"requests-pane":[],"requests-client":[],"errors":[{"id":"libtmux:cleanup-failed","name":"cleanup-failed","slug":"libtmux-cleanup-failed","kind":"exception"},{"id":"libtmux:client-busy","name":"client-busy","slug":"libtmux-client-busy","kind":"exception"},{"id":"libtmux:client-closed","name":"client-closed","slug":"libtmux-client-closed","kind":"exception"},{"id":"libtmux:command-cancelled","name":"command-cancelled","slug":"libtmux-command-cancelled","kind":"exception"},{"id":"libtmux:command-failed","name":"command-failed","slug":"libtmux-command-failed","kind":"exception"},{"id":"libtmux:configuration-read-failed","name":"configuration-read-failed","slug":"libtmux-configuration-read-failed","kind":"exception"},{"id":"libtmux:daemon-cleanup-failed","name":"daemon-cleanup-failed","slug":"libtmux-daemon-cleanup-failed","kind":"exception"},{"id":"libtmux:daemon-start-failed","name":"daemon-start-failed","slug":"libtmux-daemon-start-failed","kind":"exception"},{"id":"libtmux:deadline-exceeded","name":"deadline-exceeded","slug":"libtmux-deadline-exceeded","kind":"exception"},{"id":"libtmux:decoding-error","name":"decoding-error","slug":"libtmux-decoding-error","kind":"exception"},{"id":"libtmux:field-unavailable","name":"field-unavailable","slug":"libtmux-field-unavailable","kind":"exception"},{"id":"libtmux:incomplete-snapshot","name":"incomplete-snapshot","slug":"libtmux-incomplete-snapshot","kind":"exception"},{"id":"libtmux:invalid-argument","name":"invalid-argument","slug":"libtmux-invalid-argument","kind":"exception"},{"id":"libtmux:libtmux-error","name":"libtmux-error","slug":"libtmux-libtmux-error","kind":"exception"},{"id":"libtmux:outcome-unknown","name":"outcome-unknown","slug":"libtmux-outcome-unknown","kind":"exception"},{"id":"libtmux:output-limit-exceeded","name":"output-limit-exceeded","slug":"libtmux-output-limit-exceeded","kind":"exception"},{"id":"libtmux:stale-target","name":"stale-target","slug":"libtmux-stale-target","kind":"exception"},{"id":"libtmux:unsupported-capability","name":"unsupported-capability","slug":"libtmux-unsupported-capability","kind":"exception"},{"id":"libtmux:unsupported-configuration","name":"unsupported-configuration","slug":"libtmux-unsupported-configuration","kind":"exception"},{"id":"libtmux:unsupported-platform","name":"unsupported-platform","slug":"libtmux-unsupported-platform","kind":"exception"},{"id":"libtmux:unsupported-tmux","name":"unsupported-tmux","slug":"libtmux-unsupported-tmux","kind":"exception"},{"id":"libtmux.control:connection-busy","name":"connection-busy","slug":"libtmux-control-connection-busy","kind":"exception"},{"id":"libtmux.control:connection-cleanup-failed","name":"connection-cleanup-failed","slug":"libtmux-control-connection-cleanup-failed","kind":"exception"},{"id":"libtmux.control:connection-closed","name":"connection-closed","slug":"libtmux-control-connection-closed","kind":"exception"},{"id":"libtmux.control:connection-error","name":"connection-error","slug":"libtmux-control-connection-error","kind":"exception"},{"id":"libtmux.control:connection-stale","name":"connection-stale","slug":"libtmux-control-connection-stale","kind":"exception"},{"id":"libtmux.control:connection-start-failed","name":"connection-start-failed","slug":"libtmux-control-connection-start-failed","kind":"exception"},{"id":"libtmux.json:filter-document-limit-exceeded","name":"filter-document-limit-exceeded","slug":"libtmux-json-filter-document-limit-exceeded","kind":"exception"},{"id":"libtmux.json:invalid-filter-document","name":"invalid-filter-document","slug":"libtmux-json-invalid-filter-document","kind":"exception"},{"id":"libtmux.query:ambiguous-match","name":"ambiguous-match","slug":"libtmux-query-ambiguous-match","kind":"exception"},{"id":"libtmux.query:invalid-filter","name":"invalid-filter","slug":"libtmux-query-invalid-filter","kind":"exception"},{"id":"libtmux.query:invalid-query-target","name":"invalid-query-target","slug":"libtmux-query-invalid-query-target","kind":"exception"},{"id":"libtmux.query:no-match","name":"no-match","slug":"libtmux-query-no-match","kind":"exception"},{"id":"libtmux.query:query-limit-exceeded","name":"query-limit-exceeded","slug":"libtmux-query-query-limit-exceeded","kind":"exception"},{"id":"libtmux.workspace:invalid-workspace","name":"invalid-workspace","slug":"libtmux-workspace-invalid-workspace","kind":"exception"},{"id":"libtmux.workspace:invalid-workspace-document","name":"invalid-workspace-document","slug":"libtmux-workspace-invalid-workspace-document","kind":"exception"},{"id":"libtmux.workspace:workspace-apply-failed","name":"workspace-apply-failed","slug":"libtmux-workspace-workspace-apply-failed","kind":"exception"},{"id":"libtmux.workspace:workspace-conflict","name":"workspace-conflict","slug":"libtmux-workspace-workspace-conflict","kind":"exception"},{"id":"libtmux.workspace:workspace-deadline-exceeded","name":"workspace-deadline-exceeded","slug":"libtmux-workspace-workspace-deadline-exceeded","kind":"exception"},{"id":"libtmux.workspace:workspace-error","name":"workspace-error","slug":"libtmux-workspace-workspace-error","kind":"exception"},{"id":"libtmux.workspace:workspace-inspection-error","name":"workspace-inspection-error","slug":"libtmux-workspace-workspace-inspection-error","kind":"exception"},{"id":"libtmux.workspace:workspace-limit-exceeded","name":"workspace-limit-exceeded","slug":"libtmux-workspace-workspace-limit-exceeded","kind":"exception"},{"id":"libtmux.workspace:workspace-state-error","name":"workspace-state-error","slug":"libtmux-workspace-workspace-state-error","kind":"exception"},{"id":"libtmux:configuration-error-name","name":"configuration-error-name","slug":"libtmux-configuration-error-name","kind":"function"},{"id":"libtmux:configuration-error-scope","name":"configuration-error-scope","slug":"libtmux-configuration-error-scope","kind":"function"},{"id":"libtmux:configuration-partial-records","name":"configuration-partial-records","slug":"libtmux-configuration-partial-records","kind":"function"},{"id":"libtmux:configuration-read-outcomes","name":"configuration-read-outcomes","slug":"libtmux-configuration-read-outcomes","kind":"function"},{"id":"libtmux:error-actual-version","name":"error-actual-version","slug":"libtmux-error-actual-version","kind":"function"},{"id":"libtmux:error-cause","name":"error-cause","slug":"libtmux-error-cause","kind":"function"},{"id":"libtmux:error-client","name":"error-client","slug":"libtmux-error-client","kind":"function"},{"id":"libtmux:error-commands","name":"error-commands","slug":"libtmux-error-commands","kind":"function"},{"id":"libtmux:error-daemon","name":"error-daemon","slug":"libtmux-error-daemon","kind":"function"},{"id":"libtmux:error-feature","name":"error-feature","slug":"libtmux-error-feature","kind":"function"},{"id":"libtmux:error-field","name":"error-field","slug":"libtmux-error-field","kind":"function"},{"id":"libtmux:error-message","name":"error-message","slug":"libtmux-error-message","kind":"function"},{"id":"libtmux:error-model","name":"error-model","slug":"libtmux-error-model","kind":"function"},{"id":"libtmux:error-outcome","name":"error-outcome","slug":"libtmux-error-outcome","kind":"function"},{"id":"libtmux:error-required-version","name":"error-required-version","slug":"libtmux-error-required-version","kind":"function"},{"id":"libtmux:error-setting","name":"error-setting","slug":"libtmux-error-setting","kind":"function"},{"id":"libtmux:error-target","name":"error-target","slug":"libtmux-error-target","kind":"function"}],"errors-server":[],"errors-session":[],"errors-window":[],"errors-pane":[],"constants":[],"constants-server":[],"constants-session":[],"constants-window":[],"constants-pane":[],"constants-client":[],"runtime":[],"async":[],"mcp":[],"mcp-functions":[],"mcp-constants":[],"testing":[],"internal":[],"internal-commands":[],"internal-options":[]},"placement":{"libtmux:client":"server","libtmux:daemon":"server","libtmux:daemon-cleanup-failures":"server","libtmux:daemon-failure":"server","libtmux:daemon-program":"server","libtmux:daemon-socket-path":"server","libtmux:daemon-state":"server","libtmux:kill-server":"server","libtmux:list-server-access":"server","libtmux:lock-server":"server","libtmux:pending-daemon-cleanups":"server","libtmux:server-access":"server","libtmux:start-daemon":"server","libtmux:stop-daemon":"server","libtmux:with-daemon":"server","libtmux:fetch-sessions":"session","libtmux:kill-session":"session","libtmux:lock-session":"session","libtmux:new-session":"session","libtmux:rename-session":"session","libtmux:session/function":"session","libtmux:session/type":"session","libtmux:sessions":"session","libtmux:fetch-windows":"window","libtmux:kill-window":"window","libtmux:last-window":"window","libtmux:link-window":"window","libtmux:move-window":"window","libtmux:new-window":"window","libtmux:next-window":"window","libtmux:previous-window":"window","libtmux:rename-window":"window","libtmux:resize-window":"window","libtmux:rotate-window":"window","libtmux:select-window":"window","libtmux:swap-windows":"window","libtmux:unlink-window":"window","libtmux:window/function":"window","libtmux:window/type":"window","libtmux:window-link":"window","libtmux:window-links":"window","libtmux:windows":"window","libtmux:break-pane":"pane","libtmux:clear-history":"pane","libtmux:copy-mode":"pane","libtmux:current-path":"pane","libtmux:dead-p":"pane","libtmux:fetch-panes":"pane","libtmux:join-pane":"pane","libtmux:kill-pane":"pane","libtmux:last-pane":"pane","libtmux:move-pane":"pane","libtmux:pane":"pane","libtmux:panes":"pane","libtmux:resize-pane":"pane","libtmux:select-pane":"pane","libtmux:split-pane":"pane","libtmux:swap-panes":"pane","libtmux:attached-client":"client","libtmux:client-cleanup-failures":"client","libtmux:client-open-p":"client","libtmux:clients":"client","libtmux:close-client":"client","libtmux:detach-client":"client","libtmux:fetch-clients":"client","libtmux:lock-client":"client","libtmux:open-client":"client","libtmux:refresh-client":"client","libtmux:run-command":"client","libtmux:suspend-client":"client","libtmux:switch-client":"client","libtmux:tmux-version":"client","libtmux:with-client":"client","libtmux:set-hook":"hooks","libtmux:show-hooks":"hooks","libtmux:show-hooks-text":"hooks","libtmux:unset-hook":"hooks","libtmux:set-option":"options-functions","libtmux:show-option":"options-functions","libtmux:show-options":"options-functions","libtmux:show-options-text":"options-functions","libtmux:unset-option":"options-functions","libtmux:bind-key":"keys","libtmux:list-commands":"keys","libtmux:list-keys":"keys","libtmux:send-keys":"keys","libtmux:send-prefix":"keys","libtmux:send-text":"keys","libtmux:unbind-key":"keys","libtmux:delete-buffer":"buffers","libtmux:list-buffers":"buffers","libtmux:load-buffer":"buffers","libtmux:paste-buffer":"buffers","libtmux:save-buffer":"buffers","libtmux:set-buffer":"buffers","libtmux:show-buffer":"buffers","libtmux:height":"layout","libtmux:next-layout":"layout","libtmux:previous-layout":"layout","libtmux:select-layout":"layout","libtmux:width":"layout","libtmux:remove-environment":"environment","libtmux:set-environment":"environment","libtmux:show-environment":"environment","libtmux:show-environment-text":"environment","libtmux:unset-environment":"environment","libtmux:cancel":"commands","libtmux:cancellation-token":"commands","libtmux:cancelled-p":"commands","libtmux:command-outcome":"commands","libtmux:current-command":"commands","libtmux:make-cancellation-token":"commands","libtmux:outcome-arguments":"commands","libtmux:outcome-cleanup-failures":"commands","libtmux:outcome-elapsed":"commands","libtmux:outcome-exit-code":"commands","libtmux:outcome-observation-error":"commands","libtmux:outcome-phase":"commands","libtmux:outcome-reason":"commands","libtmux:outcome-status":"commands","libtmux:outcome-stderr":"commands","libtmux:outcome-stdout":"commands","libtmux:outcome-value":"commands","libtmux:pipe-pane":"commands","libtmux:respawn-pane":"commands","libtmux:respawn-window":"commands","libtmux:wait-for":"control","libtmux.control":"control","libtmux.control:await-request":"control","libtmux.control:cancel-request":"control","libtmux.control:close-connection":"control","libtmux.control:connection":"control","libtmux.control:connection-cleanup-failures":"control","libtmux.control:connection-failure":"control","libtmux.control:connection-state":"control","libtmux.control:error-connection":"control","libtmux.control:next-event":"control","libtmux.control:open-connection":"control","libtmux.control:pending-cleanups":"control","libtmux.control:reconnect":"control","libtmux.control:request":"control","libtmux.control:request-state":"control","libtmux.control:submit-command":"control","libtmux.control:with-connection":"control","libtmux.control:with-reconnection":"control","libtmux:display-message":"formats","libtmux.json:document-limit":"formats","libtmux.json:document-path":"formats","libtmux:field-value":"queries","libtmux.json:read-filter":"queries","libtmux.json:write-filter":"queries","libtmux.query":"queries","libtmux.query:compile-filter":"queries","libtmux.query:compiled-filter":"queries","libtmux.query:count-exact-p":"queries","libtmux.query:error-expected":"queries","libtmux.query:error-operator":"queries","libtmux.query:error-path":"queries","libtmux.query:error-received":"queries","libtmux.query:explain":"queries","libtmux.query:expression":"queries","libtmux.query:fields":"queries","libtmux.query:from":"queries","libtmux.query:items":"queries","libtmux.query:match-count":"queries","libtmux.query:match-sample":"queries","libtmux.query:matching":"queries","libtmux.query:one":"queries","libtmux.query:one-or-none":"queries","libtmux.query:order-by":"queries","libtmux.query:predicate":"queries","libtmux.query:query-set":"queries","libtmux.query:query-set-model":"queries","libtmux.query:required-fields":"queries","libtmux.query:required-relations":"queries","libtmux.query:where":"queries","libtmux.query:where-if":"queries","libtmux:active-p":"snapshots","libtmux:capture-pane":"snapshots","libtmux:capture-pane-bytes":"snapshots","libtmux:entity":"snapshots","libtmux:entity-data":"snapshots","libtmux:entity-model":"snapshots","libtmux:fetch-snapshot":"snapshots","libtmux:id":"snapshots","libtmux:index":"snapshots","libtmux:name":"snapshots","libtmux:provenance":"snapshots","libtmux:refresh":"snapshots","libtmux:same-entity-p":"snapshots","libtmux:snapshot":"snapshots","libtmux:title":"snapshots","libtmux.workspace:workspace":"workspace","libtmux.workspace:workspace-inspection":"workspace","libtmux.workspace:workspace-plan":"workspace","libtmux.workspace:workspace-result":"workspace","libtmux.workspace:workspace-state":"workspace","libtmux.workspace:workspace-step":"workspace","libtmux.workspace.cli:main":"workspace","libtmux.workspace:apply-workspace":"workspace-functions","libtmux.workspace:failed-step":"workspace-functions","libtmux.workspace:fetch-workspace-state":"workspace-functions","libtmux.workspace:inspect-workspace":"workspace-functions","libtmux.workspace:inspection-causes":"workspace-functions","libtmux.workspace:inspection-data":"workspace-functions","libtmux.workspace:inspection-evidence":"workspace-functions","libtmux.workspace:inspection-outcomes":"workspace-functions","libtmux.workspace:inspection-snapshots":"workspace-functions","libtmux.workspace:inspection-terminal":"workspace-functions","libtmux.workspace:make-workspace":"workspace-functions","libtmux.workspace:parse-workspace":"workspace-functions","libtmux.workspace:plan-data":"workspace-functions","libtmux.workspace:plan-steps":"workspace-functions","libtmux.workspace:plan-workspace":"workspace-functions","libtmux.workspace:read-workspace":"workspace-functions","libtmux.workspace:result-causes":"workspace-functions","libtmux.workspace:result-created-p":"workspace-functions","libtmux.workspace:result-data":"workspace-functions","libtmux.workspace:result-outcomes":"workspace-functions","libtmux.workspace:result-snapshot":"workspace-functions","libtmux.workspace:state-causes":"workspace-functions","libtmux.workspace:state-data":"workspace-functions","libtmux.workspace:state-outcomes":"workspace-functions","libtmux.workspace:state-snapshot":"workspace-functions","libtmux.workspace:step-action":"workspace-functions","libtmux.workspace:step-data":"workspace-functions","libtmux.workspace:workspace-data":"workspace-functions","libtmux.workspace:workspace-limit":"workspace-functions","libtmux.workspace:workspace-path":"workspace-functions","libtmux:cleanup-failed":"errors","libtmux:client-busy":"errors","libtmux:client-closed":"errors","libtmux:command-cancelled":"errors","libtmux:command-failed":"errors","libtmux:configuration-error-name":"errors","libtmux:configuration-error-scope":"errors","libtmux:configuration-partial-records":"errors","libtmux:configuration-read-failed":"errors","libtmux:configuration-read-outcomes":"errors","libtmux:daemon-cleanup-failed":"errors","libtmux:daemon-start-failed":"errors","libtmux:deadline-exceeded":"errors","libtmux:decoding-error":"errors","libtmux:error-actual-version":"errors","libtmux:error-cause":"errors","libtmux:error-client":"errors","libtmux:error-commands":"errors","libtmux:error-daemon":"errors","libtmux:error-feature":"errors","libtmux:error-field":"errors","libtmux:error-message":"errors","libtmux:error-model":"errors","libtmux:error-outcome":"errors","libtmux:error-required-version":"errors","libtmux:error-setting":"errors","libtmux:error-target":"errors","libtmux:field-unavailable":"errors","libtmux:incomplete-snapshot":"errors","libtmux:invalid-argument":"errors","libtmux:libtmux-error":"errors","libtmux:outcome-unknown":"errors","libtmux:output-limit-exceeded":"errors","libtmux:stale-target":"errors","libtmux:unsupported-capability":"errors","libtmux:unsupported-configuration":"errors","libtmux:unsupported-platform":"errors","libtmux:unsupported-tmux":"errors","libtmux.control:connection-busy":"errors","libtmux.control:connection-cleanup-failed":"errors","libtmux.control:connection-closed":"errors","libtmux.control:connection-error":"errors","libtmux.control:connection-stale":"errors","libtmux.control:connection-start-failed":"errors","libtmux.json:filter-document-limit-exceeded":"errors","libtmux.json:invalid-filter-document":"errors","libtmux.query:ambiguous-match":"errors","libtmux.query:invalid-filter":"errors","libtmux.query:invalid-query-target":"errors","libtmux.query:no-match":"errors","libtmux.query:query-limit-exceeded":"errors","libtmux.workspace:invalid-workspace":"errors","libtmux.workspace:invalid-workspace-document":"errors","libtmux.workspace:workspace-apply-failed":"errors","libtmux.workspace:workspace-conflict":"errors","libtmux.workspace:workspace-deadline-exceeded":"errors","libtmux.workspace:workspace-error":"errors","libtmux.workspace:workspace-inspection-error":"errors","libtmux.workspace:workspace-limit-exceeded":"errors","libtmux.workspace:workspace-state-error":"errors","libtmux":"__unplaced","libtmux.json":"__unplaced","libtmux.workspace":"__unplaced","libtmux.workspace.cli":"__unplaced"},"unplaced":[{"id":"libtmux","name":"libtmux","slug":"libtmux","kind":"module"},{"id":"libtmux.json","name":"libtmux.json","slug":"libtmux-json","kind":"module"},{"id":"libtmux.workspace","name":"libtmux.workspace","slug":"libtmux-workspace","kind":"module"},{"id":"libtmux.workspace.cli","name":"libtmux.workspace.cli","slug":"libtmux-workspace-cli","kind":"module"}],"diagnostics":{"unmatched":[],"deadBuckets":["options-constants","capabilities","version","queries-fields","queries-operators","queries-expressions","workspace-plan","workspace-steps","workspace-targets","workspace-session","workspace-window","workspace-pane","workspace-constants","requests","requests-server","requests-session","requests-window","requests-pane","requests-client","errors-server","errors-session","errors-window","errors-pane","constants","constants-server","constants-session","constants-window","constants-pane","constants-client","runtime","async","mcp","mcp-functions","mcp-constants","testing","internal","internal-commands","internal-options"],"ambiguous":[],"staleUnsettled":[]}} +{"port":"lisp","buckets":[{"id":"server","label":"Server","collapsed":false},{"id":"session","label":"Session","collapsed":false},{"id":"window","label":"Window","collapsed":false},{"id":"pane","label":"Pane","collapsed":false},{"id":"client","label":"Client","collapsed":false},{"id":"hooks","label":"Hooks","collapsed":false},{"id":"options","label":"Options","collapsed":false,"children":[{"id":"options-functions","label":"Functions","collapsed":false},{"id":"options-constants","label":"Constants and variables","collapsed":false}]},{"id":"keys","label":"Keys and bindings","collapsed":false},{"id":"buffers","label":"Buffers","collapsed":false},{"id":"layout","label":"Layout and geometry","collapsed":false},{"id":"environment","label":"Environment","collapsed":false},{"id":"capabilities","label":"Terminal capabilities","collapsed":false},{"id":"version","label":"Versions","collapsed":false},{"id":"commands","label":"Commands","collapsed":false},{"id":"control","label":"Control mode","collapsed":false},{"id":"formats","label":"Formats","collapsed":false},{"id":"queries","label":"Queries","collapsed":false,"children":[{"id":"queries-fields","label":"Fields","collapsed":false},{"id":"queries-operators","label":"Operators","collapsed":false},{"id":"queries-expressions","label":"Expressions","collapsed":false}]},{"id":"snapshots","label":"Snapshots","collapsed":false},{"id":"workspace","label":"Workspaces","collapsed":false,"children":[{"id":"workspace-plan","label":"Plans","collapsed":false},{"id":"workspace-steps","label":"Steps","collapsed":false},{"id":"workspace-targets","label":"Targets and slots","collapsed":false},{"id":"workspace-session","label":"Session","collapsed":false},{"id":"workspace-window","label":"Window","collapsed":false},{"id":"workspace-pane","label":"Pane","collapsed":false},{"id":"workspace-functions","label":"Functions","collapsed":false},{"id":"workspace-constants","label":"Constants and variables","collapsed":false}]},{"id":"requests","label":"Requests","collapsed":true,"children":[{"id":"requests-server","label":"Server","collapsed":false},{"id":"requests-session","label":"Session","collapsed":false},{"id":"requests-window","label":"Window","collapsed":false},{"id":"requests-pane","label":"Pane","collapsed":false},{"id":"requests-client","label":"Client","collapsed":false}]},{"id":"errors","label":"Errors","collapsed":true,"children":[{"id":"errors-server","label":"Server","collapsed":false},{"id":"errors-session","label":"Session","collapsed":false},{"id":"errors-window","label":"Window","collapsed":false},{"id":"errors-pane","label":"Pane","collapsed":false}]},{"id":"constants","label":"Constants and enums","collapsed":true,"children":[{"id":"constants-server","label":"Server","collapsed":false},{"id":"constants-session","label":"Session","collapsed":false},{"id":"constants-window","label":"Window","collapsed":false},{"id":"constants-pane","label":"Pane","collapsed":false},{"id":"constants-client","label":"Client","collapsed":false}]},{"id":"runtime","label":"Runtime adapters","collapsed":false},{"id":"async","label":"Async","collapsed":false},{"id":"mcp","label":"MCP","collapsed":true,"children":[{"id":"mcp-functions","label":"Functions","collapsed":false},{"id":"mcp-constants","label":"Constants and variables","collapsed":false}]},{"id":"testing","label":"Testing utilities","collapsed":true},{"id":"internal","label":"Internal","collapsed":true,"children":[{"id":"internal-commands","label":"Commands","collapsed":false},{"id":"internal-options","label":"Options","collapsed":false}]}],"assignments":{"server":[{"id":"libtmux:client","name":"client","slug":"libtmux-client","kind":"class"},{"id":"libtmux:daemon","name":"daemon","slug":"libtmux-daemon","kind":"class"},{"id":"libtmux:daemon-cleanup-failures","name":"daemon-cleanup-failures","slug":"libtmux-daemon-cleanup-failures","kind":"function"},{"id":"libtmux:daemon-failure","name":"daemon-failure","slug":"libtmux-daemon-failure","kind":"function"},{"id":"libtmux:daemon-program","name":"daemon-program","slug":"libtmux-daemon-program","kind":"function"},{"id":"libtmux:daemon-socket-path","name":"daemon-socket-path","slug":"libtmux-daemon-socket-path","kind":"function"},{"id":"libtmux:daemon-state","name":"daemon-state","slug":"libtmux-daemon-state","kind":"function"},{"id":"libtmux:pending-daemon-cleanups","name":"pending-daemon-cleanups","slug":"libtmux-pending-daemon-cleanups","kind":"function"},{"id":"libtmux:start-daemon","name":"start-daemon","slug":"libtmux-start-daemon","kind":"function"},{"id":"libtmux:stop-daemon","name":"stop-daemon","slug":"libtmux-stop-daemon","kind":"function"},{"id":"libtmux:with-daemon","name":"with-daemon","slug":"libtmux-with-daemon","kind":"function"}],"session":[{"id":"libtmux:session/type","name":"session","slug":"libtmux-session-type","kind":"class"},{"id":"libtmux:session/function","name":"session","slug":"libtmux-session-function","kind":"function"},{"id":"libtmux:sessions","name":"sessions","slug":"libtmux-sessions","kind":"function"}],"window":[{"id":"libtmux:window/type","name":"window","slug":"libtmux-window-type","kind":"class"},{"id":"libtmux:window-link","name":"window-link","slug":"libtmux-window-link","kind":"class"},{"id":"libtmux:window/function","name":"window","slug":"libtmux-window-function","kind":"function"},{"id":"libtmux:window-links","name":"window-links","slug":"libtmux-window-links","kind":"function"},{"id":"libtmux:windows","name":"windows","slug":"libtmux-windows","kind":"function"}],"pane":[{"id":"libtmux:pane","name":"pane","slug":"libtmux-pane","kind":"class"},{"id":"libtmux:current-path","name":"current-path","slug":"libtmux-current-path","kind":"function"},{"id":"libtmux:dead-p","name":"dead-p","slug":"libtmux-dead-p","kind":"function"},{"id":"libtmux:panes","name":"panes","slug":"libtmux-panes","kind":"function"}],"client":[{"id":"libtmux:attached-client","name":"attached-client","slug":"libtmux-attached-client","kind":"class"},{"id":"libtmux:clients","name":"clients","slug":"libtmux-clients","kind":"function"},{"id":"libtmux:open-client","name":"open-client","slug":"libtmux-open-client","kind":"function"},{"id":"libtmux:with-client","name":"with-client","slug":"libtmux-with-client","kind":"function"}],"hooks":[],"options":[],"options-functions":[],"options-constants":[],"keys":[],"buffers":[],"layout":[{"id":"libtmux:height","name":"height","slug":"libtmux-height","kind":"function"},{"id":"libtmux:width","name":"width","slug":"libtmux-width","kind":"function"}],"environment":[],"capabilities":[],"version":[],"commands":[{"id":"libtmux:cancellation-token","name":"cancellation-token","slug":"libtmux-cancellation-token","kind":"class"},{"id":"libtmux:command-outcome","name":"command-outcome","slug":"libtmux-command-outcome","kind":"class"},{"id":"libtmux:cancel","name":"cancel","slug":"libtmux-cancel","kind":"function"},{"id":"libtmux:cancelled-p","name":"cancelled-p","slug":"libtmux-cancelled-p","kind":"function"},{"id":"libtmux:current-command","name":"current-command","slug":"libtmux-current-command","kind":"function"},{"id":"libtmux:make-cancellation-token","name":"make-cancellation-token","slug":"libtmux-make-cancellation-token","kind":"function"},{"id":"libtmux:outcome-arguments","name":"outcome-arguments","slug":"libtmux-outcome-arguments","kind":"function"},{"id":"libtmux:outcome-cleanup-failures","name":"outcome-cleanup-failures","slug":"libtmux-outcome-cleanup-failures","kind":"function"},{"id":"libtmux:outcome-elapsed","name":"outcome-elapsed","slug":"libtmux-outcome-elapsed","kind":"function"},{"id":"libtmux:outcome-exit-code","name":"outcome-exit-code","slug":"libtmux-outcome-exit-code","kind":"function"},{"id":"libtmux:outcome-observation-error","name":"outcome-observation-error","slug":"libtmux-outcome-observation-error","kind":"function"},{"id":"libtmux:outcome-phase","name":"outcome-phase","slug":"libtmux-outcome-phase","kind":"function"},{"id":"libtmux:outcome-reason","name":"outcome-reason","slug":"libtmux-outcome-reason","kind":"function"},{"id":"libtmux:outcome-status","name":"outcome-status","slug":"libtmux-outcome-status","kind":"function"},{"id":"libtmux:outcome-stderr","name":"outcome-stderr","slug":"libtmux-outcome-stderr","kind":"function"},{"id":"libtmux:outcome-stdout","name":"outcome-stdout","slug":"libtmux-outcome-stdout","kind":"function"},{"id":"libtmux:outcome-value","name":"outcome-value","slug":"libtmux-outcome-value","kind":"function"}],"control":[{"id":"libtmux.control","name":"libtmux.control","slug":"libtmux-control","kind":"module"},{"id":"libtmux.control:connection","name":"connection","slug":"libtmux-control-connection","kind":"class"},{"id":"libtmux.control:request","name":"request","slug":"libtmux-control-request","kind":"class"},{"id":"libtmux.control:await-request","name":"await-request","slug":"libtmux-control-await-request","kind":"function"},{"id":"libtmux.control:cancel-request","name":"cancel-request","slug":"libtmux-control-cancel-request","kind":"function"},{"id":"libtmux.control:close-connection","name":"close-connection","slug":"libtmux-control-close-connection","kind":"function"},{"id":"libtmux.control:connection-cleanup-failures","name":"connection-cleanup-failures","slug":"libtmux-control-connection-cleanup-failures","kind":"function"},{"id":"libtmux.control:connection-failure","name":"connection-failure","slug":"libtmux-control-connection-failure","kind":"function"},{"id":"libtmux.control:connection-state","name":"connection-state","slug":"libtmux-control-connection-state","kind":"function"},{"id":"libtmux.control:error-connection","name":"error-connection","slug":"libtmux-control-error-connection","kind":"function"},{"id":"libtmux.control:next-event","name":"next-event","slug":"libtmux-control-next-event","kind":"function"},{"id":"libtmux.control:open-connection","name":"open-connection","slug":"libtmux-control-open-connection","kind":"function"},{"id":"libtmux.control:pending-cleanups","name":"pending-cleanups","slug":"libtmux-control-pending-cleanups","kind":"function"},{"id":"libtmux.control:reconnect","name":"reconnect","slug":"libtmux-control-reconnect","kind":"function"},{"id":"libtmux.control:request-state","name":"request-state","slug":"libtmux-control-request-state","kind":"function"},{"id":"libtmux.control:submit-command","name":"submit-command","slug":"libtmux-control-submit-command","kind":"function"},{"id":"libtmux.control:with-connection","name":"with-connection","slug":"libtmux-control-with-connection","kind":"function"},{"id":"libtmux.control:with-reconnection","name":"with-reconnection","slug":"libtmux-control-with-reconnection","kind":"function"}],"formats":[{"id":"libtmux.json:document-limit","name":"document-limit","slug":"libtmux-json-document-limit","kind":"function"},{"id":"libtmux.json:document-path","name":"document-path","slug":"libtmux-json-document-path","kind":"function"}],"queries":[{"id":"libtmux.query","name":"libtmux.query","slug":"libtmux-query","kind":"module"},{"id":"libtmux.query:compiled-filter","name":"compiled-filter","slug":"libtmux-query-compiled-filter","kind":"class"},{"id":"libtmux.query:query-set","name":"query-set","slug":"libtmux-query-query-set","kind":"class"},{"id":"libtmux.query:compile-filter","name":"compile-filter","slug":"libtmux-query-compile-filter","kind":"function"},{"id":"libtmux.query:count-exact-p","name":"count-exact-p","slug":"libtmux-query-count-exact-p","kind":"function"},{"id":"libtmux.query:error-expected","name":"error-expected","slug":"libtmux-query-error-expected","kind":"function"},{"id":"libtmux.query:error-operator","name":"error-operator","slug":"libtmux-query-error-operator","kind":"function"},{"id":"libtmux.query:error-path","name":"error-path","slug":"libtmux-query-error-path","kind":"function"},{"id":"libtmux.query:error-received","name":"error-received","slug":"libtmux-query-error-received","kind":"function"},{"id":"libtmux.query:explain","name":"explain","slug":"libtmux-query-explain","kind":"function"},{"id":"libtmux.query:expression","name":"expression","slug":"libtmux-query-expression","kind":"function"},{"id":"libtmux:field-value","name":"field-value","slug":"libtmux-field-value","kind":"function"},{"id":"libtmux.query:fields","name":"fields","slug":"libtmux-query-fields","kind":"function"},{"id":"libtmux.query:from","name":"from","slug":"libtmux-query-from","kind":"function"},{"id":"libtmux.query:items","name":"items","slug":"libtmux-query-items","kind":"function"},{"id":"libtmux.query:match-count","name":"match-count","slug":"libtmux-query-match-count","kind":"function"},{"id":"libtmux.query:match-sample","name":"match-sample","slug":"libtmux-query-match-sample","kind":"function"},{"id":"libtmux.query:matching","name":"matching","slug":"libtmux-query-matching","kind":"function"},{"id":"libtmux.query:one","name":"one","slug":"libtmux-query-one","kind":"function"},{"id":"libtmux.query:one-or-none","name":"one-or-none","slug":"libtmux-query-one-or-none","kind":"function"},{"id":"libtmux.query:order-by","name":"order-by","slug":"libtmux-query-order-by","kind":"function"},{"id":"libtmux.query:predicate","name":"predicate","slug":"libtmux-query-predicate","kind":"function"},{"id":"libtmux.query:query-set-model","name":"query-set-model","slug":"libtmux-query-query-set-model","kind":"function"},{"id":"libtmux.json:read-filter","name":"read-filter","slug":"libtmux-json-read-filter","kind":"function"},{"id":"libtmux.query:required-fields","name":"required-fields","slug":"libtmux-query-required-fields","kind":"function"},{"id":"libtmux.query:required-relations","name":"required-relations","slug":"libtmux-query-required-relations","kind":"function"},{"id":"libtmux.query:where","name":"where","slug":"libtmux-query-where","kind":"function"},{"id":"libtmux.query:where-if","name":"where-if","slug":"libtmux-query-where-if","kind":"function"},{"id":"libtmux.json:write-filter","name":"write-filter","slug":"libtmux-json-write-filter","kind":"function"}],"queries-fields":[],"queries-operators":[],"queries-expressions":[],"snapshots":[{"id":"libtmux:entity","name":"entity","slug":"libtmux-entity","kind":"class"},{"id":"libtmux:snapshot","name":"snapshot","slug":"libtmux-snapshot","kind":"class"},{"id":"libtmux:active-p","name":"active-p","slug":"libtmux-active-p","kind":"function"},{"id":"libtmux:entity-data","name":"entity-data","slug":"libtmux-entity-data","kind":"function"},{"id":"libtmux:entity-model","name":"entity-model","slug":"libtmux-entity-model","kind":"function"},{"id":"libtmux:id","name":"id","slug":"libtmux-id","kind":"function"},{"id":"libtmux:index","name":"index","slug":"libtmux-index","kind":"function"},{"id":"libtmux:name","name":"name","slug":"libtmux-name","kind":"function"},{"id":"libtmux:provenance","name":"provenance","slug":"libtmux-provenance","kind":"function"},{"id":"libtmux:same-entity-p","name":"same-entity-p","slug":"libtmux-same-entity-p","kind":"function"},{"id":"libtmux:title","name":"title","slug":"libtmux-title","kind":"function"}],"workspace":[{"id":"libtmux.workspace:workspace","name":"workspace","slug":"libtmux-workspace-workspace","kind":"class"},{"id":"libtmux.workspace:workspace-inspection","name":"workspace-inspection","slug":"libtmux-workspace-workspace-inspection","kind":"class"},{"id":"libtmux.workspace:workspace-plan","name":"workspace-plan","slug":"libtmux-workspace-workspace-plan","kind":"class"},{"id":"libtmux.workspace:workspace-result","name":"workspace-result","slug":"libtmux-workspace-workspace-result","kind":"class"},{"id":"libtmux.workspace:workspace-state","name":"workspace-state","slug":"libtmux-workspace-workspace-state","kind":"class"},{"id":"libtmux.workspace:workspace-step","name":"workspace-step","slug":"libtmux-workspace-workspace-step","kind":"class"},{"id":"libtmux.workspace.cli:main","name":"main","slug":"libtmux-workspace-cli-main","kind":"function"}],"workspace-plan":[],"workspace-steps":[],"workspace-targets":[],"workspace-session":[],"workspace-window":[],"workspace-pane":[],"workspace-functions":[{"id":"libtmux.workspace:apply-workspace","name":"apply-workspace","slug":"libtmux-workspace-apply-workspace","kind":"function"},{"id":"libtmux.workspace:failed-step","name":"failed-step","slug":"libtmux-workspace-failed-step","kind":"function"},{"id":"libtmux.workspace:fetch-workspace-state","name":"fetch-workspace-state","slug":"libtmux-workspace-fetch-workspace-state","kind":"function"},{"id":"libtmux.workspace:inspect-workspace","name":"inspect-workspace","slug":"libtmux-workspace-inspect-workspace","kind":"function"},{"id":"libtmux.workspace:inspection-causes","name":"inspection-causes","slug":"libtmux-workspace-inspection-causes","kind":"function"},{"id":"libtmux.workspace:inspection-data","name":"inspection-data","slug":"libtmux-workspace-inspection-data","kind":"function"},{"id":"libtmux.workspace:inspection-evidence","name":"inspection-evidence","slug":"libtmux-workspace-inspection-evidence","kind":"function"},{"id":"libtmux.workspace:inspection-outcomes","name":"inspection-outcomes","slug":"libtmux-workspace-inspection-outcomes","kind":"function"},{"id":"libtmux.workspace:inspection-snapshots","name":"inspection-snapshots","slug":"libtmux-workspace-inspection-snapshots","kind":"function"},{"id":"libtmux.workspace:inspection-terminal","name":"inspection-terminal","slug":"libtmux-workspace-inspection-terminal","kind":"function"},{"id":"libtmux.workspace:make-workspace","name":"make-workspace","slug":"libtmux-workspace-make-workspace","kind":"function"},{"id":"libtmux.workspace:parse-workspace","name":"parse-workspace","slug":"libtmux-workspace-parse-workspace","kind":"function"},{"id":"libtmux.workspace:plan-data","name":"plan-data","slug":"libtmux-workspace-plan-data","kind":"function"},{"id":"libtmux.workspace:plan-steps","name":"plan-steps","slug":"libtmux-workspace-plan-steps","kind":"function"},{"id":"libtmux.workspace:plan-workspace","name":"plan-workspace","slug":"libtmux-workspace-plan-workspace","kind":"function"},{"id":"libtmux.workspace:read-workspace","name":"read-workspace","slug":"libtmux-workspace-read-workspace","kind":"function"},{"id":"libtmux.workspace:result-causes","name":"result-causes","slug":"libtmux-workspace-result-causes","kind":"function"},{"id":"libtmux.workspace:result-created-p","name":"result-created-p","slug":"libtmux-workspace-result-created-p","kind":"function"},{"id":"libtmux.workspace:result-data","name":"result-data","slug":"libtmux-workspace-result-data","kind":"function"},{"id":"libtmux.workspace:result-outcomes","name":"result-outcomes","slug":"libtmux-workspace-result-outcomes","kind":"function"},{"id":"libtmux.workspace:result-snapshot","name":"result-snapshot","slug":"libtmux-workspace-result-snapshot","kind":"function"},{"id":"libtmux.workspace:state-causes","name":"state-causes","slug":"libtmux-workspace-state-causes","kind":"function"},{"id":"libtmux.workspace:state-data","name":"state-data","slug":"libtmux-workspace-state-data","kind":"function"},{"id":"libtmux.workspace:state-outcomes","name":"state-outcomes","slug":"libtmux-workspace-state-outcomes","kind":"function"},{"id":"libtmux.workspace:state-snapshot","name":"state-snapshot","slug":"libtmux-workspace-state-snapshot","kind":"function"},{"id":"libtmux.workspace:step-action","name":"step-action","slug":"libtmux-workspace-step-action","kind":"function"},{"id":"libtmux.workspace:step-data","name":"step-data","slug":"libtmux-workspace-step-data","kind":"function"},{"id":"libtmux.workspace:workspace-data","name":"workspace-data","slug":"libtmux-workspace-workspace-data","kind":"function"},{"id":"libtmux.workspace:workspace-limit","name":"workspace-limit","slug":"libtmux-workspace-workspace-limit","kind":"function"},{"id":"libtmux.workspace:workspace-path","name":"workspace-path","slug":"libtmux-workspace-workspace-path","kind":"function"}],"workspace-constants":[],"requests":[],"requests-server":[],"requests-session":[],"requests-window":[],"requests-pane":[],"requests-client":[],"errors":[{"id":"libtmux:cleanup-failed","name":"cleanup-failed","slug":"libtmux-cleanup-failed","kind":"exception"},{"id":"libtmux:client-busy","name":"client-busy","slug":"libtmux-client-busy","kind":"exception"},{"id":"libtmux:client-closed","name":"client-closed","slug":"libtmux-client-closed","kind":"exception"},{"id":"libtmux:command-cancelled","name":"command-cancelled","slug":"libtmux-command-cancelled","kind":"exception"},{"id":"libtmux:command-failed","name":"command-failed","slug":"libtmux-command-failed","kind":"exception"},{"id":"libtmux:configuration-read-failed","name":"configuration-read-failed","slug":"libtmux-configuration-read-failed","kind":"exception"},{"id":"libtmux:daemon-cleanup-failed","name":"daemon-cleanup-failed","slug":"libtmux-daemon-cleanup-failed","kind":"exception"},{"id":"libtmux:daemon-start-failed","name":"daemon-start-failed","slug":"libtmux-daemon-start-failed","kind":"exception"},{"id":"libtmux:deadline-exceeded","name":"deadline-exceeded","slug":"libtmux-deadline-exceeded","kind":"exception"},{"id":"libtmux:decoding-error","name":"decoding-error","slug":"libtmux-decoding-error","kind":"exception"},{"id":"libtmux:field-unavailable","name":"field-unavailable","slug":"libtmux-field-unavailable","kind":"exception"},{"id":"libtmux:incomplete-snapshot","name":"incomplete-snapshot","slug":"libtmux-incomplete-snapshot","kind":"exception"},{"id":"libtmux:invalid-argument","name":"invalid-argument","slug":"libtmux-invalid-argument","kind":"exception"},{"id":"libtmux:libtmux-error","name":"libtmux-error","slug":"libtmux-libtmux-error","kind":"exception"},{"id":"libtmux:outcome-unknown","name":"outcome-unknown","slug":"libtmux-outcome-unknown","kind":"exception"},{"id":"libtmux:output-limit-exceeded","name":"output-limit-exceeded","slug":"libtmux-output-limit-exceeded","kind":"exception"},{"id":"libtmux:stale-target","name":"stale-target","slug":"libtmux-stale-target","kind":"exception"},{"id":"libtmux:unsupported-capability","name":"unsupported-capability","slug":"libtmux-unsupported-capability","kind":"exception"},{"id":"libtmux:unsupported-configuration","name":"unsupported-configuration","slug":"libtmux-unsupported-configuration","kind":"exception"},{"id":"libtmux:unsupported-platform","name":"unsupported-platform","slug":"libtmux-unsupported-platform","kind":"exception"},{"id":"libtmux:unsupported-tmux","name":"unsupported-tmux","slug":"libtmux-unsupported-tmux","kind":"exception"},{"id":"libtmux.control:connection-busy","name":"connection-busy","slug":"libtmux-control-connection-busy","kind":"exception"},{"id":"libtmux.control:connection-cleanup-failed","name":"connection-cleanup-failed","slug":"libtmux-control-connection-cleanup-failed","kind":"exception"},{"id":"libtmux.control:connection-closed","name":"connection-closed","slug":"libtmux-control-connection-closed","kind":"exception"},{"id":"libtmux.control:connection-error","name":"connection-error","slug":"libtmux-control-connection-error","kind":"exception"},{"id":"libtmux.control:connection-stale","name":"connection-stale","slug":"libtmux-control-connection-stale","kind":"exception"},{"id":"libtmux.control:connection-start-failed","name":"connection-start-failed","slug":"libtmux-control-connection-start-failed","kind":"exception"},{"id":"libtmux.json:filter-document-limit-exceeded","name":"filter-document-limit-exceeded","slug":"libtmux-json-filter-document-limit-exceeded","kind":"exception"},{"id":"libtmux.json:invalid-filter-document","name":"invalid-filter-document","slug":"libtmux-json-invalid-filter-document","kind":"exception"},{"id":"libtmux.query:ambiguous-match","name":"ambiguous-match","slug":"libtmux-query-ambiguous-match","kind":"exception"},{"id":"libtmux.query:invalid-filter","name":"invalid-filter","slug":"libtmux-query-invalid-filter","kind":"exception"},{"id":"libtmux.query:invalid-query-target","name":"invalid-query-target","slug":"libtmux-query-invalid-query-target","kind":"exception"},{"id":"libtmux.query:no-match","name":"no-match","slug":"libtmux-query-no-match","kind":"exception"},{"id":"libtmux.query:query-limit-exceeded","name":"query-limit-exceeded","slug":"libtmux-query-query-limit-exceeded","kind":"exception"},{"id":"libtmux.workspace:invalid-workspace","name":"invalid-workspace","slug":"libtmux-workspace-invalid-workspace","kind":"exception"},{"id":"libtmux.workspace:invalid-workspace-document","name":"invalid-workspace-document","slug":"libtmux-workspace-invalid-workspace-document","kind":"exception"},{"id":"libtmux.workspace:workspace-apply-failed","name":"workspace-apply-failed","slug":"libtmux-workspace-workspace-apply-failed","kind":"exception"},{"id":"libtmux.workspace:workspace-conflict","name":"workspace-conflict","slug":"libtmux-workspace-workspace-conflict","kind":"exception"},{"id":"libtmux.workspace:workspace-deadline-exceeded","name":"workspace-deadline-exceeded","slug":"libtmux-workspace-workspace-deadline-exceeded","kind":"exception"},{"id":"libtmux.workspace:workspace-error","name":"workspace-error","slug":"libtmux-workspace-workspace-error","kind":"exception"},{"id":"libtmux.workspace:workspace-inspection-error","name":"workspace-inspection-error","slug":"libtmux-workspace-workspace-inspection-error","kind":"exception"},{"id":"libtmux.workspace:workspace-limit-exceeded","name":"workspace-limit-exceeded","slug":"libtmux-workspace-workspace-limit-exceeded","kind":"exception"},{"id":"libtmux.workspace:workspace-state-error","name":"workspace-state-error","slug":"libtmux-workspace-workspace-state-error","kind":"exception"},{"id":"libtmux:configuration-error-name","name":"configuration-error-name","slug":"libtmux-configuration-error-name","kind":"function"},{"id":"libtmux:configuration-error-scope","name":"configuration-error-scope","slug":"libtmux-configuration-error-scope","kind":"function"},{"id":"libtmux:configuration-partial-records","name":"configuration-partial-records","slug":"libtmux-configuration-partial-records","kind":"function"},{"id":"libtmux:configuration-read-outcomes","name":"configuration-read-outcomes","slug":"libtmux-configuration-read-outcomes","kind":"function"},{"id":"libtmux:error-actual-version","name":"error-actual-version","slug":"libtmux-error-actual-version","kind":"function"},{"id":"libtmux:error-cause","name":"error-cause","slug":"libtmux-error-cause","kind":"function"},{"id":"libtmux:error-client","name":"error-client","slug":"libtmux-error-client","kind":"function"},{"id":"libtmux:error-commands","name":"error-commands","slug":"libtmux-error-commands","kind":"function"},{"id":"libtmux:error-daemon","name":"error-daemon","slug":"libtmux-error-daemon","kind":"function"},{"id":"libtmux:error-feature","name":"error-feature","slug":"libtmux-error-feature","kind":"function"},{"id":"libtmux:error-field","name":"error-field","slug":"libtmux-error-field","kind":"function"},{"id":"libtmux:error-message","name":"error-message","slug":"libtmux-error-message","kind":"function"},{"id":"libtmux:error-model","name":"error-model","slug":"libtmux-error-model","kind":"function"},{"id":"libtmux:error-outcome","name":"error-outcome","slug":"libtmux-error-outcome","kind":"function"},{"id":"libtmux:error-required-version","name":"error-required-version","slug":"libtmux-error-required-version","kind":"function"},{"id":"libtmux:error-setting","name":"error-setting","slug":"libtmux-error-setting","kind":"function"},{"id":"libtmux:error-target","name":"error-target","slug":"libtmux-error-target","kind":"function"}],"errors-server":[],"errors-session":[],"errors-window":[],"errors-pane":[],"constants":[],"constants-server":[],"constants-session":[],"constants-window":[],"constants-pane":[],"constants-client":[],"runtime":[],"async":[],"mcp":[],"mcp-functions":[],"mcp-constants":[],"testing":[],"internal":[],"internal-commands":[],"internal-options":[]},"placement":{"libtmux:client":"server","libtmux:daemon":"server","libtmux:daemon-cleanup-failures":"server","libtmux:daemon-failure":"server","libtmux:daemon-program":"server","libtmux:daemon-socket-path":"server","libtmux:daemon-state":"server","libtmux:pending-daemon-cleanups":"server","libtmux:start-daemon":"server","libtmux:stop-daemon":"server","libtmux:with-daemon":"server","libtmux:session/function":"session","libtmux:session/type":"session","libtmux:sessions":"session","libtmux:window/function":"window","libtmux:window/type":"window","libtmux:window-link":"window","libtmux:window-links":"window","libtmux:windows":"window","libtmux:current-path":"pane","libtmux:dead-p":"pane","libtmux:pane":"pane","libtmux:panes":"pane","libtmux:attached-client":"client","libtmux:clients":"client","libtmux:open-client":"client","libtmux:with-client":"client","libtmux:height":"layout","libtmux:width":"layout","libtmux:cancel":"commands","libtmux:cancellation-token":"commands","libtmux:cancelled-p":"commands","libtmux:command-outcome":"commands","libtmux:current-command":"commands","libtmux:make-cancellation-token":"commands","libtmux:outcome-arguments":"commands","libtmux:outcome-cleanup-failures":"commands","libtmux:outcome-elapsed":"commands","libtmux:outcome-exit-code":"commands","libtmux:outcome-observation-error":"commands","libtmux:outcome-phase":"commands","libtmux:outcome-reason":"commands","libtmux:outcome-status":"commands","libtmux:outcome-stderr":"commands","libtmux:outcome-stdout":"commands","libtmux:outcome-value":"commands","libtmux.control":"control","libtmux.control:await-request":"control","libtmux.control:cancel-request":"control","libtmux.control:close-connection":"control","libtmux.control:connection":"control","libtmux.control:connection-cleanup-failures":"control","libtmux.control:connection-failure":"control","libtmux.control:connection-state":"control","libtmux.control:error-connection":"control","libtmux.control:next-event":"control","libtmux.control:open-connection":"control","libtmux.control:pending-cleanups":"control","libtmux.control:reconnect":"control","libtmux.control:request":"control","libtmux.control:request-state":"control","libtmux.control:submit-command":"control","libtmux.control:with-connection":"control","libtmux.control:with-reconnection":"control","libtmux.json:document-limit":"formats","libtmux.json:document-path":"formats","libtmux:field-value":"queries","libtmux.json:read-filter":"queries","libtmux.json:write-filter":"queries","libtmux.query":"queries","libtmux.query:compile-filter":"queries","libtmux.query:compiled-filter":"queries","libtmux.query:count-exact-p":"queries","libtmux.query:error-expected":"queries","libtmux.query:error-operator":"queries","libtmux.query:error-path":"queries","libtmux.query:error-received":"queries","libtmux.query:explain":"queries","libtmux.query:expression":"queries","libtmux.query:fields":"queries","libtmux.query:from":"queries","libtmux.query:items":"queries","libtmux.query:match-count":"queries","libtmux.query:match-sample":"queries","libtmux.query:matching":"queries","libtmux.query:one":"queries","libtmux.query:one-or-none":"queries","libtmux.query:order-by":"queries","libtmux.query:predicate":"queries","libtmux.query:query-set":"queries","libtmux.query:query-set-model":"queries","libtmux.query:required-fields":"queries","libtmux.query:required-relations":"queries","libtmux.query:where":"queries","libtmux.query:where-if":"queries","libtmux:active-p":"snapshots","libtmux:entity":"snapshots","libtmux:entity-data":"snapshots","libtmux:entity-model":"snapshots","libtmux:id":"snapshots","libtmux:index":"snapshots","libtmux:name":"snapshots","libtmux:provenance":"snapshots","libtmux:same-entity-p":"snapshots","libtmux:snapshot":"snapshots","libtmux:title":"snapshots","libtmux.workspace:workspace":"workspace","libtmux.workspace:workspace-inspection":"workspace","libtmux.workspace:workspace-plan":"workspace","libtmux.workspace:workspace-result":"workspace","libtmux.workspace:workspace-state":"workspace","libtmux.workspace:workspace-step":"workspace","libtmux.workspace.cli:main":"workspace","libtmux.workspace:apply-workspace":"workspace-functions","libtmux.workspace:failed-step":"workspace-functions","libtmux.workspace:fetch-workspace-state":"workspace-functions","libtmux.workspace:inspect-workspace":"workspace-functions","libtmux.workspace:inspection-causes":"workspace-functions","libtmux.workspace:inspection-data":"workspace-functions","libtmux.workspace:inspection-evidence":"workspace-functions","libtmux.workspace:inspection-outcomes":"workspace-functions","libtmux.workspace:inspection-snapshots":"workspace-functions","libtmux.workspace:inspection-terminal":"workspace-functions","libtmux.workspace:make-workspace":"workspace-functions","libtmux.workspace:parse-workspace":"workspace-functions","libtmux.workspace:plan-data":"workspace-functions","libtmux.workspace:plan-steps":"workspace-functions","libtmux.workspace:plan-workspace":"workspace-functions","libtmux.workspace:read-workspace":"workspace-functions","libtmux.workspace:result-causes":"workspace-functions","libtmux.workspace:result-created-p":"workspace-functions","libtmux.workspace:result-data":"workspace-functions","libtmux.workspace:result-outcomes":"workspace-functions","libtmux.workspace:result-snapshot":"workspace-functions","libtmux.workspace:state-causes":"workspace-functions","libtmux.workspace:state-data":"workspace-functions","libtmux.workspace:state-outcomes":"workspace-functions","libtmux.workspace:state-snapshot":"workspace-functions","libtmux.workspace:step-action":"workspace-functions","libtmux.workspace:step-data":"workspace-functions","libtmux.workspace:workspace-data":"workspace-functions","libtmux.workspace:workspace-limit":"workspace-functions","libtmux.workspace:workspace-path":"workspace-functions","libtmux:cleanup-failed":"errors","libtmux:client-busy":"errors","libtmux:client-closed":"errors","libtmux:command-cancelled":"errors","libtmux:command-failed":"errors","libtmux:configuration-error-name":"errors","libtmux:configuration-error-scope":"errors","libtmux:configuration-partial-records":"errors","libtmux:configuration-read-failed":"errors","libtmux:configuration-read-outcomes":"errors","libtmux:daemon-cleanup-failed":"errors","libtmux:daemon-start-failed":"errors","libtmux:deadline-exceeded":"errors","libtmux:decoding-error":"errors","libtmux:error-actual-version":"errors","libtmux:error-cause":"errors","libtmux:error-client":"errors","libtmux:error-commands":"errors","libtmux:error-daemon":"errors","libtmux:error-feature":"errors","libtmux:error-field":"errors","libtmux:error-message":"errors","libtmux:error-model":"errors","libtmux:error-outcome":"errors","libtmux:error-required-version":"errors","libtmux:error-setting":"errors","libtmux:error-target":"errors","libtmux:field-unavailable":"errors","libtmux:incomplete-snapshot":"errors","libtmux:invalid-argument":"errors","libtmux:libtmux-error":"errors","libtmux:outcome-unknown":"errors","libtmux:output-limit-exceeded":"errors","libtmux:stale-target":"errors","libtmux:unsupported-capability":"errors","libtmux:unsupported-configuration":"errors","libtmux:unsupported-platform":"errors","libtmux:unsupported-tmux":"errors","libtmux.control:connection-busy":"errors","libtmux.control:connection-cleanup-failed":"errors","libtmux.control:connection-closed":"errors","libtmux.control:connection-error":"errors","libtmux.control:connection-stale":"errors","libtmux.control:connection-start-failed":"errors","libtmux.json:filter-document-limit-exceeded":"errors","libtmux.json:invalid-filter-document":"errors","libtmux.query:ambiguous-match":"errors","libtmux.query:invalid-filter":"errors","libtmux.query:invalid-query-target":"errors","libtmux.query:no-match":"errors","libtmux.query:query-limit-exceeded":"errors","libtmux.workspace:invalid-workspace":"errors","libtmux.workspace:invalid-workspace-document":"errors","libtmux.workspace:workspace-apply-failed":"errors","libtmux.workspace:workspace-conflict":"errors","libtmux.workspace:workspace-deadline-exceeded":"errors","libtmux.workspace:workspace-error":"errors","libtmux.workspace:workspace-inspection-error":"errors","libtmux.workspace:workspace-limit-exceeded":"errors","libtmux.workspace:workspace-state-error":"errors","libtmux":"__unplaced","libtmux.json":"__unplaced","libtmux.workspace":"__unplaced","libtmux.workspace.cli":"__unplaced"},"unplaced":[{"id":"libtmux","name":"libtmux","slug":"libtmux","kind":"module"},{"id":"libtmux.json","name":"libtmux.json","slug":"libtmux-json","kind":"module"},{"id":"libtmux.workspace","name":"libtmux.workspace","slug":"libtmux-workspace","kind":"module"},{"id":"libtmux.workspace.cli","name":"libtmux.workspace.cli","slug":"libtmux-workspace-cli","kind":"module"}],"diagnostics":{"unmatched":[],"deadBuckets":["hooks","options","options-functions","options-constants","keys","buffers","environment","capabilities","version","queries-fields","queries-operators","queries-expressions","workspace-plan","workspace-steps","workspace-targets","workspace-session","workspace-window","workspace-pane","workspace-constants","requests","requests-server","requests-session","requests-window","requests-pane","requests-client","errors-server","errors-session","errors-window","errors-pane","constants","constants-server","constants-session","constants-window","constants-pane","constants-client","runtime","async","mcp","mcp-functions","mcp-constants","testing","internal","internal-commands","internal-options"],"ambiguous":[],"staleUnsettled":[]}} diff --git a/site/src/data/api/lisp.paths.json b/site/src/data/api/lisp.paths.json index 0e54b0eee..388aa55ce 100644 --- a/site/src/data/api/lisp.paths.json +++ b/site/src/data/api/lisp.paths.json @@ -1 +1 @@ -{"port":"lisp","repo":"libtmux/libtmux-lisp","revision":"e6f319c4257789cfe39547af001c718975f0a2ef","paths":[".github/CONTRIBUTING.md",".github/WRITING.md",".github/actionlint.yaml",".github/actions/build-tmux/action.yml",".github/actions/setup-lisp/action.yml",".github/dependabot.yml",".github/social-preview.png",".github/workflows/docs.yml",".github/workflows/tests.yml",".gitignore",".tool-versions","AGENTS.md","CHANGELOG.md","CLAUDE.md","LICENSE","README.md","bin/libtmux-workspace","control/README.md","data/native-compatibility.json","data/options-catalog.json","docs/adr/0001-native-common-lisp-engine.md","docs/api.md","docs/assets/app-icon-1024-dark.png","docs/assets/app-icon-1024-light.png","docs/assets/apple-touch-icon-dark.png","docs/assets/apple-touch-icon-light.png","docs/assets/browserconfig-dark.xml","docs/assets/browserconfig.xml","docs/assets/favicon.ico","docs/assets/logo-1024.png","docs/assets/logo-128.png","docs/assets/logo-144.png","docs/assets/logo-152.png","docs/assets/logo-16.png","docs/assets/logo-167.png","docs/assets/logo-180.png","docs/assets/logo-192.png","docs/assets/logo-24.png","docs/assets/logo-256.png","docs/assets/logo-32.png","docs/assets/logo-384.png","docs/assets/logo-48.png","docs/assets/logo-512.png","docs/assets/logo-64.png","docs/assets/logo-96.png","docs/assets/logo.svg","docs/assets/maskable-192-dark.png","docs/assets/maskable-192-light.png","docs/assets/maskable-512-dark.png","docs/assets/maskable-512-light.png","docs/assets/mstile-150-dark.png","docs/assets/mstile-150-light.png","docs/assets/mstile-310-dark.png","docs/assets/mstile-310-light.png","docs/assets/opengraph-dark.jpg","docs/assets/opengraph-dark.png","docs/assets/opengraph-light.jpg","docs/assets/opengraph-light.png","docs/assets/safari-pinned-tab.svg","docs/assets/site-dark.webmanifest","docs/assets/site.webmanifest","docs/assets/social-square-dark.png","docs/assets/social-square-light.png","docs/assets/source.json","docs/assets/twitter-dark.png","docs/assets/twitter-light.png","docs/benchmarks.md","docs/branding.md","docs/capabilities.md","docs/captures.md","docs/configuration.md","docs/control-api.md","docs/control.md","docs/daemons.md","docs/design/workspace-v1.md","docs/design/workspace-v2.md","docs/fields.md","docs/index.md","docs/json-api.md","docs/modules.md","docs/operations.md","docs/queries.md","docs/query-api.md","docs/query-interchange.md","docs/superpowers/plans/2026-11-07-shared-docs-integration.md","docs/superpowers/plans/2026-11-07-workspace-v1.md","docs/testing.md","docs/transport.md","docs/tutorial.md","docs/workspace-api.md","docs/workspace-owned.md","docs/workspaces.md","examples/configuration.lisp","examples/control.lisp","examples/managed-daemon.lisp","examples/owned-workspace.json","examples/owned-workspace.lisp","examples/quickstart.lisp","examples/run.lisp","examples/worker.sh","examples/workspace.json","examples/workspace.lisp","json/README.md","libtmux.asd","mise.toml","qlfile","qlfile.lock","query/README.md","regex/README.md","src/backend-sbcl.lisp","src/buffers.lisp","src/capture.lisp","src/client-operations.lisp","src/client.lisp","src/command-encoding.lisp","src/command-policy.lisp","src/conditions.lisp","src/configuration-acquisition.lisp","src/configuration-codec.lisp","src/configuration-operations.lisp","src/configuration-options.lisp","src/configuration-registry.lisp","src/control-codec.lisp","src/control-peer.lisp","src/control-reconnect.lisp","src/control.lisp","src/creation.lisp","src/daemon-sbcl.lisp","src/daemon.lisp","src/dispatch.lisp","src/geometry.lisp","src/graph.lisp","src/json.lisp","src/key-bindings.lisp","src/model.lisp","src/operations.lisp","src/options-catalog.lisp","src/package.lisp","src/placement.lisp","src/process-operations.lisp","src/process-sbcl.lisp","src/query-source.lisp","src/query.lisp","src/records.lisp","src/regex.lisp","src/registry.lisp","src/selection.lisp","src/server-operations.lisp","src/terminal-operations.lisp","src/termination.lisp","src/transport.lisp","src/witness-sbcl.lisp","src/workspace-api.lisp","src/workspace-apply.lisp","src/workspace-cli.lisp","src/workspace-geometry.lisp","src/workspace-inspection.lisp","src/workspace-owned.lisp","src/workspace-plan.lisp","src/workspace-state.lisp","src/workspace-writer.lisp","src/workspace.lisp","tests/buffers.lisp","tests/capture.lisp","tests/client-operations.lisp","tests/configuration-acquisition.lisp","tests/configuration-codec.lisp","tests/configuration-options.lisp","tests/configuration-reads.lisp","tests/configuration-registry.lisp","tests/control-codec.lisp","tests/control-peer.lisp","tests/control-state.lisp","tests/control.lisp","tests/creation.lisp","tests/daemon.lisp","tests/fixture.lisp","tests/geometry.lisp","tests/json.lisp","tests/key-bindings.lisp","tests/model.lisp","tests/operations.lisp","tests/package.lisp","tests/pane-processes.lisp","tests/placement.lisp","tests/process-child.py","tests/process.lisp","tests/query.lisp","tests/records.lisp","tests/regex.lisp","tests/resources.lisp","tests/server-operations.lisp","tests/termination.lisp","tests/test-benchmark.py","tests/test-example-cleanup.py","tests/workspace-apply-integration.lisp","tests/workspace-apply-race-integration.lisp","tests/workspace-cli.lisp","tests/workspace-geometry-integration.lisp","tests/workspace-geometry.lisp","tests/workspace-inspection-integration.lisp","tests/workspace-integration.lisp","tests/workspace-owned.lisp","tests/workspace-plan.lisp","tests/workspace-public-integration.lisp","tests/workspace-public.lisp","tests/workspace-publication-integration.lisp","tests/workspace-state-integration.lisp","tests/workspace-state.lisp","tests/workspace-writer-integration.lisp","tests/workspace.lisp","tools/benchmark.lisp","tools/benchmark.py","tools/check-documentation-artifact.py","tools/check-floor.lisp","tools/check-source.py","tools/doc-examples.py","tools/documentation.lisp","tools/examples.py","tools/extract-options-catalog.py","tools/lisp.sh","tools/options-catalog.py","tools/package.py","tools/provision-tmux.py","tools/stop-example.py","tools/test-processes.py","tools/test.lisp","tools/tmux-sources.json","tools/workspace-cli.lisp","verification.md","workspace/README.md","workspace/cli/README.md"]} +{"port":"lisp","repo":"libtmux/libtmux-lisp","revision":"a29c6b96e1c78501dff5073b538ae3180b0e63e3","paths":[".github/CONTRIBUTING.md",".github/WRITING.md",".github/actionlint.yaml",".github/actions/build-tmux/action.yml",".github/actions/setup-lisp/action.yml",".github/dependabot.yml",".github/social-preview.png",".github/workflows/docs.yml",".github/workflows/tests.yml",".gitignore",".tool-versions","AGENTS.md","CHANGELOG.md","CLAUDE.md","LICENSE","README.md","bin/libtmux-workspace","control/README.md","data/native-compatibility.json","data/options-catalog.json","docs/adr/0001-native-common-lisp-engine.md","docs/api.md","docs/assets/app-icon-1024-dark.png","docs/assets/app-icon-1024-light.png","docs/assets/apple-touch-icon-dark.png","docs/assets/apple-touch-icon-light.png","docs/assets/browserconfig-dark.xml","docs/assets/browserconfig.xml","docs/assets/favicon.ico","docs/assets/logo-1024.png","docs/assets/logo-128.png","docs/assets/logo-144.png","docs/assets/logo-152.png","docs/assets/logo-16.png","docs/assets/logo-167.png","docs/assets/logo-180.png","docs/assets/logo-192.png","docs/assets/logo-24.png","docs/assets/logo-256.png","docs/assets/logo-32.png","docs/assets/logo-384.png","docs/assets/logo-48.png","docs/assets/logo-512.png","docs/assets/logo-64.png","docs/assets/logo-96.png","docs/assets/logo.svg","docs/assets/maskable-192-dark.png","docs/assets/maskable-192-light.png","docs/assets/maskable-512-dark.png","docs/assets/maskable-512-light.png","docs/assets/mstile-150-dark.png","docs/assets/mstile-150-light.png","docs/assets/mstile-310-dark.png","docs/assets/mstile-310-light.png","docs/assets/opengraph-dark.jpg","docs/assets/opengraph-dark.png","docs/assets/opengraph-light.jpg","docs/assets/opengraph-light.png","docs/assets/safari-pinned-tab.svg","docs/assets/site-dark.webmanifest","docs/assets/site.webmanifest","docs/assets/social-square-dark.png","docs/assets/social-square-light.png","docs/assets/source.json","docs/assets/twitter-dark.png","docs/assets/twitter-light.png","docs/benchmarks.md","docs/branding.md","docs/capabilities.md","docs/captures.md","docs/configuration.md","docs/control-api.md","docs/control.md","docs/daemons.md","docs/design/workspace-v1.md","docs/design/workspace-v2.md","docs/fields.md","docs/index.md","docs/json-api.md","docs/modules.md","docs/operations.md","docs/queries.md","docs/query-api.md","docs/query-interchange.md","docs/superpowers/plans/2026-11-07-shared-docs-integration.md","docs/superpowers/plans/2026-11-07-workspace-v1.md","docs/testing.md","docs/transport.md","docs/tutorial.md","docs/workspace-api.md","docs/workspace-owned.md","docs/workspaces.md","examples/configuration.lisp","examples/control.lisp","examples/drive-panes.lisp","examples/managed-daemon.lisp","examples/owned-workspace.json","examples/owned-workspace.lisp","examples/quickstart.lisp","examples/run.lisp","examples/worker.sh","examples/workspace.json","examples/workspace.lisp","json/README.md","libtmux.asd","mise.toml","qlfile","qlfile.lock","query/README.md","regex/README.md","src/backend-sbcl.lisp","src/buffers.lisp","src/capture.lisp","src/client-operations.lisp","src/client.lisp","src/command-encoding.lisp","src/command-policy.lisp","src/conditions.lisp","src/configuration-acquisition.lisp","src/configuration-codec.lisp","src/configuration-operations.lisp","src/configuration-options.lisp","src/configuration-registry.lisp","src/control-codec.lisp","src/control-peer.lisp","src/control-reconnect.lisp","src/control.lisp","src/creation.lisp","src/daemon-sbcl.lisp","src/daemon.lisp","src/dispatch.lisp","src/geometry.lisp","src/graph.lisp","src/json.lisp","src/key-bindings.lisp","src/model.lisp","src/operations.lisp","src/options-catalog.lisp","src/package.lisp","src/placement.lisp","src/process-operations.lisp","src/process-sbcl.lisp","src/query-source.lisp","src/query.lisp","src/records.lisp","src/regex.lisp","src/registry.lisp","src/selection.lisp","src/server-operations.lisp","src/terminal-operations.lisp","src/termination.lisp","src/transport.lisp","src/witness-sbcl.lisp","src/workspace-api.lisp","src/workspace-apply.lisp","src/workspace-cli.lisp","src/workspace-geometry.lisp","src/workspace-inspection.lisp","src/workspace-owned.lisp","src/workspace-plan.lisp","src/workspace-state.lisp","src/workspace-writer.lisp","src/workspace.lisp","tests/buffers.lisp","tests/capture.lisp","tests/client-operations.lisp","tests/configuration-acquisition.lisp","tests/configuration-codec.lisp","tests/configuration-options.lisp","tests/configuration-reads.lisp","tests/configuration-registry.lisp","tests/control-codec.lisp","tests/control-peer.lisp","tests/control-state.lisp","tests/control.lisp","tests/creation.lisp","tests/daemon.lisp","tests/fixture.lisp","tests/geometry.lisp","tests/json.lisp","tests/key-bindings.lisp","tests/model.lisp","tests/operations.lisp","tests/package.lisp","tests/pane-processes.lisp","tests/placement.lisp","tests/process-child.py","tests/process.lisp","tests/query.lisp","tests/records.lisp","tests/regex.lisp","tests/resources.lisp","tests/server-operations.lisp","tests/termination.lisp","tests/test-api-directory.py","tests/test-benchmark.py","tests/test-example-cleanup.py","tests/workspace-apply-integration.lisp","tests/workspace-apply-race-integration.lisp","tests/workspace-cli.lisp","tests/workspace-geometry-integration.lisp","tests/workspace-geometry.lisp","tests/workspace-inspection-integration.lisp","tests/workspace-integration.lisp","tests/workspace-owned.lisp","tests/workspace-plan.lisp","tests/workspace-public-integration.lisp","tests/workspace-public.lisp","tests/workspace-publication-integration.lisp","tests/workspace-state-integration.lisp","tests/workspace-state.lisp","tests/workspace-writer-integration.lisp","tests/workspace.lisp","tools/api_directory.py","tools/benchmark.lisp","tools/benchmark.py","tools/check-documentation-artifact.py","tools/check-floor.lisp","tools/check-source.py","tools/doc-examples.py","tools/documentation.lisp","tools/examples.py","tools/extract-options-catalog.py","tools/lisp.sh","tools/options-catalog.py","tools/package.py","tools/provision-tmux.py","tools/test-processes.py","tools/test.lisp","tools/tmux-sources.json","tools/workspace-cli.lisp","verification.md","workspace/README.md","workspace/cli/README.md"]} diff --git a/site/src/data/example-sources.json b/site/src/data/example-sources.json index f7a5a3188..4cea436ff 100644 --- a/site/src/data/example-sources.json +++ b/site/src/data/example-sources.json @@ -133,9 +133,9 @@ }, "lisp/workspace:examples/workspace.lisp": { "repository": "libtmux/libtmux-lisp", - "revision": "e6f319c4257789cfe39547af001c718975f0a2ef", - "sha256": "30c9da53dcdcffd75b9618927c8f3cbaef32640602557786045b92d8315109bd", - "content": "(defpackage #:libtmux.examples\n (:use #:cl)\n (:local-nicknames (#:tm #:libtmux)\n (#:q #:libtmux.query)\n (#:j #:libtmux.json)\n (#:ws #:libtmux.workspace))\n (:export #:inspect-workspace #:create-workspace #:observed-value\n #:apply-workspace-document #:workspace-description\n #:terminate-owned-server #:configuration-report))\n\n(in-package #:libtmux.examples)\n\n;;; docs:configuration\n(defun configuration-report (client session)\n \"Read native configuration text; return an owned report and diagnostic outcomes.\"\n (let ((outcomes nil))\n (flet ((inspect-text (reader &rest options)\n (multiple-value-bind (text outcome) (apply reader client options)\n (push outcome outcomes)\n text)))\n (let ((report\n (list :options (inspect-text #'tm:show-options-text\n :scope :session :target session\n :name \"status\" :include-inherited t)\n :hooks (inspect-text #'tm:show-hooks-text\n :scope :session :target session)\n :environment (inspect-text #'tm:show-environment-text\n :scope :session :target session))))\n (values report (coerce (nreverse outcomes) 'simple-vector))))))\n;;; docs:end\n\n;;; docs:inventory\n(defun inspect-workspace (socket-path &key (program \"tmux\"))\n \"Acquire one graph from SOCKET-PATH; return owned session/window/pane data.\"\n (tm:with-client (client :program program :socket-path socket-path)\n (let ((snapshot (tm:fetch-snapshot client)))\n (loop for session across (tm:sessions snapshot)\n collect\n (list :session (tm:name session)\n :windows\n (loop for link across (tm:window-links session)\n for window = (tm:window link)\n collect (list :index (tm:index link)\n :name (tm:name window)\n :panes (map 'list #'tm:entity-data\n (tm:panes window)))))))))\n;;; docs:end\n\n;;; docs:worker\n(defun drive-worker (client session socket-path program worker-path receipt-path)\n \"Launch a worker through argv, wait for readiness and verify input consumption.\nWORKER-PATH names the shipped worker.sh; RECEIPT-PATH is in the owned demo directory.\nSignals operational conditions without retrying a mutation. Calls block.\"\n (let* ((ready (symbol-name (gensym \"example-ready-\")))\n (consumed (symbol-name (gensym \"example-consumed-\")))\n (window (observed-value\n (tm:new-window client session :name \"worker\"\n :command (list \"/bin/sh\" worker-path program\n socket-path ready consumed receipt-path))))\n (pane (aref (tm:panes window) 0))\n (message \"release #{literal}; λ\"))\n (tm:run-command client (list \"-N\" \"wait-for\" ready)\n :effect :read :timeout 1 :output-limit 4096)\n (tm:send-text client pane message :enter t)\n (tm:run-command client (list \"-N\" \"wait-for\" consumed)\n :effect :read :timeout 1 :output-limit 4096)\n (let ((receipt (uiop:read-file-string receipt-path :external-format :utf-8)))\n (assert (string= message receipt))\n (list :consumed receipt :pane (tm:id pane)))))\n;;; docs:end\n\n;;; docs:condition\n(defun cancelled-read (client)\n \"Demonstrate typed failure evidence using a read cancelled before acquisition.\"\n (let ((token (tm:make-cancellation-token)))\n (tm:cancel token)\n (handler-case\n (progn (tm:fetch-snapshot client :cancel-token token)\n (error \"A cancelled read unexpectedly completed\"))\n (tm:command-cancelled (condition)\n (let ((outcome (tm:error-outcome condition)))\n (list :condition (type-of condition)\n :status (and outcome (tm:outcome-status outcome))\n :phase (and outcome (tm:outcome-phase outcome))))))))\n;;; docs:end\n\n;;; docs:outcome\n(defun observed-value (outcome)\n \"Return an operation's observed value, or signal its observation failure.\"\n (when (tm:outcome-observation-error outcome)\n (error (tm:outcome-observation-error outcome)))\n (multiple-value-bind (value present-p) (tm:outcome-value outcome)\n (unless present-p\n (error \"This operation did not return an observation\"))\n value))\n;;; docs:end\n\n;;; docs:workspace\n(defun create-workspace (client)\n \"Extend the demo's WORK session; return a fresh captured graph.\nCreates a logs window, a second editor pane, a review session and a shared link.\nThe caller owns the isolated daemon; repeating this recipe there is an error.\"\n (let* ((before (tm:fetch-snapshot client))\n (work (find \"work\" (tm:sessions before) :key #'tm:name :test #'string=)))\n (unless work (error \"Start the demo's WORK session first\"))\n (let* ((editor-link (aref (tm:window-links work) 0))\n (editor (tm:window editor-link))\n (pane (aref (tm:panes editor) 0))\n (logs (observed-value\n (tm:new-window client work :name \"logs\" :command '(\"/bin/cat\"))))\n (review (observed-value\n (tm:new-session client :name \"review\" :window-name \"notes\"\n :command '(\"/bin/cat\")))))\n (tm:split-pane client pane :direction :horizontal :command '(\"/bin/cat\"))\n (tm:link-window client editor-link review 7)\n (tm:rename-window client logs \"logs #{literal}\")\n (tm:fetch-snapshot client))))\n;;; docs:end\n\n;;; docs:selection\n(defun wide-active-panes (snapshot)\n \"Select captured active panes at least 40 cells wide; no tmux commands.\"\n (loop for pane across (tm:panes snapshot)\n when (and (tm:active-p pane) (>= (tm:width pane) 40))\n collect (tm:entity-data pane)))\n;;; docs:end\n\n;;; docs:query\n(defparameter *wide-active-filter*\n (q:compile-filter\n :pane\n '(:and (:= :pane/active t)\n (:>= :pane/width 40))))\n\n(defun wide-active-pane-data (snapshot)\n \"Return owned data for captured active panes at least 40 cells wide; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *wide-active-filter* (tm:panes snapshot))))\n;;; docs:end\n\n;;; docs:relation\n(defparameter *active-session-filter*\n (q:compile-filter\n :session\n '(:any :session/window-links\n (:is :link/window\n (:any :window/panes\n (:= :pane/active t))))))\n\n(defun active-session-data (snapshot)\n \"Return owned data for sessions with an active pane; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:items\n (q:where (q:from (tm:sessions snapshot) :model :session)\n *active-session-filter*))))\n;;; docs:end\n\n;;; docs:regex\n(defparameter *cat-command-filter*\n (q:compile-filter\n :pane\n '(:regex-full-match :pane/current-command\n (:cl-ppcre \"CAT\" :case-insensitive-mode t))))\n\n(defun cat-pane-data (snapshot)\n \"Return owned data for captured panes whose command is exactly cat; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *cat-command-filter* (tm:panes snapshot))))\n;;; docs:end\n\n;;; docs:filterdocument\n(defun round-trip-filter-document (snapshot)\n \"Round-trip the checked regex filter and apply it to one retained snapshot.\"\n (let* ((document (j:write-filter *cat-command-filter*))\n (restored (j:read-filter document :allow-regex t)))\n (values document\n (map 'vector #'tm:entity-data\n (q:matching restored (tm:panes snapshot))))))\n;;; docs:end\n\n;;; docs:workspacenative\n(defun workspace-description ()\n \"Build the demo's declaration without I/O. Commands run only during apply.\nAPP_LABEL seeds the session environment, inherited by subsequent panes.\"\n (ws:make-workspace\n '(:schema \"libtmux.lisp.workspace/1\"\n :session\n (:name \"declared\" :cwd \"/tmp\"\n :environment #((\"APP_LABEL\" . \"declared\"))\n :windows\n #((:name \"code\" :index 2 :layout :tiled\n :panes #((:shell-command \"test \\\"$APP_LABEL\\\" = declared && exec /bin/cat\")\n (:command #(\"/bin/cat\"))))\n (:name \"shell\" :index 5\n :panes #((:command #(\"/bin/cat\")))))))))\n;;; docs:end\n\n;;; docs:workspaceconfig\n(defun apply-workspace-document (client pathname)\n \"Plan and apply one bounded workspace document through explicit CLIENT.\nReturn the preview steps and application result as two values. Application\nshares a 30-second budget; file loading and the preview precede that budget.\"\n (let* ((workspace (ws:read-workspace pathname))\n (snapshot (tm:fetch-snapshot client))\n (plan (ws:plan-workspace workspace snapshot)))\n (values (ws:plan-steps plan)\n (ws:apply-workspace client workspace :total-timeout 30))))\n;;; docs:end\n\n;;; docs:buffers\n(defun round-trip-bytes (client)\n \"Store and retrieve a named binary buffer, including NUL and invalid UTF-8.\"\n (let ((bytes (make-array 5 :element-type '(unsigned-byte 8)\n :initial-contents '(0 10 92 195 255))))\n (tm:set-buffer client bytes :name \"example bytes\")\n (multiple-value-bind (actual outcome)\n (tm:show-buffer client :name \"example bytes\")\n (assert (eq :succeeded (tm:outcome-status outcome)))\n (assert (equalp bytes actual))\n actual)))\n;;; docs:end\n\n;;; docs:termination\n(defun terminate-owned-server (socket-path &key (program \"tmux\"))\n \"Terminate the explicitly selected owned server and return its proven outcome.\"\n (tm:with-client (client :program program :socket-path socket-path)\n (let ((outcome (tm:kill-server client)))\n (assert (eq :succeeded (tm:outcome-status outcome)))\n (assert (eq :server-terminated (tm:outcome-phase outcome)))\n outcome)))\n;;; docs:end\n" + "revision": "a29c6b96e1c78501dff5073b538ae3180b0e63e3", + "sha256": "23ebf2961fefc6d1df4dc8a16d46c3fca99e51d37e8e1d1362bad13f402a951a", + "content": ";;; docs:package\n(defpackage #:libtmux.examples\n (:use #:cl)\n (:local-nicknames (#:tm #:libtmux)\n (#:q #:libtmux.query)\n (#:j #:libtmux.json)\n (#:ws #:libtmux.workspace))\n (:export #:inspect-workspace #:create-workspace #:observed-value\n #:apply-workspace-document #:workspace-description\n #:terminate-owned-server #:configuration-report))\n\n(in-package #:libtmux.examples)\n;;; docs:end\n\n;;; docs:configuration\n(defun configuration-report (client session)\n \"Read native configuration text; return an owned report and diagnostic outcomes.\"\n (let ((outcomes nil))\n (flet ((inspect-text (reader &rest options)\n (multiple-value-bind (text outcome) (apply reader client options)\n (push outcome outcomes)\n text)))\n (let ((report\n (list :options (inspect-text #'tm:show-options-text\n :scope :session :target session\n :name \"status\" :include-inherited t)\n :hooks (inspect-text #'tm:show-hooks-text\n :scope :session :target session)\n :environment (inspect-text #'tm:show-environment-text\n :scope :session :target session))))\n (values report (coerce (nreverse outcomes) 'simple-vector))))))\n;;; docs:end\n\n;;; docs:inventory\n(defun inspect-workspace (socket-path &key (program \"tmux\"))\n \"Acquire one graph from SOCKET-PATH; return owned session/window/pane data.\"\n (tm:with-client (client :program program :socket-path socket-path)\n (let ((snapshot (tm:fetch-snapshot client)))\n (loop for session across (tm:sessions snapshot)\n collect\n (list :session (tm:name session)\n :windows\n (loop for link across (tm:window-links session)\n for window = (tm:window link)\n collect (list :index (tm:index link)\n :name (tm:name window)\n :panes (map 'list #'tm:entity-data\n (tm:panes window)))))))))\n;;; docs:end\n\n;;; docs:worker\n(defun drive-worker (client session socket-path program worker-path receipt-path)\n \"Launch a worker through argv, wait for readiness and verify input consumption.\nWORKER-PATH names the shipped worker.sh; RECEIPT-PATH is in the owned demo directory.\nSignals operational conditions without retrying a mutation. Calls block.\"\n (let* ((ready (symbol-name (gensym \"example-ready-\")))\n (consumed (symbol-name (gensym \"example-consumed-\")))\n (window (observed-value\n (tm:new-window client session :name \"worker\"\n :command (list \"/bin/sh\" worker-path program\n socket-path ready consumed receipt-path))))\n (pane (aref (tm:panes window) 0))\n (message \"release #{literal}; λ\"))\n (tm:run-command client (list \"-N\" \"wait-for\" ready)\n :effect :read :timeout 1 :output-limit 4096)\n (tm:send-text client pane message :enter t)\n (tm:run-command client (list \"-N\" \"wait-for\" consumed)\n :effect :read :timeout 1 :output-limit 4096)\n (let ((receipt (uiop:read-file-string receipt-path :external-format :utf-8)))\n (assert (string= message receipt))\n (list :consumed receipt :pane (tm:id pane)))))\n;;; docs:end\n\n;;; docs:condition\n(defun cancelled-read (client)\n \"Demonstrate typed failure evidence using a read cancelled before acquisition.\"\n (let ((token (tm:make-cancellation-token)))\n (tm:cancel token)\n (handler-case\n (progn (tm:fetch-snapshot client :cancel-token token)\n (error \"A cancelled read unexpectedly completed\"))\n (tm:command-cancelled (condition)\n (let ((outcome (tm:error-outcome condition)))\n (list :condition (type-of condition)\n :status (and outcome (tm:outcome-status outcome))\n :phase (and outcome (tm:outcome-phase outcome))))))))\n;;; docs:end\n\n;;; docs:outcome\n(defun observed-value (outcome)\n \"Return an operation's observed value, or signal its observation failure.\"\n (when (tm:outcome-observation-error outcome)\n (error (tm:outcome-observation-error outcome)))\n (multiple-value-bind (value present-p) (tm:outcome-value outcome)\n (unless present-p\n (error \"This operation did not return an observation\"))\n value))\n;;; docs:end\n\n;;; docs:workspace\n(defun create-workspace (client)\n \"Extend the demo's WORK session; return a fresh captured graph.\nCreates a logs window, a second editor pane, a review session and a shared link.\nThe caller owns the isolated daemon; repeating this recipe there is an error.\"\n (let* ((before (tm:fetch-snapshot client))\n (work (find \"work\" (tm:sessions before) :key #'tm:name :test #'string=)))\n (unless work (error \"Start the demo's WORK session first\"))\n (let* ((editor-link (aref (tm:window-links work) 0))\n (editor (tm:window editor-link))\n (pane (aref (tm:panes editor) 0))\n (logs (observed-value\n (tm:new-window client work :name \"logs\" :command '(\"/bin/cat\"))))\n (review (observed-value\n (tm:new-session client :name \"review\" :window-name \"notes\"\n :command '(\"/bin/cat\")))))\n (tm:split-pane client pane :direction :horizontal :command '(\"/bin/cat\"))\n (tm:link-window client editor-link review 7)\n (tm:rename-window client logs \"logs #{literal}\")\n (tm:fetch-snapshot client))))\n;;; docs:end\n\n;;; docs:selection\n(defun wide-active-panes (snapshot)\n \"Select captured active panes at least 40 cells wide; no tmux commands.\"\n (loop for pane across (tm:panes snapshot)\n when (and (tm:active-p pane) (>= (tm:width pane) 40))\n collect (tm:entity-data pane)))\n;;; docs:end\n\n;;; docs:query\n(defparameter *wide-active-filter*\n (q:compile-filter\n :pane\n '(:and (:= :pane/active t)\n (:>= :pane/width 40))))\n\n(defun wide-active-pane-data (snapshot)\n \"Return owned data for captured active panes at least 40 cells wide; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *wide-active-filter* (tm:panes snapshot))))\n;;; docs:end\n\n;;; docs:explain\n(defun filter-execution (filter)\n \"Report that FILTER runs locally and acquires nothing, with the fields it reads.\"\n (let ((report (q:explain filter)))\n (list :execution (getf report :execution)\n :acquires-p (getf report :acquires-p)\n :fields (getf report :required-fields))))\n;;; docs:end\n\n;;; docs:relation\n(defparameter *active-session-filter*\n (q:compile-filter\n :session\n '(:any :session/window-links\n (:is :link/window\n (:any :window/panes\n (:= :pane/active t))))))\n\n(defun active-session-data (snapshot)\n \"Return owned data for sessions with an active pane; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:items\n (q:where (q:from (tm:sessions snapshot) :model :session)\n *active-session-filter*))))\n;;; docs:end\n\n;;; docs:regex\n(defparameter *cat-command-filter*\n (q:compile-filter\n :pane\n '(:regex-full-match :pane/current-command\n (:cl-ppcre \"CAT\" :case-insensitive-mode t))))\n\n(defun cat-pane-data (snapshot)\n \"Return owned data for captured panes whose command is exactly cat; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *cat-command-filter* (tm:panes snapshot))))\n;;; docs:end\n\n;;; docs:filterdocument\n(defun round-trip-filter-document (snapshot)\n \"Round-trip the checked regex filter and apply it to one retained snapshot.\"\n (let* ((document (j:write-filter *cat-command-filter*))\n (restored (j:read-filter document :allow-regex t)))\n (values document\n (map 'vector #'tm:entity-data\n (q:matching restored (tm:panes snapshot))))))\n;;; docs:end\n\n;;; docs:workspacenative\n(defun workspace-description ()\n \"Build the demo's declaration without I/O. Commands run only during apply.\nAPP_LABEL seeds the session environment, inherited by subsequent panes.\"\n (ws:make-workspace\n '(:schema \"libtmux.lisp.workspace/1\"\n :session\n (:name \"declared\" :cwd \"/tmp\"\n :environment #((\"APP_LABEL\" . \"declared\"))\n :windows\n #((:name \"code\" :index 2 :layout :tiled\n :panes #((:shell-command \"test \\\"$APP_LABEL\\\" = declared && exec /bin/cat\")\n (:command #(\"/bin/cat\"))))\n (:name \"shell\" :index 5\n :panes #((:command #(\"/bin/cat\")))))))))\n;;; docs:end\n\n;;; docs:workspaceconfig\n(defun apply-workspace-document (client pathname)\n \"Plan and apply one bounded workspace document through explicit CLIENT.\nReturn the preview steps and application result as two values. Application\nshares a 30-second budget; file loading and the preview precede that budget.\"\n (let* ((workspace (ws:read-workspace pathname))\n (snapshot (tm:fetch-snapshot client))\n (plan (ws:plan-workspace workspace snapshot)))\n (values (ws:plan-steps plan)\n (ws:apply-workspace client workspace :total-timeout 30))))\n;;; docs:end\n\n;;; docs:buffers\n(defun round-trip-bytes (client)\n \"Store and retrieve a named binary buffer, including NUL and invalid UTF-8.\"\n (let ((bytes (make-array 5 :element-type '(unsigned-byte 8)\n :initial-contents '(0 10 92 195 255))))\n (tm:set-buffer client bytes :name \"example bytes\")\n (multiple-value-bind (actual outcome)\n (tm:show-buffer client :name \"example bytes\")\n (assert (eq :succeeded (tm:outcome-status outcome)))\n (assert (equalp bytes actual))\n actual)))\n;;; docs:end\n\n;;; docs:termination\n(defun terminate-owned-server (socket-path &key (program \"tmux\"))\n \"Terminate the explicitly selected owned server and return its proven outcome.\"\n (tm:with-client (client :program program :socket-path socket-path)\n (let ((outcome (tm:kill-server client)))\n (assert (eq :succeeded (tm:outcome-status outcome)))\n (assert (eq :server-terminated (tm:outcome-phase outcome)))\n outcome)))\n;;; docs:end\n" }, "lua:examples/native_query.lua": { "repository": "libtmux/libtmux-lua", diff --git a/site/src/data/manifest-packages.json b/site/src/data/manifest-packages.json index 363bf1dbb..64c70c449 100644 --- a/site/src/data/manifest-packages.json +++ b/site/src/data/manifest-packages.json @@ -184,14 +184,14 @@ }, "lisp": { "repo": "libtmux/libtmux-lisp", - "revision": "e6f319c4257789cfe39547af001c718975f0a2ef", + "revision": "a29c6b96e1c78501dff5073b538ae3180b0e63e3", "distributions": [ { "name": "libtmux", "version": "0.1.0", "manifest": "libtmux.asd", "repo": "libtmux/libtmux-lisp", - "revision": "e6f319c4257789cfe39547af001c718975f0a2ef" + "revision": "a29c6b96e1c78501dff5073b538ae3180b0e63e3" } ], "units": [ diff --git a/site/src/data/mentions.json b/site/src/data/mentions.json index a804e92d9..8b3c4f6df 100644 --- a/site/src/data/mentions.json +++ b/site/src/data/mentions.json @@ -9506,6 +9506,13 @@ "title": "Capture pane output", "section": "examples" }, + { + "port": "lisp", + "symbol": "libtmux:capture-pane", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:capture-pane", @@ -9562,6 +9569,13 @@ "title": "Attaching to tmux", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:client", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:client-busy", @@ -9618,6 +9632,13 @@ "title": "REPL tutorial", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:command-outcome", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:command-outcome", @@ -9877,6 +9898,13 @@ "title": "Explicit operations", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:kill-pane", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:kill-pane", @@ -9919,6 +9947,13 @@ "title": "REPL tutorial", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:kill-session", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:kill-session", @@ -9926,6 +9961,13 @@ "title": "Explicit operations", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:kill-window", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:kill-window", @@ -10052,6 +10094,13 @@ "title": "Attaching to tmux", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:new-session", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:new-session", @@ -10234,6 +10283,13 @@ "title": "Explicit operations", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:resize-pane", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:resize-pane", @@ -10241,6 +10297,13 @@ "title": "Explicit operations", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:resize-window", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:resize-window", @@ -10360,6 +10423,13 @@ "title": "Capture pane output", "section": "examples" }, + { + "port": "lisp", + "symbol": "libtmux:send-text", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:send-text", @@ -10409,6 +10479,13 @@ "title": "Explicit operations", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:set-hook", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:set-hook", @@ -10416,6 +10493,13 @@ "title": "Explicit operations", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:set-option", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:set-option", @@ -10437,6 +10521,13 @@ "title": "Explicit operations", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:show-hooks", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:show-hooks-text", @@ -10444,6 +10535,13 @@ "title": "Explicit operations", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:show-options", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:show-options", @@ -10479,6 +10577,13 @@ "title": "Explicit operations", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux:stop-daemon", + "page": "/lisp/latest/guides/tutorial/", + "title": "REPL tutorial", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux:suspend-client", @@ -10654,6 +10759,13 @@ "title": "Capture pane output", "section": "examples" }, + { + "port": "lisp", + "symbol": "libtmux:with-client", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux.control:await-request", @@ -10675,6 +10787,20 @@ "title": "Getting started", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux.control:with-connection", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, + { + "port": "lisp", + "symbol": "libtmux.control:with-reconnection", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux.json:document-limit", @@ -10703,6 +10829,13 @@ "title": "Query interchange", "section": "topics" }, + { + "port": "lisp", + "symbol": "libtmux.json:read-filter", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux.json:read-filter", @@ -10738,6 +10871,13 @@ "title": "Native queries", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux.query:compile-filter", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux.query:compile-filter", @@ -10780,6 +10920,13 @@ "title": "Native queries", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux.query:items", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux.query:items", @@ -10864,6 +11011,13 @@ "title": "Native queries", "section": "guides" }, + { + "port": "lisp", + "symbol": "libtmux.workspace", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux.workspace", @@ -10871,6 +11025,13 @@ "title": "Workspace guide", "section": "workspace" }, + { + "port": "lisp", + "symbol": "libtmux.workspace:apply-workspace", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux.workspace:apply-workspace", @@ -10878,6 +11039,13 @@ "title": "Legacy workspace topology guide", "section": "workspace" }, + { + "port": "lisp", + "symbol": "libtmux.workspace:fetch-workspace-state", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux.workspace:fetch-workspace-state", @@ -10906,6 +11074,13 @@ "title": "Workspace guide", "section": "workspace" }, + { + "port": "lisp", + "symbol": "libtmux.workspace:make-workspace", + "page": "/lisp/latest/guides/getting-started/", + "title": "Getting started", + "section": "guides" + }, { "port": "lisp", "symbol": "libtmux.workspace:make-workspace", diff --git a/site/src/data/port-guides/lisp.json b/site/src/data/port-guides/lisp.json index 37833e491..0d4f6a003 100644 --- a/site/src/data/port-guides/lisp.json +++ b/site/src/data/port-guides/lisp.json @@ -1,56 +1,56 @@ { "source": { "repository": "libtmux/libtmux-lisp", - "revision": "e6f319c4257789cfe39547af001c718975f0a2ef" + "revision": "a29c6b96e1c78501dff5073b538ae3180b0e63e3" }, "guides": [ { "path": "README.md", - "content": "\n
\n \n \n \"libtmux\n \n
\n\n\n
\n\n# libtmux-lisp\n\n
\n\nlibtmux-lisp is a native Common Lisp tmux client library. Acquire a CLOS\nobject graph once, process its panes with ordinary sequences, and make\nmutations through an explicit client.\n\n**Implemented:** captured sessions, physical windows, window links and panes;\nbounded subprocess transport; cancellation; named operations, byte buffers,\nvalidated native queries, eager QuerySets, optional regex and bounded JSON;\n[owned declarative workspaces](docs/workspace-owned.md) with local previews,\nexplicit reconciliation and an explicit-endpoint CLI;\n[decoded configuration reads](docs/configuration.md),\n[printer inspection](docs/operations.md#configuration-inspection) and\n[typed option, hook and environment mutations](docs/operations.md#configuration-mutations)\nfor the exact reviewed tmux catalogs through 3.8; explicit entity and server\ntermination with retained outcome evidence; [owned daemon scopes](docs/daemons.md);\noptional [queued control commands, pane-output streams and explicit reconnection](docs/control.md) on\ntmux 3.8+.\n**In development:** broader event qualification and source filtering.\nMCP is intentionally out of scope. The `0.1.0`\nsystems are unreleased.\n\n## Install from source\n\nUse Linux x86-64 (including WSL), kernel 6.9+, Bash and a native tmux binary.\nThe supported tmux range is 3.3a through 3.8, including intermediate releases.\nPlain tmux 3.3 is rejected. The pinned toolchain is SBCL 2.6.10,\nASDF/UIOP 3.3.7 and Qlot 1.8.4. The\n[process requirements](docs/transport.md#supported-process-boundary) also apply\nto WSL; its distribution name alone does not establish kernel capabilities.\n\nCore and query loading require ASDF/UIOP only. Mise reproduces the contributor\ntoolchain; Qlot installs development and optional dependencies. ASDF is the\nCommon Lisp build system.\n\n```console\n$ git clone https://github.com/libtmux/libtmux-lisp.git && cd libtmux-lisp\n```\n\nIn an existing SBCL application with ASDF loaded, register this checkout from\nits root:\n\n```lisp\n(asdf:load-asd (truename \"libtmux.asd\"))\n```\n\nLoad core and its local query API:\n\n```lisp\n(asdf:load-system \"libtmux/query\")\n```\n\nTo reproduce the pinned contributor environment and run all optional examples,\nuse [mise 2026.11.3+](https://mise.jdx.dev/getting-started.html).\nReview [mise.toml](mise.toml), then trust the checkout:\n\n```console\n$ mise trust\n```\n\n```console\n$ mise install\n```\n\nInstall the locked dependencies. This is the network step:\n\n```console\n$ mise run setup\n```\n\nRun the complete workspace example. It creates a private tmux socket, checks\nthe results and removes its daemon; it never addresses your default server.\n\n```console\n$ mise run examples\n```\n\nSuccess includes `EXAMPLES PASS: graph, links, native, compiled, relation,\nregex and JSON selection, declarative workspace, false/presence, ownership,\nrefresh, bytes, capture, close, terminate`. Core and query loading need ASDF/UIOP only; optional\nregex/JSON use the locked CL-PPCRE/Jzon systems. The example runner also needs\nPython 3. No Java runtime is involved.\n\n## Choose an ASDF system\n\nAll systems share this source distribution, version and [changelog](CHANGELOG.md).\nLoad only the systems your application uses. Each system has its own README:\n\n| System | Use it for | Additional dependencies |\n| --- | --- | --- |\n| `libtmux` | Captures, CLOS objects and explicit tmux operations | ASDF/UIOP |\n| [`libtmux/query`](query/README.md) | Native predicates, relations and eager QuerySets | Core |\n| [`libtmux/regex`](regex/README.md) | CL-PPCRE search and full-match filters | Query, CL-PPCRE |\n| [`libtmux/json`](json/README.md) | Bounded query document interchange | Query, Jzon |\n| [`libtmux/control`](control/README.md) | Queued requests, output streams and reconnection on tmux 3.8+ | Core |\n| [`libtmux/workspace`](workspace/README.md) | Owned declarations, drift previews and explicit reconciliation | Core, Jzon |\n| [`libtmux/workspace/cli`](workspace/cli/README.md) | Workspace validation, previews and explicit-endpoint apply | Workspace |\n\nThese directories provide system documentation. ASDF definitions remain in\n[`libtmux.asd`](libtmux.asd); source stays in `src/`. Secondary systems are\noptional parts of one library release.\n\n## Start an isolated daemon\n\nThis complete function starts an empty-config daemon, creates one session and\nreturns pane data after closing its client and daemon. The\n[runnable program](examples/managed-daemon.lisp) includes loading and assertions.\n\n\n```lisp\n(defun inspect-owned-workspace (&key (program \"tmux\"))\n \"Start an isolated daemon; return owned pane data after closing both resources.\"\n (libtmux:with-daemon (daemon :program program)\n (libtmux:with-client (client :program (libtmux:daemon-program daemon)\n :socket-path (libtmux:daemon-socket-path daemon))\n (let ((outcome (libtmux:new-session client :name \"demo\" :command '(\"/bin/cat\"))))\n (when (libtmux:outcome-observation-error outcome)\n (error (libtmux:outcome-observation-error outcome))))\n (map 'list #'libtmux:entity-data\n (libtmux:panes (libtmux:fetch-snapshot client))))))\n```\n\n\nRun it from the checkout with the pinned toolchain:\n\n```console\n$ mise exec -- tools/lisp.sh examples/managed-daemon.lisp\n```\n\nIt prints `MANAGED DAEMON PASS` and a pane record. Read\n[daemon scopes](docs/daemons.md) for environment, readiness and cleanup contracts.\nUse an ordinary client alone when connecting to an existing server.\n\n## Inspect a workspace\n\nThe [REPL tutorial](docs/tutorial.md) loads the example package, whose local\nnickname `tm` refers to `libtmux`. This complete function returns ordinary\nowned data after closing its client:\n\n\n```lisp\n(defun inspect-workspace (socket-path &key (program \"tmux\"))\n \"Acquire one graph from SOCKET-PATH; return owned session/window/pane data.\"\n (tm:with-client (client :program program :socket-path socket-path)\n (let ((snapshot (tm:fetch-snapshot client)))\n (loop for session across (tm:sessions snapshot)\n collect\n (list :session (tm:name session)\n :windows\n (loop for link across (tm:window-links session)\n for window = (tm:window link)\n collect (list :index (tm:index link)\n :name (tm:name window)\n :panes (map 'list #'tm:entity-data\n (tm:panes window)))))))))\n```\n\n\n[libtmux:fetch-snapshot](docs/api.md#fetch-snapshot-function) contacts tmux.\nTraversal and projection inside the loops are\nlocal. Returned strings and sequence containers belong to the caller.\nAcquisition spans an interval; it is not a transaction over a changing daemon.\n\nThe [walkthrough](docs/tutorial.md#build-a-linked-workspace) also creates two\nsessions, splits a pane and links one physical window into both sessions:\n\n```mermaid\ngraph LR\n work[Session: work] --> a[Window link: index 0]\n work --> b[Window link: logs]\n review[Session: review] --> c[Window link: index 7]\n review --> d[Window link: notes]\n a --> editor[Physical window: editor]\n c --> editor\n editor --> p1[Pane 1]\n editor --> p2[Pane 2]\n b --> logs[Physical window: logs]\n d --> notes[Physical window: notes]\n```\n\nSelect a **window link** when session/index context matters. Rename the physical\nwindow to affect every link. Refresh returns a new observation; earlier captures\nretain their values. See [identity and ownership](docs/captures.md).\n\nProcess the retained capture with ordinary Lisp. This function uses only local\naccessors and returns a list of owned pane data:\n\n\n```lisp\n(defun wide-active-panes (snapshot)\n \"Select captured active panes at least 40 cells wide; no tmux commands.\"\n (loop for pane across (tm:panes snapshot)\n when (and (tm:active-p pane) (>= (tm:width pane) 40))\n collect (tm:entity-data pane)))\n```\n\n\n## Compile a local query\n\nThe tutorial's example package gives `libtmux` and `libtmux.query` the local\nnicknames `tm` and `q`. This checked function compiles once, filters a captured\nvector locally, and returns ordinary owned data:\n\n\n```lisp\n(defparameter *wide-active-filter*\n (q:compile-filter\n :pane\n '(:and (:= :pane/active t)\n (:>= :pane/width 40))))\n\n(defun wide-active-pane-data (snapshot)\n \"Return owned data for captured active panes at least 40 cells wide; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *wide-active-filter* (tm:panes snapshot))))\n```\n\n\n`matching` returns a fresh simple vector and preserves order and duplicates.\nThe compiler owns mutable operands, rejects cycles and mistyped fields, and\nnever evaluates query data. Scalar filtering performs no tmux calls. Read the\n[query guide](docs/queries.md) for presence, limits, inspection and strict\ncardinality.\n\nRelations traverse the same captured graph. This checked query follows session\nlinks to physical windows and panes, then uses the eager local QuerySet:\n\n\n```lisp\n(defparameter *active-session-filter*\n (q:compile-filter\n :session\n '(:any :session/window-links\n (:is :link/window\n (:any :window/panes\n (:= :pane/active t))))))\n\n(defun active-session-data (snapshot)\n \"Return owned data for sessions with an active pane; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:items\n (q:where (q:from (tm:sessions snapshot) :model :session)\n *active-session-filter*))))\n```\n\n\n## Declare and apply a workspace\n\nLoad the optional `libtmux/workspace` system. This pure constructor function\nfrom the [complete program](examples/owned-workspace.lisp) declares two windows\nand three panes using ordinary Lisp data:\n\n\n```lisp\n(defun owned-description ()\n \"Describe two windows and three panes without contacting tmux.\"\n (libtmux.workspace:make-workspace\n '(:schema \"libtmux.lisp.workspace/2\" :id \"demo-workspace\"\n :session\n (:id \"main\" :name \"owned-demo\"\n :environment #((\"DEMO_LABEL\" . \"hello from Common Lisp\"))\n :windows\n #((:id \"code\" :name \"code\" :index 2 :layout :tiled\n :panes #((:id \"shell\" :command #(\"/bin/cat\"))\n (:id \"repl\" :command #(\"/bin/cat\"))))\n (:id \"logs\" :name \"logs\" :index 5\n :panes #((:id \"tail\" :command #(\"/bin/cat\")))))))))\n```\n\n\nThe equivalent [JSON file](examples/owned-workspace.json) is bounded and\nversioned. Acquisition is explicit; a local preview separates declaration\nchanges from captured drift. Apply reacquires state, preserves physical IDs,\nand requires `:reconcile t` for permitted additions, renames and layouts.\nUnowned sessions and busy claims are refused.\n\nRun the complete program on its own daemon:\n\n```console\n$ mise exec -- tools/lisp.sh examples/owned-workspace.lisp\n```\n\nIt checks file/native equivalence, printed shell output, retained observations,\nstable IDs after reconciliation and an unchanged second apply. A deliberate\nbad-checksum layout demonstrates failed-step evidence and explicit incomplete\ninspection. No mutation is retried or rolled back. Read the\n[owned workspace guide](docs/workspace-owned.md) and\n[API reference](docs/workspace-api.md); legacy\n[topology-only reuse](docs/workspaces.md) remains available under schema `/1`.\n\n## Add regex and a versioned filter document\n\nOptional systems keep core/query dependency-free while providing a compiled\nCL-PPCRE scanner and a bounded native JSON envelope. These checked definitions\nmatch the demo's `cat` panes, serialize the filter, read it with explicit regex\npermission, and evaluate the restored predicate against the same capture:\n\n\n```lisp\n(defparameter *cat-command-filter*\n (q:compile-filter\n :pane\n '(:regex-full-match :pane/current-command\n (:cl-ppcre \"CAT\" :case-insensitive-mode t))))\n\n(defun cat-pane-data (snapshot)\n \"Return owned data for captured panes whose command is exactly cat; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *cat-command-filter* (tm:panes snapshot))))\n```\n\n\n\n```lisp\n(defun round-trip-filter-document (snapshot)\n \"Round-trip the checked regex filter and apply it to one retained snapshot.\"\n (let* ((document (j:write-filter *cat-command-filter*))\n (restored (j:read-filter document :allow-regex t)))\n (values document\n (map 'vector #'tm:entity-data\n (q:matching restored (tm:panes snapshot))))))\n```\n\n\nThe JSON decoder rejects duplicates, unknown names, null operands and exhausted\ninput/depth/node/string/membership/numeric bounds. It never interns external\nnames. See [optional query interchange](docs/query-interchange.md).\n\n## Find the right guide\n\n| Task | Start here |\n| --- | --- |\n| Load the library; inspect and build a workspace | [REPL tutorial](docs/tutorial.md) |\n| Start and stop a private empty-config daemon | [Daemon scopes](docs/daemons.md) |\n| Filter with `loop`, handle false/absence, export plists | [Local data recipes](docs/tutorial.md#select-and-project-locally) |\n| Compile typed filters, traverse relations and compose QuerySets | [Native queries](docs/queries.md) · [Query API](docs/query-api.md) |\n| Add CL-PPCRE or exchange bounded filter documents | [Query interchange](docs/query-interchange.md) · [JSON API](docs/json-api.md) |\n| Create, inspect or explicitly reconcile an owned workspace | [Owned workspaces](docs/workspace-owned.md) · [Workspace API](docs/workspace-api.md) |\n| Rename, resize, move, send input, capture, use buffers or terminate explicit targets | [Operation contracts](docs/operations.md) |\n| Read typed options, hooks and environment | [Decoded configuration](docs/configuration.md) |\n| Inspect native option, hook and environment output | [Configuration inspection](docs/operations.md#configuration-inspection) |\n| Look up signatures, multiple values and conditions | [Public API](docs/api.md) · [Captured fields](docs/fields.md) |\n| Understand deadlines, cancellation and cleanup | [Transport](docs/transport.md) |\n| Reconnect without replaying commands | [Fresh control observations](docs/control.md#reconnect-with-fresh-observations) |\n| Evaluate async, streaming and performance support | [Capabilities and limits](docs/capabilities.md) |\n| Rerun FiveAM tests at the REPL or inspect CI coverage | [Testing](docs/testing.md) · [Verification](verification.md) |\n| Navigate all documentation | [Guide index](docs/index.md) |\n\nCore subprocess calls block. Each client accepts one external operation at a\ntime; concurrent reuse signals `client-busy`. Optional control\n[`submit-command`](docs/control-api.md#submit-command-function) queues a request\nwithout awaiting its reply; use\n[`await-request`](docs/control-api.md#await-request-function) or\n[`next-event`](docs/control-api.md#next-event-function) for bounded waits.\nClosing a client releases its resources and leaves tmux running.\n[`kill-server`](docs/api.md#kill-server-function)\nis a separate explicit operation that proves the daemon accepted during its\npreflight exited. [Daemon scopes](docs/daemons.md) separately own a new private\ndaemon; the tutorial also documents explicit tmux setup and cleanup.\n\nNamed mutations preserve dispatch evidence and separate successful changes\nfrom follow-up observation failures. Inspect\n[command-outcome](docs/api.md#command-outcome-type) or the condition's\n[error-outcome](docs/api.md#error-outcome-function); never retry an uncertain\nmutation blindly. See\n[outcome handling](docs/tutorial.md#handle-command-and-observation-outcomes).\n\nThe examples are shipped source, executed on isolated servers and checked for\nexcerpt drift. All tmux releases from 3.3a through 3.8 are supported. CI uses the\nlatest stable SBCL pin and tests only the range's endpoints, 3.3a and 3.8, to\nreduce build time. No benchmark result is claimed.\n\nFor changes, read [Contributing](.github/CONTRIBUTING.md) and\n[Writing](.github/WRITING.md). Licensed under [MIT](LICENSE).\n\n[Branding assets](docs/branding.md) include the logo, icons, and social cards.\n" + "content": "\n
\n \n \n \"libtmux\n \n
\n\n\n
\n\n# libtmux-lisp\n\n[![Native Lisp checks](https://github.com/libtmux/libtmux-lisp/actions/workflows/tests.yml/badge.svg)](https://github.com/libtmux/libtmux-lisp/actions/workflows/tests.yml)\n[![libtmux.org](https://img.shields.io/badge/docs-libtmux.org-0b7285)](https://libtmux.org/en/lisp/)\n[![license](https://img.shields.io/badge/license-MIT-blue)](https://github.com/libtmux/libtmux-lisp/blob/master/LICENSE)\n\n
\n\nDrive tmux from Common Lisp: [sessions][api-session], [windows][api-window],\n[window links][api-window-link] and [panes][api-pane] as CLOS objects, queried\nwith plain sequences, changed through an explicit [`client`][api-client].\n\n[Documentation](https://libtmux.org/en/lisp/) ·\n[API reference](https://libtmux.org/en/lisp/latest/reference/) ·\n[REPL tutorial](docs/tutorial.md)\n\n**Contents** — [Install](#install-from-source) ·\n[Start a server](#start-a-private-server) ·\n[Drive a pane](#drive-a-pane) ·\n[Find things](#find-sessions-windows-and-panes) ·\n[Query](#query-a-snapshot) ·\n[Workspaces](#build-a-workspace) ·\n[Control](#stream-pane-output) ·\n[Systems](#choose-an-asdf-system) ·\n[Status](#support-and-status) ·\n[Guides](#find-the-right-guide)\n\n## Install from source\n\nNeeds SBCL, Linux (WSL included) and tmux 3.3a or newer. Not released yet:\nload it from a checkout.\n\n```console\n$ git clone https://github.com/libtmux/libtmux-lisp.git && cd libtmux-lisp\n```\n\nRegister the checkout with ASDF, from its root:\n\n```lisp\n(asdf:load-asd (truename \"libtmux.asd\"))\n```\n\nLoad core and queries. Both need only ASDF/UIOP:\n\n```lisp\n(asdf:load-system \"libtmux/query\")\n```\n\nTo run the examples, set up the toolchain with\n[mise](.github/CONTRIBUTING.md), then:\n\n```console\n$ mise run examples\n```\n\nThe examples run on a private tmux socket, never your default server.\n\n## Start a private server\n\n### [`libtmux:with-daemon`][api-with-daemon]: a server that cleans up after itself\n\n[`with-client`][api-with-client] scopes the connection;\n[`new-session`][api-new-session] creates a session.\n\n\n```lisp\n(defun inspect-owned-workspace (&key (program \"tmux\"))\n \"Start an isolated daemon; return owned pane data after closing both resources.\"\n (libtmux:with-daemon (daemon :program program)\n (libtmux:with-client (client :program (libtmux:daemon-program daemon)\n :socket-path (libtmux:daemon-socket-path daemon))\n (let ((outcome (libtmux:new-session client :name \"demo\" :command '(\"/bin/cat\"))))\n (when (libtmux:outcome-observation-error outcome)\n (error (libtmux:outcome-observation-error outcome))))\n (map 'list #'libtmux:entity-data\n (libtmux:panes (libtmux:fetch-snapshot client))))))\n```\n\n\n```console\n$ mise exec -- tools/lisp.sh examples/managed-daemon.lisp\n```\n\nPrints `MANAGED DAEMON PASS` and a pane record. To reach an existing server,\nuse `with-client` alone. More: [daemon scopes](docs/daemons.md).\n\n## Drive a pane\n\n### [`libtmux:split-pane`][api-split-pane]: split, send, capture and resize\n\n[`send-text`][api-send-text] types into the new pane and\n[`capture-pane`][api-capture-pane] reads its screen.\n[`resize-window`][api-resize-window] and [`resize-pane`][api-resize-pane] set\nsizes in cells.\n\n\n```lisp\n(asdf:load-system \"libtmux\")\n\n(defun drive-panes (&key (program \"tmux\"))\n \"Split a pane, send it text, capture its screen and resize; return what tmux reports.\"\n (libtmux:with-daemon (daemon :program program)\n (libtmux:with-client (client :program (libtmux:daemon-program daemon)\n :socket-path (libtmux:daemon-socket-path daemon))\n (flet ((observed (outcome)\n (when (libtmux:outcome-observation-error outcome)\n (error (libtmux:outcome-observation-error outcome)))\n (values (libtmux:outcome-value outcome))))\n (observed (libtmux:new-session client :name \"demo\" :command '(\"/bin/cat\")))\n (let* ((left (aref (libtmux:fetch-panes client) 0))\n (right (observed (libtmux:split-pane client left :direction :horizontal\n :command '(\"/bin/cat\")))))\n (libtmux:send-text client right \"hello from Lisp\" :enter t)\n (let* ((text (libtmux:capture-pane client right))\n (window (observed (libtmux:resize-window client (libtmux:window right)\n :width 100 :height 30)))\n (narrow (observed (libtmux:resize-pane client right :width 20))))\n (list :text (string-right-trim '(#\\Newline) text)\n :window-size (list (libtmux:width window) (libtmux:height window))\n :pane-width (libtmux:width narrow))))))))\n```\n\n\n```console\n$ mise exec -- tools/lisp.sh examples/drive-panes.lisp\n```\n\nPrints `PANE OPERATIONS PASS`, the captured text, the window size and the pane\nwidth. A send succeeds when tmux accepts the input, not when the application\nreads it: [wait on a signal](docs/tutorial.md#drive-an-application-without-polling).\n\n- [`kill-pane`][api-kill-pane], [`kill-window`][api-kill-window],\n [`kill-session`][api-kill-session] and [`kill-server`][api-kill-server]\n remove targets.\n- [`set-option`][api-set-option] and [`set-hook`][api-set-hook] write;\n [`show-options`][api-show-options] and [`show-hooks`][api-show-hooks] read.\n\nMore: [operation contracts](docs/operations.md) ·\n[decoded configuration](docs/configuration.md)\n\n## Find sessions, windows and panes\n\n### [`libtmux:fetch-snapshot`][api-fetch-snapshot]: read the graph once\n\nOne call to tmux; everything after is local. The examples share one package:\n`tm` is `libtmux`, `q` is `libtmux.query`, `j` is `libtmux.json` and `ws` is\n`libtmux.workspace`.\n\n\n```lisp\n(defpackage #:libtmux.examples\n (:use #:cl)\n (:local-nicknames (#:tm #:libtmux)\n (#:q #:libtmux.query)\n (#:j #:libtmux.json)\n (#:ws #:libtmux.workspace))\n (:export #:inspect-workspace #:create-workspace #:observed-value\n #:apply-workspace-document #:workspace-description\n #:terminate-owned-server #:configuration-report))\n\n(in-package #:libtmux.examples)\n```\n\n\n\n```lisp\n(defun inspect-workspace (socket-path &key (program \"tmux\"))\n \"Acquire one graph from SOCKET-PATH; return owned session/window/pane data.\"\n (tm:with-client (client :program program :socket-path socket-path)\n (let ((snapshot (tm:fetch-snapshot client)))\n (loop for session across (tm:sessions snapshot)\n collect\n (list :session (tm:name session)\n :windows\n (loop for link across (tm:window-links session)\n for window = (tm:window link)\n collect (list :index (tm:index link)\n :name (tm:name window)\n :panes (map 'list #'tm:entity-data\n (tm:panes window)))))))))\n```\n\n\nA window can be linked into several sessions:\n\n```mermaid\ngraph LR\n work[Session: work] --> a[Window link: index 0]\n work --> b[Window link: logs]\n review[Session: review] --> c[Window link: index 7]\n review --> d[Window link: notes]\n a --> editor[Physical window: editor]\n c --> editor\n editor --> p1[Pane 1]\n editor --> p2[Pane 2]\n b --> logs[Physical window: logs]\n d --> notes[Physical window: notes]\n```\n\nMore: [identity and ownership](docs/captures.md) ·\n[walkthrough](docs/tutorial.md#build-a-linked-workspace).\n\n### [`libtmux:panes`][api-panes]: filter with plain Lisp\n\n\n```lisp\n(defun wide-active-panes (snapshot)\n \"Select captured active panes at least 40 cells wide; no tmux commands.\"\n (loop for pane across (tm:panes snapshot)\n when (and (tm:active-p pane) (>= (tm:width pane) 40))\n collect (tm:entity-data pane)))\n```\n\n\n## Query a snapshot\n\nSame package nicknames as above.\n\n### [`libtmux.query:compile-filter`][api-compile-filter]: a filter compiled once\n\n[`matching`][api-matching] applies it to captured objects. No tmux calls.\n\n\n```lisp\n(defparameter *wide-active-filter*\n (q:compile-filter\n :pane\n '(:and (:= :pane/active t)\n (:>= :pane/width 40))))\n\n(defun wide-active-pane-data (snapshot)\n \"Return owned data for captured active panes at least 40 cells wide; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *wide-active-filter* (tm:panes snapshot))))\n```\n\n\nMistyped fields are refused at compile time. More: [query guide](docs/queries.md).\n\n### [`libtmux.query:where`][api-where]: follow relations\n\nSessions with an active pane, through window links and windows.\n[`items`][api-items] returns the matches.\n\n\n```lisp\n(defparameter *active-session-filter*\n (q:compile-filter\n :session\n '(:any :session/window-links\n (:is :link/window\n (:any :window/panes\n (:= :pane/active t))))))\n\n(defun active-session-data (snapshot)\n \"Return owned data for sessions with an active pane; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:items\n (q:where (q:from (tm:sessions snapshot) :model :session)\n *active-session-filter*))))\n```\n\n\n### [`libtmux.query:explain`][api-explain]: where a filter runs\n\nLists the fields a compiled filter reads. Filters always run locally; tmux\nfilters nothing for you.\n\n\n```lisp\n(defun filter-execution (filter)\n \"Report that FILTER runs locally and acquires nothing, with the fields it reads.\"\n (let ((report (q:explain filter)))\n (list :execution (getf report :execution)\n :acquires-p (getf report :acquires-p)\n :fields (getf report :required-fields))))\n```\n\n\nFor the filter above it returns:\n\n```text\n(:EXECUTION :LOCAL :ACQUIRES-P NIL :FIELDS #(:PANE/ACTIVE :PANE/WIDTH))\n```\n\nMore: [inspecting a filter](docs/queries.md#inspect-owned-query-data)\n\n### [`libtmux.json:write-filter`][api-write-filter]: regex and JSON documents\n\nOptional systems add CL-PPCRE matching and a versioned JSON form.\n[`read-filter`][api-read-filter] restores a filter.\n\n\n```lisp\n(defparameter *cat-command-filter*\n (q:compile-filter\n :pane\n '(:regex-full-match :pane/current-command\n (:cl-ppcre \"CAT\" :case-insensitive-mode t))))\n\n(defun cat-pane-data (snapshot)\n \"Return owned data for captured panes whose command is exactly cat; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *cat-command-filter* (tm:panes snapshot))))\n```\n\n\n\n```lisp\n(defun round-trip-filter-document (snapshot)\n \"Round-trip the checked regex filter and apply it to one retained snapshot.\"\n (let* ((document (j:write-filter *cat-command-filter*))\n (restored (j:read-filter document :allow-regex t)))\n (values document\n (map 'vector #'tm:entity-data\n (q:matching restored (tm:panes snapshot))))))\n```\n\n\nMore: [query interchange](docs/query-interchange.md).\n\n## Build a workspace\n\n### [`libtmux.workspace:make-workspace`][api-make-workspace]: declare windows and panes\n\nPlain Lisp data, or an equivalent [JSON file](examples/owned-workspace.json).\nNothing touches tmux until you apply it.\n\n\n```lisp\n(defun owned-description ()\n \"Describe two windows and three panes without contacting tmux.\"\n (libtmux.workspace:make-workspace\n '(:schema \"libtmux.lisp.workspace/2\" :id \"demo-workspace\"\n :session\n (:id \"main\" :name \"owned-demo\"\n :environment #((\"DEMO_LABEL\" . \"hello from Common Lisp\"))\n :windows\n #((:id \"code\" :name \"code\" :index 2 :layout :tiled\n :panes #((:id \"shell\" :command #(\"/bin/cat\"))\n (:id \"repl\" :command #(\"/bin/cat\"))))\n (:id \"logs\" :name \"logs\" :index 5\n :panes #((:id \"tail\" :command #(\"/bin/cat\")))))))))\n```\n\n\n```console\n$ mise exec -- tools/lisp.sh examples/owned-workspace.lisp\n```\n\n### [`libtmux.workspace:plan-workspace`][api-plan-workspace]: preview, then apply\n\n[`fetch-workspace-state`][api-fetch-workspace-state] reads tmux. The plan is\nlocal. [`apply-workspace`][api-apply-workspace] changes tmux through the client\nyou pass.\n\n\n```lisp\n(asdf:load-system \"libtmux/workspace\")\n\n(defpackage #:libtmux.workspace.example\n (:use #:cl)\n (:local-nicknames (#:tm #:libtmux) (#:ws #:libtmux.workspace)))\n(in-package #:libtmux.workspace.example)\n```\n\n\n\n```lisp\n(defun apply-owned-description (client workspace)\n \"Acquire, preview and apply explicitly; return the result and its owned record.\"\n (let* ((state (ws:fetch-workspace-state client workspace))\n (preview (ws:plan-workspace workspace state)))\n (assert (getf (ws:plan-data preview) :publish-p))\n (let ((result (ws:apply-workspace client workspace :total-timeout 30)))\n (assert (eq :succeeded (getf (ws:result-data result) :publication-status)))\n (values result (getf (ws:result-data result) :record)))))\n```\n\n\n- Changing an existing workspace needs `:reconcile t`.\n- A preview grants no authority to apply.\n\nMore: [owned workspaces](docs/workspace-owned.md) ·\n[Workspace API][api-workspace] · [legacy schema](docs/workspaces.md).\n\n## Stream pane output\n\n### [`libtmux.control:with-connection`][api-with-connection]: one connection, queued commands\n\nNeeds tmux 3.8 or newer. [`submit-command`][api-submit-command] queues a\nrequest, [`await-request`][api-await-request] waits for its reply and\n[`next-event`][api-next-event] reads pane output as bytes.\n\n\n```lisp\n(asdf:load-system \"libtmux/control\")\n\n(defpackage #:libtmux.control.example\n (:use #:cl)\n (:local-nicknames (#:tm #:libtmux) (#:control #:libtmux.control)))\n(in-package #:libtmux.control.example)\n```\n\n\n\n```lisp\n(defun echo-through-control (client session pane)\n \"Send literal text and collect pane-output bytes on one scoped connection.\"\n (control:with-connection (connection client session)\n (let ((write (control:submit-command\n connection (list \"send-keys\" \"-t\" (tm:id pane) \"-l\" \"hello from control\")\n :effect :mutation))\n (enter (control:submit-command\n connection (list \"send-keys\" \"-t\" (tm:id pane) \"Enter\")\n :effect :mutation)))\n (dolist (request (list write enter))\n (multiple-value-bind (result delivery) (control:await-request request :timeout 1)\n (assert (eq :ready delivery))\n (assert (eq :completed (getf result :status))))))\n (let ((bytes (make-array 0 :element-type '(unsigned-byte 8)\n :adjustable t :fill-pointer 0))\n (expected (map 'vector #'char-code \"hello from control\"))\n (deadline (+ (get-internal-real-time) internal-time-units-per-second)))\n (loop repeat 64\n until (search expected bytes)\n for remaining = (/ (- deadline (get-internal-real-time)) internal-time-units-per-second)\n do (assert (plusp remaining))\n (multiple-value-bind (event delivery) (control:next-event connection :timeout remaining)\n (assert (eq :ready delivery))\n (case (getf event :kind)\n (:output\n (assert (string= (tm:id pane) (getf event :pane)))\n (loop for byte across (getf event :data) do (vector-push-extend byte bytes)))\n ((:gap :end) (error \"Output stream ended or lost data: ~S\" event)))))\n (assert (search expected bytes))\n (coerce bytes '(simple-array (unsigned-byte 8) (*))))))\n```\n\n\n```console\n$ mise exec -- tools/lisp.sh examples/control.lisp\n```\n\nPrints `CONTROL PASS`, `CONTROL NOTIFICATION PASS` and\n`CONTROL RECONNECT PASS`.\n\n- [`with-reconnection`][api-with-reconnection] reconnects on request and\n returns fresh observations. It never replays commands.\n\nMore: [control guide](docs/control.md) · [control README](control/README.md)\n\n## Choose an ASDF system\n\nOne source distribution, one version, one [changelog](CHANGELOG.md). Load only\nwhat you use:\n\n| System | Use it for | Additional dependencies | API |\n| --- | --- | --- | --- |\n| `libtmux` | Captures, CLOS objects and explicit tmux operations | ASDF/UIOP | [Core][api-core] |\n| [`libtmux/query`](query/README.md) | Native predicates, relations and eager QuerySets | Core | [Query][api-query] |\n| [`libtmux/regex`](regex/README.md) | CL-PPCRE search and full-match filters | Query, CL-PPCRE | [Query][api-query] |\n| [`libtmux/json`](json/README.md) | Bounded query document interchange | Query, Jzon | [JSON][api-json] |\n| [`libtmux/control`](control/README.md) | Queued requests, output streams and reconnection on tmux 3.8+ | Core | [Control][api-control] |\n| [`libtmux/workspace`](workspace/README.md) | Owned declarations, drift previews and explicit reconciliation | Core, Jzon | [Workspace][api-workspace] |\n| [`libtmux/workspace/cli`](workspace/cli/README.md) | Workspace validation, previews and explicit-endpoint apply | Workspace | [CLI][api-cli] |\n\nDefinitions are in [`libtmux.asd`](libtmux.asd); source is in `src/`.\n\n### [`libtmux`](https://github.com/libtmux/libtmux-lisp/tree/master/src): the core library\n\nCaptures the CLOS object graph and runs explicit tmux operations through a\n[`libtmux:client`][api-client], with ASDF and UIOP alone.\n\n[API reference][api-core] · [Guides](https://libtmux.org/en/lisp/latest/guides/) ·\n[REPL tutorial](docs/tutorial.md)\n\n### [`libtmux/query`](https://github.com/libtmux/libtmux-lisp/tree/master/query): native queries\n\n[`libtmux.query:compile-filter`][api-compile-filter] and\n[`libtmux.query:matching`][api-matching] filter captured objects without\ncontacting tmux.\n\n[API reference][api-query] · [README](query/README.md)\n\n### [`libtmux/regex`](https://github.com/libtmux/libtmux-lisp/tree/master/regex): CL-PPCRE operators\n\nAdds search and full-match operators to native queries.\n\n[Query API][api-query] · [README](regex/README.md)\n\n### [`libtmux/json`](https://github.com/libtmux/libtmux-lisp/tree/master/json): bounded filter documents\n\n[`libtmux.json:write-filter`][api-write-filter] and\n[`libtmux.json:read-filter`][api-read-filter] exchange a compiled filter as a\nversioned JSON document.\n\n[API reference][api-json] · [README](json/README.md)\n\n### [`libtmux/control`](https://github.com/libtmux/libtmux-lisp/tree/master/control): control connections on tmux 3.8+\n\n[`libtmux.control:with-connection`][api-with-connection] scopes a connection\nthat queues requests and streams pane output.\n\n[API reference][api-control] · [README](control/README.md)\n\n### [`libtmux/workspace`](https://github.com/libtmux/libtmux-lisp/tree/master/workspace): owned workspaces\n\n[`libtmux.workspace:make-workspace`][api-make-workspace] declares a workspace;\npreviews and reconciliation stay explicit.\n\n[API reference][api-workspace] ·\n[Workspace docs](https://libtmux.org/en/lisp/latest/workspace/) ·\n[README](workspace/README.md)\n\n### [`libtmux/workspace/cli`](https://github.com/libtmux/libtmux-lisp/tree/master/workspace/cli): the workspace command line\n\nValidates, previews and applies a workspace against an explicit endpoint.\n\n[API reference][api-cli] · [README](workspace/cli/README.md)\n\n## Support and status\n\n- **Unreleased.** Load it from a checkout; the API may change.\n- **Platform.** SBCL on Linux x86-64, WSL included.\n [Process requirements](docs/transport.md#supported-process-boundary).\n- **tmux.** 3.3a or newer. [Control connections](docs/control.md) need 3.8.\n- **One operation per client.** Calls block; a second concurrent call signals\n [`client-busy`][api-client-busy].\n- **Closing a client leaves tmux running.**\n [`kill-server`][api-kill-server] is a separate, explicit call.\n- **Mutations return outcomes.** Read the\n [`command-outcome`][api-command-outcome] before retrying.\n [Outcome handling](docs/tutorial.md#handle-command-and-observation-outcomes).\n- **In development.** Wider event coverage and source filtering.\n [Capabilities and limits](docs/capabilities.md).\n\n## Find the right guide\n\n| Task | Start here |\n| --- | --- |\n| Load the library; inspect and build a workspace | [REPL tutorial](docs/tutorial.md) |\n| Start and stop a private empty-config daemon | [Daemon scopes](docs/daemons.md) |\n| Filter with `loop`, handle false/absence, export plists | [Local data recipes](docs/tutorial.md#select-and-project-locally) |\n| Compile typed filters, traverse relations and compose QuerySets | [Native queries](docs/queries.md) · [Query API](docs/query-api.md) |\n| Add CL-PPCRE or exchange bounded filter documents | [Query interchange](docs/query-interchange.md) · [JSON API](docs/json-api.md) |\n| Create, inspect or explicitly reconcile an owned workspace | [Owned workspaces](docs/workspace-owned.md) · [Workspace API](docs/workspace-api.md) |\n| Rename, resize, move, send input, capture, use buffers or terminate explicit targets | [Operation contracts](docs/operations.md) |\n| Read typed options, hooks and environment | [Decoded configuration](docs/configuration.md) |\n| Inspect native option, hook and environment output | [Configuration inspection](docs/operations.md#configuration-inspection) |\n| Look up signatures, multiple values and conditions | [Public API](docs/api.md) · [Captured fields](docs/fields.md) |\n| Understand deadlines, cancellation and cleanup | [Transport](docs/transport.md) |\n| Reconnect without replaying commands | [Fresh control observations](docs/control.md#reconnect-with-fresh-observations) |\n| Evaluate async, streaming and performance support | [Capabilities and limits](docs/capabilities.md) |\n| Rerun FiveAM tests at the REPL or inspect CI coverage | [Testing](docs/testing.md) · [Verification](verification.md) |\n| Navigate all documentation | [Guide index](docs/index.md) |\n\nFor changes, read [Contributing](.github/CONTRIBUTING.md) and\n[Writing](.github/WRITING.md). Licensed under [MIT](LICENSE).\n\n[Branding assets](docs/branding.md) include the logo, icons, and social cards.\n\n[api-apply-workspace]: https://libtmux.org/en/lisp/latest/workspace/reference/libtmux-workspace-apply-workspace/\n[api-await-request]: https://libtmux.org/en/lisp/latest/reference/libtmux-control-await-request/\n[api-capture-pane]: https://libtmux.org/en/lisp/latest/reference/libtmux-capture-pane/\n[api-cli]: https://libtmux.org/en/lisp/latest/workspace/reference/libtmux-workspace-cli/\n[api-client]: https://libtmux.org/en/lisp/latest/reference/libtmux-client/\n[api-client-busy]: https://libtmux.org/en/lisp/latest/reference/libtmux-client-busy/\n[api-command-outcome]: https://libtmux.org/en/lisp/latest/reference/libtmux-command-outcome/\n[api-compile-filter]: https://libtmux.org/en/lisp/latest/reference/libtmux-query-compile-filter/\n[api-control]: https://libtmux.org/en/lisp/latest/reference/libtmux-control/\n[api-core]: https://libtmux.org/en/lisp/latest/reference/libtmux/\n[api-daemon]: https://libtmux.org/en/lisp/latest/reference/libtmux-daemon/\n[api-explain]: https://libtmux.org/en/lisp/latest/reference/libtmux-query-explain/\n[api-fetch-snapshot]: https://libtmux.org/en/lisp/latest/reference/libtmux-fetch-snapshot/\n[api-fetch-workspace-state]: https://libtmux.org/en/lisp/latest/workspace/reference/libtmux-workspace-fetch-workspace-state/\n[api-items]: https://libtmux.org/en/lisp/latest/reference/libtmux-query-items/\n[api-json]: https://libtmux.org/en/lisp/latest/reference/libtmux-json/\n[api-kill-pane]: https://libtmux.org/en/lisp/latest/reference/libtmux-kill-pane/\n[api-kill-server]: https://libtmux.org/en/lisp/latest/reference/libtmux-kill-server/\n[api-kill-session]: https://libtmux.org/en/lisp/latest/reference/libtmux-kill-session/\n[api-kill-window]: https://libtmux.org/en/lisp/latest/reference/libtmux-kill-window/\n[api-make-workspace]: https://libtmux.org/en/lisp/latest/workspace/reference/libtmux-workspace-make-workspace/\n[api-matching]: https://libtmux.org/en/lisp/latest/reference/libtmux-query-matching/\n[api-new-session]: https://libtmux.org/en/lisp/latest/reference/libtmux-new-session/\n[api-next-event]: https://libtmux.org/en/lisp/latest/reference/libtmux-control-next-event/\n[api-pane]: https://libtmux.org/en/lisp/latest/reference/libtmux-pane/\n[api-panes]: https://libtmux.org/en/lisp/latest/reference/libtmux-panes/\n[api-plan-workspace]: https://libtmux.org/en/lisp/latest/workspace/reference/libtmux-workspace-plan-workspace/\n[api-query]: https://libtmux.org/en/lisp/latest/reference/libtmux-query/\n[api-read-filter]: https://libtmux.org/en/lisp/latest/reference/libtmux-json-read-filter/\n[api-resize-pane]: https://libtmux.org/en/lisp/latest/reference/libtmux-resize-pane/\n[api-resize-window]: https://libtmux.org/en/lisp/latest/reference/libtmux-resize-window/\n[api-send-text]: https://libtmux.org/en/lisp/latest/reference/libtmux-send-text/\n[api-session]: https://libtmux.org/en/lisp/latest/reference/libtmux-session-type/\n[api-set-hook]: https://libtmux.org/en/lisp/latest/reference/libtmux-set-hook/\n[api-set-option]: https://libtmux.org/en/lisp/latest/reference/libtmux-set-option/\n[api-show-hooks]: https://libtmux.org/en/lisp/latest/reference/libtmux-show-hooks/\n[api-show-options]: https://libtmux.org/en/lisp/latest/reference/libtmux-show-options/\n[api-split-pane]: https://libtmux.org/en/lisp/latest/reference/libtmux-split-pane/\n[api-submit-command]: https://libtmux.org/en/lisp/latest/reference/libtmux-control-submit-command/\n[api-where]: https://libtmux.org/en/lisp/latest/reference/libtmux-query-where/\n[api-window]: https://libtmux.org/en/lisp/latest/reference/libtmux-window-type/\n[api-window-link]: https://libtmux.org/en/lisp/latest/reference/libtmux-window-link/\n[api-with-client]: https://libtmux.org/en/lisp/latest/reference/libtmux-with-client/\n[api-with-connection]: https://libtmux.org/en/lisp/latest/reference/libtmux-control-with-connection/\n[api-with-daemon]: https://libtmux.org/en/lisp/latest/reference/libtmux-with-daemon/\n[api-with-reconnection]: https://libtmux.org/en/lisp/latest/reference/libtmux-control-with-reconnection/\n[api-workspace]: https://libtmux.org/en/lisp/latest/workspace/reference/libtmux-workspace/\n[api-write-filter]: https://libtmux.org/en/lisp/latest/reference/libtmux-json-write-filter/\n" }, { "path": "docs/tutorial.md", - "content": "# Capture, inspect and build a workspace\n\nThis tutorial uses an isolated existing tmux daemon. It creates two sessions,\nthree physical windows, four links and four panes, then inspects them through\nordinary Common Lisp data. It modifies only the daemon you start below.\nComplete the [source installation](../README.md#install-from-source) first.\n\n## Run the checked walkthrough\n\n```console\n$ mise run examples\n```\n\nThe runner creates a mode-0700 temporary directory and explicit socket, clears\ninherited tmux variables, starts an empty-configuration daemon, runs the shipped\nLisp examples, checks their results and terminates its own server. Assertions\ncheck object/link counts, false with presence, identity, ownership, literal\nnames, refresh, byte buffers, optional regex/JSON queries and local access after\nclient closure. A failure exits nonzero. It leaves the optional thread library\nunloaded.\n\nSelect another native tmux binary explicitly:\n\n```console\n$ LIBTMUX_TEST_TMUX=/usr/bin/tmux mise run examples\n```\n\n## Work at the REPL\n\nFor an interactive session, create a private daemon in a shell and keep that\nshell open. This command prints its socket path; use that path when prompted\nin Lisp. The automated runner and final cleanup helper need Python 3; the\nlibrary itself does not.\n\n```console\n$ export LIBTMUX_DEMO_DIR=\"$(mktemp -d /tmp/libtmux-lisp-demo-XXXXXXXX)\" && \\\n env -u TMUX \\\n -u TMUX_PANE \\\n tmux \\\n -S \"$LIBTMUX_DEMO_DIR/tmux.sock\" \\\n -f /dev/null \\\n new-session \\\n -d \\\n -s work \\\n -n editor \\\n -x 120 \\\n -y 40 \\\n -- /bin/cat && \\\n env -u TMUX \\\n -u TMUX_PANE \\\n tmux \\\n -S \"$LIBTMUX_DEMO_DIR/tmux.sock\" \\\n display-message \\\n -p '#{pid}' \\\n > \"$LIBTMUX_DEMO_DIR/server-witness.txt\" && \\\n stat \\\n -Lc '%d %i' \\\n \"$LIBTMUX_DEMO_DIR/tmux.sock\" \\\n >> \"$LIBTMUX_DEMO_DIR/server-witness.txt\" && \\\n printf '%s\\n' \"$LIBTMUX_DEMO_DIR/tmux.sock\"\n```\n\nUse the same terminal to start the pinned REPL:\n\n```console\n$ mise run repl\n```\n\nLoad the query system, which depends on the core. The development REPL\nregisters the ASDF definition but does not implicitly load either system:\n\n```lisp\n(asdf:load-system \"libtmux/query\")\n```\n\nLoad the three optional systems used later in the checked walkthrough:\n\n```lisp\n(asdf:load-system \"libtmux/regex\")\n```\n\n```lisp\n(asdf:load-system \"libtmux/json\")\n```\n\n```lisp\n(asdf:load-system \"libtmux/workspace\")\n```\n\nLoad the recipe functions. Their package declares the SBCL package-local\nnicknames `tm`, `q`, `j` and `ws` for the core, query, JSON and workspace\npackages; the library claims no global short nicknames.\n\n```lisp\n(load \"examples/workspace.lisp\")\n```\n\n```lisp\n(in-package #:libtmux.examples)\n```\n\nSupply the printed socket path as data, without invoking the Lisp reader:\n\n```lisp\n(defparameter *socket-path* (progn (write-line \"Paste the demo socket path:\")\n (read-line)))\n```\n\nThis acquires the graph and returns one session record named `work`, containing\nits `editor` window and one pane. Pane projections include identity, captured\nfields, provenance and relationship IDs:\n\n```lisp\n(inspect-workspace *socket-path*)\n```\n\n## Build a linked workspace\n\nThe complete recipe is copied from [workspace.lisp](../examples/workspace.lisp).\nIt creates a `logs` window and `review` session, splits `editor`, shares that\nphysical window through index 7 of `review`, and renames logs literally.\nRun it once on the fresh demo; a repeated invocation encounters existing names.\n\n\n```lisp\n(defun create-workspace (client)\n \"Extend the demo's WORK session; return a fresh captured graph.\nCreates a logs window, a second editor pane, a review session and a shared link.\nThe caller owns the isolated daemon; repeating this recipe there is an error.\"\n (let* ((before (tm:fetch-snapshot client))\n (work (find \"work\" (tm:sessions before) :key #'tm:name :test #'string=)))\n (unless work (error \"Start the demo's WORK session first\"))\n (let* ((editor-link (aref (tm:window-links work) 0))\n (editor (tm:window editor-link))\n (pane (aref (tm:panes editor) 0))\n (logs (observed-value\n (tm:new-window client work :name \"logs\" :command '(\"/bin/cat\"))))\n (review (observed-value\n (tm:new-session client :name \"review\" :window-name \"notes\"\n :command '(\"/bin/cat\")))))\n (tm:split-pane client pane :direction :horizontal :command '(\"/bin/cat\"))\n (tm:link-window client editor-link review 7)\n (tm:rename-window client logs \"logs #{literal}\")\n (tm:fetch-snapshot client))))\n```\n\n\nKeep a captured graph after closing the client. These globals are interactive\nscratch values, not a global connection convention in the library:\n\n```lisp\n(defparameter *snapshot*\n (tm:with-client (client :socket-path *socket-path*)\n (create-workspace client)))\n```\n\n```lisp\n(list (length (tm:sessions *snapshot*))\n (length (tm:windows *snapshot*))\n (length (tm:window-links *snapshot*))\n (length (tm:panes *snapshot*)))\n```\n\nThe result is `(2 3 4 4)`. The two editor links have different session/index\nlocators and the same physical window. `windows` on a snapshot deduplicates\nphysical windows; `windows` on a session retains one entry per link.\nThe [graph contract](captures.md) explains all traversal directions.\n\n## Select and project locally\n\n\n```lisp\n(defun wide-active-panes (snapshot)\n \"Select captured active panes at least 40 cells wide; no tmux commands.\"\n (loop for pane across (tm:panes snapshot)\n when (and (tm:active-p pane) (>= (tm:width pane) 40))\n collect (tm:entity-data pane)))\n```\n\n\n```lisp\n(wide-active-panes *snapshot*)\n```\n\nThis returns a nonempty list of plists from the retained graph. You can instead\nuse `map`, `find-if`, `count-if`, `reduce` or `remove-if` with a native function.\nThese calls do not acquire state.\n\nCompile a reusable scalar filter when the selection should be validated,\ninspected or shared. The example package's local nickname `q` refers to\n`libtmux.query`; the library claims no global nickname.\n\n\n```lisp\n(defparameter *wide-active-filter*\n (q:compile-filter\n :pane\n '(:and (:= :pane/active t)\n (:>= :pane/width 40))))\n\n(defun wide-active-pane-data (snapshot)\n \"Return owned data for captured active panes at least 40 cells wide; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *wide-active-filter* (tm:panes snapshot))))\n```\n\n\n```lisp\n(wide-active-pane-data *snapshot*)\n```\n\n`matching` returns a fresh simple vector in captured order. Compilation copies\nthe query form and checks field types, cycles and resource limits. The returned\npredicate is ordinary Lisp code over retained observations; neither compilation\nnor matching contacts tmux.\n\nTraverse registered relationships without reacquiring state, and keep the eager\nselection in a QuerySet with explicit root-model metadata:\n\n\n```lisp\n(defparameter *active-session-filter*\n (q:compile-filter\n :session\n '(:any :session/window-links\n (:is :link/window\n (:any :window/panes\n (:= :pane/active t))))))\n\n(defun active-session-data (snapshot)\n \"Return owned data for sessions with an active pane; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:items\n (q:where (q:from (tm:sessions snapshot) :model :session)\n *active-session-filter*))))\n```\n\n\nSee the [native query guide](queries.md) for quantifier identities, stable\nordering, ownership and strict cardinality.\n\n## Match and serialize an optional query\n\n`libtmux/regex` adds CL-PPCRE-backed operators without adding that dependency\nto core or `libtmux/query`. The scanner is compiled once with the filter; this\nfull-match example also proves that a match beginning at position zero works:\n\n\n```lisp\n(defparameter *cat-command-filter*\n (q:compile-filter\n :pane\n '(:regex-full-match :pane/current-command\n (:cl-ppcre \"CAT\" :case-insensitive-mode t))))\n\n(defun cat-pane-data (snapshot)\n \"Return owned data for captured panes whose command is exactly cat; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *cat-command-filter* (tm:panes snapshot))))\n```\n\n\n```lisp\n(cat-pane-data *snapshot*)\n```\n\n`libtmux/json` writes the native schema `libtmux.lisp.filter/1`. Reading regex\nis an explicit local opt-in because parser limits do not interrupt CL-PPCRE\nscanner execution:\n\n\n```lisp\n(defun round-trip-filter-document (snapshot)\n \"Round-trip the checked regex filter and apply it to one retained snapshot.\"\n (let* ((document (j:write-filter *cat-command-filter*))\n (restored (j:read-filter document :allow-regex t)))\n (values document\n (map 'vector #'tm:entity-data\n (q:matching restored (tm:panes snapshot))))))\n```\n\n\n```lisp\n(round-trip-filter-document *snapshot*)\n```\n\nBoth operations are local. The [interchange guide](query-interchange.md)\ndocuments the closed envelope, limits and false/empty/null distinctions.\n\nUse both values when false and absence matter. This field is always present;\nan inactive pane returns `nil` and `t`:\n\n```lisp\n(let ((pane (find-if-not #'tm:active-p (tm:panes *snapshot*))))\n (multiple-value-bind (value present-p) (tm:field-value pane :pane/active)\n (list value present-p)))\n```\n\nReturned strings, plists and relation vectors are caller-owned copies.\n`entity-data` is finite and contains relationship identifiers rather than a\nrecursive graph. A copied plist is local data; editing it does not mutate tmux.\nSee the [field reference](fields.md) for types and optional values.\n\n## Handle command and observation outcomes\n\nCreation and named mutations return\n[command-outcome](api.md#command-outcome-type). A successful command\ncan have no replacement observation because the target disappeared afterward.\nCheck the observation separately; this helper never retries the mutation:\n\n\n```lisp\n(defun observed-value (outcome)\n \"Return an operation's observed value, or signal its observation failure.\"\n (when (tm:outcome-observation-error outcome)\n (error (tm:outcome-observation-error outcome)))\n (multiple-value-bind (value present-p) (tm:outcome-value outcome)\n (unless present-p\n (error \"This operation did not return an observation\"))\n value))\n```\n\n\nRename a captured physical window and inspect old and new observations:\n\n```lisp\n(tm:with-client (client :socket-path *socket-path*)\n (let* ((snapshot (tm:fetch-snapshot client))\n (window (find \"editor\" (tm:windows snapshot) :key #'tm:name :test #'string=))\n (renamed (observed-value (tm:rename-window client window \"api #{literal}\"))))\n (list (tm:name window) (tm:name renamed) (tm:same-entity-p window renamed))))\n```\n\nThe result is `(\"editor\" \"api #{literal}\" t)`. The literal format punctuation\nsurvives. Refresh uses the **same client context** and returns another captured\nobservation. Observations from a different connection are not interchangeable\noperational targets, even when their numeric IDs match.\n\nExternal failures signal typed conditions. A handler can inspect\n[error-outcome](api.md#error-outcome-function),\n[outcome-status](api.md#outcome-status-function),\n[outcome-phase](api.md#outcome-phase-function),\n[outcome-exit-code](api.md#outcome-exit-code-function) and owned\ndiagnostic bytes. Missing completion evidence can mean the mutation already\nhappened; an automatic retry can duplicate effects. The\n[operation guide](operations.md#outcomes-and-target-checks) defines these cases.\n\n## Preserve binary data\n\n\n```lisp\n(defun round-trip-bytes (client)\n \"Store and retrieve a named binary buffer, including NUL and invalid UTF-8.\"\n (let ((bytes (make-array 5 :element-type '(unsigned-byte 8)\n :initial-contents '(0 10 92 195 255))))\n (tm:set-buffer client bytes :name \"example bytes\")\n (multiple-value-bind (actual outcome)\n (tm:show-buffer client :name \"example bytes\")\n (assert (eq :succeeded (tm:outcome-status outcome)))\n (assert (equalp bytes actual))\n actual)))\n```\n\n\n```lisp\n(tm:with-client (client :socket-path *socket-path*) (round-trip-bytes client))\n```\n\nThis returns five octets, including NUL and invalid UTF-8, unchanged. For pane\ncontents, `capture-pane` returns UTF-8 text and outcome; use\n`capture-pane-bytes` for octets. Captures and buffer reads are bounded complete\nresults, not subscriptions or streams.\n\nSuccessful input dispatch does not prove application readiness or consumption.\nCoordinate with an application signal; do not add a sleep or treat printed\ntext as proof. `pipe-pane` configures a daemon-owned shell pipe and has a\nseparate [ownership contract](operations.md#pane-processes).\n\n## Drive an application without polling\n\nThe shipped [worker](../examples/worker.sh) signals initialization, reads one\nrequest, writes its receipt file, then signals consumption. The Lisp controller\nuses a fresh `wait-for` channel for each signal. The file receipt proves what\nthe application consumed; a successful send or printed marker would not.\nThese are blocking calls with deadlines, not a control-mode subscription API.\n\n\n```lisp\n(defun drive-worker (client session socket-path program worker-path receipt-path)\n \"Launch a worker through argv, wait for readiness and verify input consumption.\nWORKER-PATH names the shipped worker.sh; RECEIPT-PATH is in the owned demo directory.\nSignals operational conditions without retrying a mutation. Calls block.\"\n (let* ((ready (symbol-name (gensym \"example-ready-\")))\n (consumed (symbol-name (gensym \"example-consumed-\")))\n (window (observed-value\n (tm:new-window client session :name \"worker\"\n :command (list \"/bin/sh\" worker-path program\n socket-path ready consumed receipt-path))))\n (pane (aref (tm:panes window) 0))\n (message \"release #{literal}; λ\"))\n (tm:run-command client (list \"-N\" \"wait-for\" ready)\n :effect :read :timeout 1 :output-limit 4096)\n (tm:send-text client pane message :enter t)\n (tm:run-command client (list \"-N\" \"wait-for\" consumed)\n :effect :read :timeout 1 :output-limit 4096)\n (let ((receipt (uiop:read-file-string receipt-path :external-format :utf-8)))\n (assert (string= message receipt))\n (list :consumed receipt :pane (tm:id pane)))))\n```\n\n\n```lisp\n(tm:with-client (client :socket-path *socket-path*)\n (let ((session (find \"work\" (tm:fetch-sessions client) :key #'tm:name :test #'string=)))\n (drive-worker client session *socket-path* \"tmux\"\n (namestring (truename \"examples/worker.sh\"))\n (namestring (merge-pathnames \"worker-receipt.txt\"\n (uiop:pathname-directory-pathname *socket-path*))))))\n```\n\nThe result contains `:consumed \"release #{literal}; λ\"` and a pane ID. The\nrequest travels as literal text; worker arguments travel through argv. The\nworker remains in its pane until the owned daemon is stopped. Receipt paths\nare local to this example's daemon host; this is not a remote-file API.\n\n## Inspect a typed failure\n\nThis cancels a read before it acquires data, then handles `command-cancelled`\nand returns the retained dispatch evidence:\n\n\n```lisp\n(defun cancelled-read (client)\n \"Demonstrate typed failure evidence using a read cancelled before acquisition.\"\n (let ((token (tm:make-cancellation-token)))\n (tm:cancel token)\n (handler-case\n (progn (tm:fetch-snapshot client :cancel-token token)\n (error \"A cancelled read unexpectedly completed\"))\n (tm:command-cancelled (condition)\n (let ((outcome (tm:error-outcome condition)))\n (list :condition (type-of condition)\n :status (and outcome (tm:outcome-status outcome))\n :phase (and outcome (tm:outcome-phase outcome))))))))\n```\n\n\n```lisp\n(tm:with-client (client :socket-path *socket-path*) (cancelled-read client))\n```\n\nThis handler inspects evidence and returns; it never retries a command.\nPost-dispatch cancellation of a mutation can have a different status or phase.\nSee the [condition reference](api.md#command-cancelled-type).\n\n## Terminate the owned server\n\nClosing a client leaves its daemon alive. This checked helper uses the separate\n[`kill-server`](api.md#kill-server-function) operation only for the explicit\nsocket passed by the caller. It accepts success only after the operation proves\nboth dispatch and daemon exit:\n\n\n```lisp\n(defun terminate-owned-server (socket-path &key (program \"tmux\"))\n \"Terminate the explicitly selected owned server and return its proven outcome.\"\n (tm:with-client (client :program program :socket-path socket-path)\n (let ((outcome (tm:kill-server client)))\n (assert (eq :succeeded (tm:outcome-status outcome)))\n (assert (eq :server-terminated (tm:outcome-phase outcome)))\n outcome)))\n```\n\n\nRun it only for the private tutorial endpoint:\n\n```lisp\n(terminate-owned-server *socket-path*)\n```\n\n## Clean up\n\nExit the REPL:\n\n```lisp\n(uiop:quit)\n```\n\nIn the original shell, terminate only the daemon created for this tutorial:\n\n```console\n$ python3 tools/stop-example.py --already-terminated \"$LIBTMUX_DEMO_DIR\"\n```\n\nThe helper proves the retained daemon PID exited, rejects a replaced socket,\nthen removes the owned witness, receipt and stale socket file. Tmux 3.3a can\nleave its socket behind after exit. The automated runner executes the same Lisp\ntermination function before this file cleanup. If an earlier example fails, it\nuses the retained witness to terminate and reap only this tutorial daemon.\n" + "content": "# Capture, inspect and build a workspace\n\nThis tutorial builds two sessions, three physical windows, four links and four\npanes on a private tmux daemon, then inspects them as ordinary Lisp data. It\ntouches no other tmux server.\n\nStart with the [source installation](../README.md#install-from-source).\n\n## Run the walkthrough\n\n```console\n$ mise run examples\n```\n\nThe runner:\n\n- creates a private temporary directory and socket, and clears inherited tmux\n variables\n- starts an empty-configuration daemon and runs the shipped Lisp examples\n- stops its own server\n- exits nonzero on any failure\n\nUse another tmux binary:\n\n```console\n$ LIBTMUX_TEST_TMUX=/usr/bin/tmux mise run examples\n```\n\n## Work at the REPL\n\nStart the REPL from the checkout root. It starts, uses and stops its own\nprivate daemon, so nothing else on the host is touched.\n\n```console\n$ mise run repl\n```\n\nLoad the query system (it loads the core). The REPL loads no system on its own:\n\n```lisp\n(asdf:load-system \"libtmux/query\")\n```\n\nLoad the optional systems used below:\n\n```lisp\n(asdf:load-system \"libtmux/regex\")\n```\n\n```lisp\n(asdf:load-system \"libtmux/json\")\n```\n\n```lisp\n(asdf:load-system \"libtmux/workspace\")\n```\n\nLoad the recipes. Their package defines the SBCL package-local nicknames `tm`\n(core), `q` (query), `j` (JSON) and `ws` (workspace). The library defines no\nglobal nicknames.\n\n```lisp\n(load \"examples/workspace.lisp\")\n```\n\n```lisp\n(in-package #:libtmux.examples)\n```\n\nStart a private daemon. The library owns it and removes its socket directory\nwhen you stop it:\n\n```lisp\n(defparameter *daemon* (tm:start-daemon))\n```\n\n```lisp\n(defparameter *socket-path* (tm:daemon-socket-path *daemon*))\n```\n\nCreate session `work` with one `editor` window. The outcome status is\n`:succeeded`:\n\n```lisp\n(tm:with-client (client :program (tm:daemon-program *daemon*)\n :socket-path *socket-path*)\n (tm:outcome-status\n (tm:new-session client :name \"work\" :window-name \"editor\"\n :width 120 :height 40 :command '(\"/bin/cat\"))))\n```\n\nThis captures the graph and returns one record: session `work`, its `editor`\nwindow and one pane. Pane data holds identity, captured fields, provenance and\nrelationship IDs:\n\n```lisp\n(inspect-workspace *socket-path*)\n```\n\n## Build a linked workspace\n\nThe recipe comes from [workspace.lisp](../examples/workspace.lisp). It:\n\n- creates a `logs` window and a `review` session\n- splits `editor`\n- links the `editor` window into `review` at index 7\n- renames `logs` to `logs #{literal}`, keeping the format text literal\n\nRun it once on the fresh demo. A second run fails on the existing names.\n\n\n```lisp\n(defun create-workspace (client)\n \"Extend the demo's WORK session; return a fresh captured graph.\nCreates a logs window, a second editor pane, a review session and a shared link.\nThe caller owns the isolated daemon; repeating this recipe there is an error.\"\n (let* ((before (tm:fetch-snapshot client))\n (work (find \"work\" (tm:sessions before) :key #'tm:name :test #'string=)))\n (unless work (error \"Start the demo's WORK session first\"))\n (let* ((editor-link (aref (tm:window-links work) 0))\n (editor (tm:window editor-link))\n (pane (aref (tm:panes editor) 0))\n (logs (observed-value\n (tm:new-window client work :name \"logs\" :command '(\"/bin/cat\"))))\n (review (observed-value\n (tm:new-session client :name \"review\" :window-name \"notes\"\n :command '(\"/bin/cat\")))))\n (tm:split-pane client pane :direction :horizontal :command '(\"/bin/cat\"))\n (tm:link-window client editor-link review 7)\n (tm:rename-window client logs \"logs #{literal}\")\n (tm:fetch-snapshot client))))\n```\n\n\nKeep the captured graph after the client closes. The global is REPL scratch,\nnot a library convention:\n\n```lisp\n(defparameter *snapshot*\n (tm:with-client (client :socket-path *socket-path*)\n (create-workspace client)))\n```\n\n```lisp\n(list (length (tm:sessions *snapshot*))\n (length (tm:windows *snapshot*))\n (length (tm:window-links *snapshot*))\n (length (tm:panes *snapshot*)))\n```\n\nThe result is `(2 3 4 4)`: sessions, windows, links, panes.\n\n- The two `editor` links differ in session and index, and share one physical\n window.\n- `windows` on a snapshot deduplicates physical windows.\n- `windows` on a session keeps one entry per link.\n\nAll traversal directions: [captured objects](captures.md).\n\n## Select and project locally\n\n\n```lisp\n(defun wide-active-panes (snapshot)\n \"Select captured active panes at least 40 cells wide; no tmux commands.\"\n (loop for pane across (tm:panes snapshot)\n when (and (tm:active-p pane) (>= (tm:width pane) 40))\n collect (tm:entity-data pane)))\n```\n\n\n```lisp\n(wide-active-panes *snapshot*)\n```\n\nThis returns a nonempty list of plists from the retained graph. Plain sequence\nfunctions (`map`, `find-if`, `count-if`, `reduce`, `remove-if`) work on it too.\nNone of these contact tmux.\n\nCompile a reusable scalar filter to validate, inspect or share a selection.\n`q` is the package-local nickname for `libtmux.query`.\n\n\n```lisp\n(defparameter *wide-active-filter*\n (q:compile-filter\n :pane\n '(:and (:= :pane/active t)\n (:>= :pane/width 40))))\n\n(defun wide-active-pane-data (snapshot)\n \"Return owned data for captured active panes at least 40 cells wide; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *wide-active-filter* (tm:panes snapshot))))\n```\n\n\n```lisp\n(wide-active-pane-data *snapshot*)\n```\n\n- `matching` returns a fresh simple vector in captured order.\n- Compilation copies the query form and checks field types, cycles and\n resource limits.\n- Neither compilation nor matching contacts tmux. A compiled filter is plain\n Lisp over retained observations.\n\nTraverse relationships locally and keep the eager selection in a QuerySet that\nrecords its root model:\n\n\n```lisp\n(defparameter *active-session-filter*\n (q:compile-filter\n :session\n '(:any :session/window-links\n (:is :link/window\n (:any :window/panes\n (:= :pane/active t))))))\n\n(defun active-session-data (snapshot)\n \"Return owned data for sessions with an active pane; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:items\n (q:where (q:from (tm:sessions snapshot) :model :session)\n *active-session-filter*))))\n```\n\n\nMore: [native query guide](queries.md) (quantifier identities, stable\nordering, ownership, strict cardinality).\n\n## Match and serialize an optional query\n\n`libtmux/regex` adds CL-PPCRE operators. Core and `libtmux/query` do not depend\non CL-PPCRE. The scanner compiles once with the filter:\n\n\n```lisp\n(defparameter *cat-command-filter*\n (q:compile-filter\n :pane\n '(:regex-full-match :pane/current-command\n (:cl-ppcre \"CAT\" :case-insensitive-mode t))))\n\n(defun cat-pane-data (snapshot)\n \"Return owned data for captured panes whose command is exactly cat; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *cat-command-filter* (tm:panes snapshot))))\n```\n\n\n```lisp\n(cat-pane-data *snapshot*)\n```\n\n`libtmux/json` writes the native schema `libtmux.lisp.filter/1`. Reading a regex\nfilter needs `:allow-regex t`, because parser limits do not interrupt a\nCL-PPCRE scan:\n\n\n```lisp\n(defun round-trip-filter-document (snapshot)\n \"Round-trip the checked regex filter and apply it to one retained snapshot.\"\n (let* ((document (j:write-filter *cat-command-filter*))\n (restored (j:read-filter document :allow-regex t)))\n (values document\n (map 'vector #'tm:entity-data\n (q:matching restored (tm:panes snapshot))))))\n```\n\n\n```lisp\n(round-trip-filter-document *snapshot*)\n```\n\nBoth are local. More: [interchange guide](query-interchange.md) (closed\nenvelope, limits, false/empty/null).\n\nUse both values when false and absence differ. This field is always present,\nso an inactive pane returns `nil` and `t`:\n\n```lisp\n(let ((pane (find-if-not #'tm:active-p (tm:panes *snapshot*))))\n (multiple-value-bind (value present-p) (tm:field-value pane :pane/active)\n (list value present-p)))\n```\n\n- Returned strings, plists and relation vectors are caller-owned copies.\n- `entity-data` holds relationship IDs, not a recursive graph.\n- Editing a copy never changes tmux.\n\nMore: [field reference](fields.md) (types, optional values).\n\n## Handle command and observation outcomes\n\nCreation and named mutations return a\n[command-outcome](api.md#command-outcome-type).\n\n- A command can succeed with no observation: its target may vanish afterward.\n- Check the observation separately. This helper never retries the mutation:\n\n\n```lisp\n(defun observed-value (outcome)\n \"Return an operation's observed value, or signal its observation failure.\"\n (when (tm:outcome-observation-error outcome)\n (error (tm:outcome-observation-error outcome)))\n (multiple-value-bind (value present-p) (tm:outcome-value outcome)\n (unless present-p\n (error \"This operation did not return an observation\"))\n value))\n```\n\n\nRename a captured window and compare the old and new observations:\n\n```lisp\n(tm:with-client (client :socket-path *socket-path*)\n (let* ((snapshot (tm:fetch-snapshot client))\n (window (find \"editor\" (tm:windows snapshot) :key #'tm:name :test #'string=))\n (renamed (observed-value (tm:rename-window client window \"api #{literal}\"))))\n (list (tm:name window) (tm:name renamed) (tm:same-entity-p window renamed))))\n```\n\nThe result is `(\"editor\" \"api #{literal}\" t)`.\n\n- Format punctuation survives literally.\n- Refresh uses the **same client context** and returns a new observation.\n- Observations from a different connection are not interchangeable targets,\n even when their numeric IDs match.\n\nExternal failures signal typed conditions. A handler can read:\n\n- [error-outcome](api.md#error-outcome-function)\n- [outcome-status](api.md#outcome-status-function)\n- [outcome-phase](api.md#outcome-phase-function)\n- [outcome-exit-code](api.md#outcome-exit-code-function)\n- owned diagnostic bytes\n\nMissing completion evidence can mean the mutation already happened. A blind\nretry can duplicate effects. Details:\n[operation guide](operations.md#outcomes-and-target-checks).\n\n## Preserve binary data\n\n\n```lisp\n(defun round-trip-bytes (client)\n \"Store and retrieve a named binary buffer, including NUL and invalid UTF-8.\"\n (let ((bytes (make-array 5 :element-type '(unsigned-byte 8)\n :initial-contents '(0 10 92 195 255))))\n (tm:set-buffer client bytes :name \"example bytes\")\n (multiple-value-bind (actual outcome)\n (tm:show-buffer client :name \"example bytes\")\n (assert (eq :succeeded (tm:outcome-status outcome)))\n (assert (equalp bytes actual))\n actual)))\n```\n\n\n```lisp\n(tm:with-client (client :socket-path *socket-path*) (round-trip-bytes client))\n```\n\n- This returns the five octets unchanged, NUL and invalid UTF-8 included.\n- `capture-pane` returns UTF-8 text and an outcome. `capture-pane-bytes`\n returns octets.\n- Captures and buffer reads are bounded, complete results, not streams.\n\nInput and pipes:\n\n- A successful send does not prove the application is ready or consumed the\n input. Wait on an application signal, not a sleep or printed text.\n- `pipe-pane` sets up a daemon-owned shell pipe. Ownership:\n [pane processes](operations.md#pane-processes).\n\n## Drive an application without polling\n\nThe shipped [worker](../examples/worker.sh) signals readiness, reads one\nrequest, writes a receipt file, then signals consumption.\n\n- The Lisp controller waits on a fresh `wait-for` channel per signal.\n- The receipt file proves what the application consumed. A successful send or\n printed marker does not.\n- Calls block with deadlines. This is not a control-mode subscription API.\n\n\n```lisp\n(defun drive-worker (client session socket-path program worker-path receipt-path)\n \"Launch a worker through argv, wait for readiness and verify input consumption.\nWORKER-PATH names the shipped worker.sh; RECEIPT-PATH is in the owned demo directory.\nSignals operational conditions without retrying a mutation. Calls block.\"\n (let* ((ready (symbol-name (gensym \"example-ready-\")))\n (consumed (symbol-name (gensym \"example-consumed-\")))\n (window (observed-value\n (tm:new-window client session :name \"worker\"\n :command (list \"/bin/sh\" worker-path program\n socket-path ready consumed receipt-path))))\n (pane (aref (tm:panes window) 0))\n (message \"release #{literal}; λ\"))\n (tm:run-command client (list \"-N\" \"wait-for\" ready)\n :effect :read :timeout 1 :output-limit 4096)\n (tm:send-text client pane message :enter t)\n (tm:run-command client (list \"-N\" \"wait-for\" consumed)\n :effect :read :timeout 1 :output-limit 4096)\n (let ((receipt (uiop:read-file-string receipt-path :external-format :utf-8)))\n (assert (string= message receipt))\n (list :consumed receipt :pane (tm:id pane)))))\n```\n\n\n```lisp\n(uiop:with-temporary-file (:pathname receipt :keep nil)\n (tm:with-client (client :socket-path *socket-path*)\n (let ((session (find \"work\" (tm:fetch-sessions client) :key #'tm:name :test #'string=)))\n (drive-worker client session *socket-path* \"tmux\"\n (namestring (truename \"examples/worker.sh\"))\n (namestring receipt)))))\n```\n\nThe result contains `:consumed \"release #{literal}; λ\"` and a pane ID.\n\n- The request travels as literal text; worker arguments travel through argv.\n- The worker stays in its pane until the owned daemon stops.\n- Receipt paths are local to the daemon host. This is not a remote-file API.\n\n## Inspect a typed failure\n\nCancel a read before it acquires data, handle `command-cancelled`, and return\nthe outcome the condition carries:\n\n\n```lisp\n(defun cancelled-read (client)\n \"Demonstrate typed failure evidence using a read cancelled before acquisition.\"\n (let ((token (tm:make-cancellation-token)))\n (tm:cancel token)\n (handler-case\n (progn (tm:fetch-snapshot client :cancel-token token)\n (error \"A cancelled read unexpectedly completed\"))\n (tm:command-cancelled (condition)\n (let ((outcome (tm:error-outcome condition)))\n (list :condition (type-of condition)\n :status (and outcome (tm:outcome-status outcome))\n :phase (and outcome (tm:outcome-phase outcome))))))))\n```\n\n\n```lisp\n(tm:with-client (client :socket-path *socket-path*) (cancelled-read client))\n```\n\nThe handler never retries. Cancelling a mutation after dispatch can give a\ndifferent status or phase. See\n[command-cancelled](api.md#command-cancelled-type).\n\n## Stop the daemon\n\nClosing a client leaves its daemon alive. The separate\n[`kill-server`](api.md#kill-server-function) operation ends a server. This\nhelper kills only the explicit socket you pass and accepts success only after\nthe operation proves both dispatch and daemon exit:\n\n\n```lisp\n(defun terminate-owned-server (socket-path &key (program \"tmux\"))\n \"Terminate the explicitly selected owned server and return its proven outcome.\"\n (tm:with-client (client :program program :socket-path socket-path)\n (let ((outcome (tm:kill-server client)))\n (assert (eq :succeeded (tm:outcome-status outcome)))\n (assert (eq :server-terminated (tm:outcome-phase outcome)))\n outcome)))\n```\n\n\n```lisp\n(terminate-owned-server *socket-path*)\n```\n\n[`stop-daemon`](api.md#stop-daemon-function) then reaps the daemon you started\nand removes its socket directory:\n\n```lisp\n(tm:stop-daemon *daemon*)\n```\n\nExit the REPL:\n\n```lisp\n(uiop:quit)\n```\n" }, { "path": "docs/captures.md", - "content": "# Captured objects\n\n`fetch-snapshot` reads the selected daemon and returns a native CLOS graph.\nAcquisition checks the [supported command-alias configuration](operations.md#command-aliases-and-daemon-configuration)\nbefore listing state.\n`sessions`, `windows`, `panes`, `window-links` and `clients` then return fresh\nvectors from that observation. These getters, field access, printing,\n`same-entity-p` and `entity-data` perform no tmux calls. Captured objects remain\nusable after the client closes.\n\n`fetch-sessions`, `fetch-windows`, `fetch-panes` and `fetch-clients` acquire a\ncomplete graph and return the corresponding vector. Repeated fetches read\nagain. Retain one snapshot when several operations should inspect the same\nobservation. Filtering a retained vector will use ordinary sequence functions;\nthe separate [`libtmux/query`](queries.md) system also provides validated local\nfilters, relation quantifiers and eager QuerySets.\n\n## Entities, links and order\n\nA snapshot contains each physical session, window and pane once. A\n`window-link` records a session, index and expected physical window. Linking a\nwindow twice into one session creates two links; linking it elsewhere creates\nanother. Session-relative active-window state belongs to the link.\n\n| Accessor | Captured result |\n| --- | --- |\n| `sessions snapshot` | Physical sessions in tmux's observed order |\n| `windows snapshot`, `panes snapshot` | Physical entities in first-occurrence order |\n| `window-links snapshot` | Every contextual link in listing order |\n| `window-links session` | That session's links in observed index order |\n| `windows session` | One window per link; repeated physical windows remain repeated |\n| `panes window` | Physical panes in captured pane order |\n| `window-links window` | Every link to that physical window |\n| `window pane`, `window link` | The captured physical window |\n| `session link`, `session attached-client` | The captured session |\n| `clients snapshot`, `clients session` | Attached-client rows, preserving order and multiplicity |\n\nAn attached tmux client is an `attached-client` observation. It is distinct from\nthe library's connection `client`. Repeated target names are retained; a name\ndoes not establish identity.\n\n## Values and ownership\n\n`field-value` returns value and presence as two values. Present false is\n`nil, t`; an absent optional field is `nil, nil`. Empty names and pane titles\nare present strings. Current command/path may be absent when tmux reports an\nempty value. An empty or zero pane PID is absent, while the captured dead flag\nretains the daemon version's reported meaning. Never infer one from the other.\n\nThe convenience readers `name`, `active-p`, `width`, `height`, `index`,\n`current-command`, `current-path`, `title` and `dead-p` follow the same presence\ncontract. Paths remain text from tmux; they are not normalized as local paths.\nUnknown fields and unloaded relations signal `field-unavailable`.\n\nCapture records preserve percent signs, dollar signs and non-NUL ASCII control\ncharacters through an encoding applied before tmux prints each field. This\navoids the visual escaping used by older tmux releases, including the extra\nbackslash before `$HOME` in tmux 3.4. Literal backslashes and valid Unicode\nremain unchanged. The decoder rejects malformed escapes and invalid UTF-8.\nThis preserves the field text tmux supplies; it cannot recover filesystem bytes\nthat tmux has already converted to display text. A captured current path is\ntherefore not a filesystem identity or a byte-exact filesystem argument.\n\nEvery public mutable result is owned by the caller: strings, relation vectors,\nprovenance and projection containers are copied. Entity observations can be\nshared between result vectors. Changing a returned vector or string does not\nchange the capture. Deliberate private-slot mutation is unsupported.\n\n`entity-data` returns a finite plist with captured fields, provenance and\nrelationship identifiers. It omits absent optional fields and retains present\nfalse values. It contains no operational handles or recursive object graph.\nUse `id` to inspect identity: physical IDs are strings; link IDs are\n`(session-id index expected-window-id)`; attached-client row IDs have meaning\nonly within that observation.\n\n## Identity and refresh\n\n`same-entity-p` compares model, connection context, generation and captured ID.\nTwo clients have distinct contexts even when connected to the same daemon.\nWindow-link identity retains its expected window and index; the index is a\nmutable locator. Attached-client identity is scoped to one snapshot.\n\n`refresh` takes the connection client and an existing entity or snapshot. It\nacquires a replacement without changing the old observation. A different\nserver generation, missing target or changed link mapping signals\n`stale-target`. Refreshing an attached client requires a unique live target\nname and matching PID, creation time and tty presence; the returned object's\nobservation identity is new.\n\nThe native Linux witness includes daemon PID, daemon startup, socket inode and\ndevice, kernel process-start identity and a retained pidfd. This distinguishes\nserver replacement even if tmux reuses its numeric IDs and startup second.\nThe daemon version and selected executable version are recorded separately.\n\nAcquisition first verifies the selected endpoint, then pins subsequent commands\nto its canonical path. Every listing carries a tagged witness produced on the\nsame server connection as its rows, including an empty listing. A changed peer\ninvalidates the attempt. Final continuity checks detect server replacement and\npersistent selected-endpoint changes. This does not make graph acquisition\ntransactional: tmux state can change between the listing commands.\n\nA successful nonempty capture uses five tmux launches: alias audit, initial\nwitness, session listing, a batch of window-link/pane/client listings, and final\nwitness. Each batched listing has its own connection witness, and both outer\nwitnesses retain the full process/socket checks. A live empty daemon uses four\nlaunches. Counts exclude client opening and retries.\n\nThe batch has one command outcome. A framing or witness failure retains that\noutcome; it does not invent an outcome for each listing. Row limits remain per\nlisting, while stdout and stderr across all launches share the total byte cap.\nHooks can change state inside a batch, so graph validation and bounded retries\nremain necessary.\n\n## Bounds and failures\n\nProvenance records monotonic acquisition bounds and Common Lisp universal-time\nbounds, as well as tmux's Unix server-start time. Duplicate physical rows must\nagree. References, contextual pane order, counts and active states are checked.\nContradictory captures retry at most twice, then signal `incomplete-snapshot`.\nRetries share the original deadline and byte budget.\n\nThe default total timeout is 30 seconds and total output cap is 16 MiB, inherited\nfrom the client. Defaults also bound each listing to 100,000 rows, the graph to\n100,000 entities, and each encoded field to 1 MiB. `:timeout`, `:output-limit`,\n`:row-limit`, `:entity-limit`, `:field-limit` and `:cancel-token` configure these\nlimits on fetch operations. Decoding and graph construction check cancellation\nand the same deadline as subprocess work.\n\nA confirmed live daemon with zero sessions returns empty vectors. A missing\ndaemon or failed listing signals a condition; neither becomes an empty result.\nAcquisition uses tmux's no-start option and never starts a daemon implicitly.\nThe current core observes entities reachable from sessions; it does not claim\nan inventory of detached internal tmux objects outside that graph.\n" + "content": "# Captured objects\n\n`fetch-snapshot` reads the selected daemon and returns a CLOS graph of captured\nobjects.\n\n- It checks the\n [supported command-alias configuration](operations.md#command-aliases-and-daemon-configuration)\n before listing state.\n- `sessions`, `windows`, `panes`, `window-links` and `clients` return fresh\n vectors from that snapshot.\n- Those getters, field access, printing, `same-entity-p` and `entity-data` make\n no tmux calls.\n- Captured objects stay usable after the client closes.\n\nOne-call fetchers:\n\n- `fetch-sessions`, `fetch-windows`, `fetch-panes` and `fetch-clients` capture a\n complete graph and return one vector. Each call reads again.\n- Keep one snapshot when several operations must see the same observation.\n- Filter a retained vector with ordinary sequence functions, or with\n [`libtmux/query`](queries.md) (validated filters, relation quantifiers, eager\n QuerySets).\n\n## Entities, links and order\n\n- A snapshot holds each physical session, window and pane once.\n- A `window-link` records a session, an index and the expected physical window.\n- Every link of a window, in the same session or another, is its own\n `window-link`.\n- Session-relative active-window state lives on the link.\n\n| Accessor | Captured result |\n| --- | --- |\n| `sessions snapshot` | Physical sessions in tmux's observed order |\n| `windows snapshot`, `panes snapshot` | Physical entities in first-occurrence order |\n| `window-links snapshot` | Every contextual link in listing order |\n| `window-links session` | That session's links in observed index order |\n| `windows session` | One window per link; repeated physical windows remain repeated |\n| `panes window` | Physical panes in captured pane order |\n| `window-links window` | Every link to that physical window |\n| `window pane`, `window link` | The captured physical window |\n| `session link`, `session attached-client` | The captured session |\n| `clients snapshot`, `clients session` | Attached-client rows, preserving order and multiplicity |\n\n- An attached tmux client is an `attached-client` observation, distinct from the\n library's connection `client`.\n- Repeated target names are kept; a name is not an identity.\n\n## Values and ownership\n\n`field-value` returns value and presence as two values.\n\n- Present false: `nil, t`. Absent optional field: `nil, nil`.\n- Empty names and pane titles are present strings.\n- Current command and path are absent when tmux reports an empty value.\n- An empty or zero pane PID is absent. The dead flag keeps the meaning the\n daemon's tmux version reports. Never infer one from the other.\n\nConvenience readers and unknown fields:\n\n- `name`, `active-p`, `width`, `height`, `index`, `current-command`,\n `current-path`, `title` and `dead-p` follow the same presence rules.\n- Paths stay text from tmux. They are not normalized as local paths.\n- Unknown fields and unloaded relations signal `field-unavailable`.\n\nFields keep `%`, `$` and non-NUL ASCII control characters exactly:\n\n- The library encodes each field before tmux prints it, avoiding tmux's visual\n escaping (for example an extra backslash before `$HOME` in some releases).\n- Literal backslashes and valid Unicode are unchanged.\n- The decoder rejects malformed escapes and invalid UTF-8.\n- This keeps the text tmux supplies. It cannot recover filesystem bytes tmux\n already turned into display text.\n- So a captured current path is not a filesystem identity or a byte-exact\n filesystem argument.\n\nOwnership:\n\n- Every public mutable result is caller-owned: strings, relation vectors,\n provenance and projection containers are copied.\n- Entity observations can be shared between result vectors.\n- Changing a returned vector or string never changes the capture.\n- Mutating private slots is unsupported.\n\n`entity-data` returns a finite plist:\n\n- Holds captured fields, provenance and relationship IDs.\n- Omits absent optional fields; keeps present false values.\n- Holds no operational handles and no recursive object graph.\n\n`id` gives identity:\n\n- Physical IDs are strings.\n- Link IDs are `(session-id index expected-window-id)`.\n- Attached-client row IDs mean something only within that observation.\n\n## Identity and refresh\n\n`same-entity-p` compares model, connection context, generation and captured ID.\n\n- Two clients have distinct contexts, even on the same daemon.\n- A window link's identity keeps its expected window and index. The index is a\n mutable locator.\n- Attached-client identity is scoped to one snapshot.\n\n`refresh` takes the connection client and an entity or snapshot.\n\n- It returns a replacement; the old observation is unchanged.\n- A different server generation, a missing target or a changed link mapping\n signals `stale-target`.\n- Refreshing an attached client needs a unique live target name and matching\n PID, creation time and tty presence.\n- The returned attached client has a new observation identity.\n\nOn Linux, a witness detects server replacement even if tmux reuses numeric IDs\nand the startup second. It combines:\n\n- daemon PID and startup\n- socket inode and device\n- process-start identity and a retained pidfd\n\nDaemon and executable versions are recorded separately.\n\nAcquisition:\n\n- Verifies the selected endpoint, then pins later commands to its canonical\n path.\n- Tags every listing, even an empty one, with a witness from the same server\n connection as its rows.\n- Discards the attempt if the peer changes.\n- Ends with continuity checks for server replacement and persistent endpoint\n changes.\n\nIt is not transactional: tmux state can change between listing commands.\n\nTmux launches per capture (client opening and retries excluded):\n\n- Nonempty: five. Alias audit, initial witness, session listing, one batch of\n window-link, pane and client listings, final witness.\n- Live empty daemon: four.\n\nThe batch:\n\n- gives each listing its own connection witness; both outer witnesses keep the\n full process and socket checks\n- has one command outcome. A framing or witness failure keeps it; no\n per-listing outcomes are invented.\n- Row limits apply per listing. Stdout and stderr across all launches share one\n byte cap.\n- Hooks can change state inside a batch, so graph validation and bounded\n retries stay.\n\n## Bounds and failures\n\n- Provenance holds monotonic and universal-time acquisition bounds, plus tmux's\n Unix server-start time.\n- Duplicate physical rows must agree. References, contextual pane order, counts\n and active states are checked.\n- Contradictory captures retry at most twice, then signal\n `incomplete-snapshot`.\n- Retries share the original deadline and byte budget.\n\nDefault limits on fetch operations, with the keyword that sets each:\n\n- total timeout 30 seconds (`:timeout`) and output cap 16 MiB\n (`:output-limit`), inherited from the client\n- 100,000 rows per listing (`:row-limit`)\n- 100,000 entities per graph (`:entity-limit`)\n- 1 MiB per encoded field (`:field-limit`)\n\n`:cancel-token` cancels a fetch. Decoding and graph construction check\ncancellation and the same deadline as subprocess work.\n\n- A live daemon with zero sessions returns empty vectors.\n- A missing daemon or failed listing signals a condition; it never becomes an\n empty result.\n- Acquisition uses tmux's no-start option and never starts a daemon.\n- Only entities reachable from sessions are observed. Detached internal tmux\n objects outside that graph are not inventoried.\n" }, { "path": "docs/queries.md", - "content": "# Native queries\n\n`libtmux/query` compiles inert keyword-headed data into a reusable Common Lisp\nfunction over captured entities and their registered relationships. Compilation\nand evaluation are local: they do not acquire, refresh or mutate tmux. Use an\nordinary Lisp function when a one-off selection does not need validation or\ninspection.\n\n[Query API](query-api.md) · [Captured fields](fields.md) ·\n[Runnable tutorial](tutorial.md#select-and-project-locally)\n\n## Load without global nicknames\n\nLoad the separate query system. It loads `libtmux` but no regex, JSON or thread\nlibrary:\n\n```lisp\n(asdf:load-system \"libtmux/query\")\n```\n\nApplications can choose package-local nicknames:\n\n```lisp\n(defpackage #:my-tmux-tool\n (:use #:cl)\n (:local-nicknames (#:tm #:libtmux)\n (#:q #:libtmux.query)))\n\n(in-package #:my-tmux-tool)\n```\n\nThe library does not claim the short global package names `tm` or `q`.\n\n## Compile once and match locally\n\nQuoted lists are data. `compile-filter` validates the root model, operator,\nfield, arity and operand types; it never calls `eval`.\n\n```lisp\n(defparameter *editors*\n (q:compile-filter\n :pane\n '(:and\n (:= :pane/active t)\n (:in :pane/current-command (\"nvim\" \"vim\"))\n (:>= :pane/width 100))))\n```\n\nUse the returned genuine function with standard sequence operations:\n\n```lisp\n(remove-if (complement (q:predicate *editors*)) panes)\n```\n\nOr request a fresh simple vector with original order and multiplicity:\n\n```lisp\n(q:matching *editors* panes)\n```\n\n`matching` accepts a proper finite list or a non-string vector. It honors fill\npointers and displaced vectors, validates the complete outer container before\nevaluation, and shares one execution budget across the traversal. It retains\nthe captured handles; it does not copy the object graph.\n\n## Scalar semantics\n\n| Form | Fields | Meaning |\n| --- | --- | --- |\n| `(:= field value)` | Text, integer, Boolean | Typed equality |\n| `(:< field n)`, `(:<= field n)`, `(:> field n)`, `(:>= field n)` | Integer | Mathematical integer comparison |\n| `(:in field values)` | Text, integer, Boolean | Typed finite membership |\n| `(:contains field text)` | Text | Case-sensitive substring search |\n| `(:starts-with field text)` | Text | Case-sensitive prefix |\n| `(:and ...)`, `(:or ...)`, `(:not expression)` | Expressions | Ordered Boolean composition |\n| `(:present field)`, `(:missing field)` | Scalar | Captured presence |\n\nText uses content comparison. Integers are Common Lisp integers; wire-decoding\nbounds do not truncate query operands. Ratios and floats are invalid. Empty AND\nis true, empty OR and empty membership are false. A bare `nil` filter is\ninvalid.\n\nPresence is separate from truth. `(:= :pane/active nil)` compares a present\nfalse value. A scalar comparison on an absent optional field is false, so NOT\nof that comparison is true. Use `:present` when absence must be excluded.\nMissing required capture data signals `field-unavailable`.\n\n## Add optional regex operators\n\nLoad CL-PPCRE support without changing the dependency boundary of core or\n`libtmux/query`:\n\n```lisp\n(asdf:load-system \"libtmux/regex\")\n```\n\nThe operand is owned declarative data: the engine, pattern and closed scanner\noptions. Search and full match are separate operations:\n\n```lisp\n(q:compile-filter\n :pane\n '(:regex-search :pane/current-command\n (:cl-ppcre \"^(n?vim)$\" :case-insensitive-mode t)))\n```\n\nSupported Boolean options are `:case-insensitive-mode`, `:multi-line-mode`,\n`:single-line-mode` and `:extended-mode`. The scanner is compiled once. A match\nat position zero is true. An absent optional text field is false. Query visit\nlimits do not interrupt CL-PPCRE scanner execution; use regex only with trusted\nlocal patterns and inputs appropriate to that engine.\n\nThe separate [query interchange guide](query-interchange.md) shows bounded JSON\nround trips and the explicit regex read opt-in.\n\n## Traverse captured relationships\n\nRelation forms compile their child expression for the registered target model:\n\n| Form | Relation | Empty or missing behavior |\n| --- | --- | --- |\n| `(:any relation expression)` | To-many | False on an empty relation |\n| `(:all relation expression)` | To-many | True on an empty relation |\n| `(:none relation expression)` | To-many | True on an empty relation |\n| `(:is relation expression)` | To-one | False when the target is absent |\n\nThis expression requires one pane to be both active and running `nvim`:\n\n```lisp\n(q:compile-filter\n :session\n '(:any :session/window-links\n (:is :link/window\n (:any :window/panes\n (:and (:= :pane/active t)\n (:= :pane/current-command \"nvim\"))))))\n```\n\nTwo separate `:any` forms may match different panes. Missing or unloaded\nrelationship data signals `field-unavailable`; it is not treated as a known\nempty collection. `required-relations` reports every traversed relation in\nfirst-occurrence order.\n\n## Keep eager local selections in a QuerySet\n\nQuerySet is an optional collection convenience, not a replacement for Common\nLisp sequences. It owns a simple-vector container and remains eager:\n\n```lisp\n(let* ((all (q:from panes :model :pane))\n (editors (q:where all *editors*))\n (wide (q:where-if editors (lambda (pane) (>= (tm:width pane) 120))))\n (ordered (q:order-by wide #'> :key #'tm:width)))\n (q:items ordered))\n```\n\n[`from`](query-api.md#from-function), [`where`](query-api.md#where-function),\n[`where-if`](query-api.md#where-if-function) and\n[`order-by`](query-api.md#order-by-function) return new objects.\n[`items`](query-api.md#items-function) returns a fresh simple vector.\n`order-by` uses `stable-sort` on a private copy, so equal\nkeys retain input order; its predicate and key follow Common Lisp's ordinary\nsorting callback contract. Both operations accept function objects or symbols\nnaming global functions. They resolve each designator once before traversal or\nsorting, so a redefinition during a call affects the next operation. Macros,\nspecial operators and unbound function names signal\n[`invalid-argument`](api.md#invalid-argument-type).\n`where-if` calls its native function once per item in input order on normal\ncompletion. A declared model is checked against every item; an empty\nQuerySet can carry its model explicitly, while `where` can take the model from\nits compiled filter. `one` and `one-or-none` accept QuerySets directly.\n\n## Inspect owned query data\n\nInspection returns fresh ordinary data:\n\n```lisp\n(q:expression *editors*)\n```\n\n```lisp\n(q:required-fields *editors*)\n```\n\n```lisp\n(q:explain *editors*)\n```\n\nChanging the source form after compilation, or changing an inspection result,\ndoes not alter the compiled filter. `fields` returns fresh registry metadata for\none of `:session`, `:window`, `:pane`, `:window-link` or `:client`. Here\n`:client` means a captured attached tmux client, not the connection object.\n\n[`explain`](query-api.md#explain-function) reports `:execution :local` and\n`:source-filtering :unavailable`. Acquisition does not execute query filters.\nThe [source-execution decision](adr/0001-native-common-lisp-engine.md#qualify-control-mode-and-source-filtering-before-exposing-them)\nrecords the relationship and native-evaluation guarantees still required.\n\n## Select strictly before mutation\n\n`one` requires exactly one item. `one-or-none` returns two values so an empty\nselection differs from a singleton containing `nil`:\n\n```lisp\n(multiple-value-bind (pane present-p)\n (q:one-or-none (q:matching *editors* panes))\n (when present-p\n (tm:capture-pane client pane)))\n```\n\nBoth functions validate the complete bounded input before returning a\ncandidate. Zero items signal `no-match` from `one`; multiple positions signal\n`ambiguous-match`. Repeated references count as repeated positions. The\ncondition reports whether its count is exact and exposes a fresh bounded sample.\nThis ordering prevents a dependent mutation from running before uniqueness is\nestablished.\n\n## Resource limits and failures\n\nThe defaults bound nesting to 64 containers, compilation to 10,000 structure\nvisits, one membership to 1,000 values, one string to 65,536 characters,\nretained query text to 1,048,576 characters, selection to 100,000 items and one\nexecution scope to 1,000,000 expression and relation visits. `compile-filter`,\n`matching`, QuerySet constructors, `one` and `one-or-none` expose narrower\nkeyword limits for untrusted in-process data.\n\nCycles, dotted lists, invalid operators, wrong field types and unavailable\noptional systems signal `invalid-filter`. Limit exhaustion signals its subtype\n`query-limit-exceeded`. Applying a compiled filter to the wrong captured model\nor to a plist signals `invalid-query-target`. Diagnostics retain bounded type\nand path data; they do not print an unbounded caller object.\n\nExternal configuration files need the later bounded JSON codec. Disabling\n`*read-eval*` alone does not turn the Common Lisp reader into a query parser.\n" + "content": "# Native queries\n\n`libtmux/query` compiles inert keyword-headed data into a reusable Common Lisp\nfunction over captured entities and their registered relationships.\n\n- Compilation and evaluation are local. They never acquire, refresh or mutate\n tmux.\n- For a one-off selection that needs no validation or inspection, use an\n ordinary Lisp function.\n\n[Query API](query-api.md) · [Captured fields](fields.md) ·\n[Runnable tutorial](tutorial.md#select-and-project-locally)\n\n## Load without global nicknames\n\nLoad the separate query system. It loads `libtmux` but no regex, JSON or thread\nlibrary:\n\n```lisp\n(asdf:load-system \"libtmux/query\")\n```\n\nApplications can choose package-local nicknames:\n\n```lisp\n(defpackage #:my-tmux-tool\n (:use #:cl)\n (:local-nicknames (#:tm #:libtmux)\n (#:q #:libtmux.query)))\n\n(in-package #:my-tmux-tool)\n```\n\nThe library does not claim the short global package names `tm` or `q`.\n\n## Compile once and match locally\n\nQuoted lists are data. `compile-filter` validates the root model, operator,\nfield, arity and operand types; it never calls `eval`.\n\n```lisp\n(defparameter *editors*\n (q:compile-filter\n :pane\n '(:and\n (:= :pane/active t)\n (:in :pane/current-command (\"nvim\" \"vim\"))\n (:>= :pane/width 100))))\n```\n\nUse the returned genuine function with standard sequence operations:\n\n```lisp\n(remove-if (complement (q:predicate *editors*)) panes)\n```\n\nOr request a fresh simple vector with original order and multiplicity:\n\n```lisp\n(q:matching *editors* panes)\n```\n\n`matching`:\n\n- Accepts a proper finite list or a non-string vector.\n- Honors fill pointers and displaced vectors.\n- Validates the complete outer container before evaluation.\n- Shares one execution budget across the traversal.\n- Retains the captured handles; it does not copy the object graph.\n\n## Scalar semantics\n\n| Form | Fields | Meaning |\n| --- | --- | --- |\n| `(:= field value)` | Text, integer, Boolean | Typed equality |\n| `(:< field n)`, `(:<= field n)`, `(:> field n)`, `(:>= field n)` | Integer | Mathematical integer comparison |\n| `(:in field values)` | Text, integer, Boolean | Typed finite membership |\n| `(:contains field text)` | Text | Case-sensitive substring search |\n| `(:starts-with field text)` | Text | Case-sensitive prefix |\n| `(:and ...)`, `(:or ...)`, `(:not expression)` | Expressions | Ordered Boolean composition |\n| `(:present field)`, `(:missing field)` | Scalar | Captured presence |\n\n- Text compares by content.\n- Integers are Common Lisp integers; wire-decoding bounds do not truncate\n operands. Ratios and floats are invalid.\n- Empty AND is true. Empty OR and empty membership are false.\n- A bare `nil` filter is invalid.\n\nPresence is separate from truth:\n\n- `(:= :pane/active nil)` compares a present false value.\n- A scalar comparison on an absent optional field is false, so NOT of that\n comparison is true. Use `:present` to exclude absence.\n- Missing required capture data signals `field-unavailable`.\n\n## Add optional regex operators\n\nLoad CL-PPCRE support. Core and `libtmux/query` gain no dependency:\n\n```lisp\n(asdf:load-system \"libtmux/regex\")\n```\n\nThe operand is owned declarative data: the engine, pattern and closed scanner\noptions. Search and full match are separate operations:\n\n```lisp\n(q:compile-filter\n :pane\n '(:regex-search :pane/current-command\n (:cl-ppcre \"^(n?vim)$\" :case-insensitive-mode t)))\n```\n\n- Boolean options: `:case-insensitive-mode`, `:multi-line-mode`,\n `:single-line-mode` and `:extended-mode`.\n- The scanner is compiled once.\n- A match at position zero is true. An absent optional text field is false.\n- Query visit limits do not interrupt CL-PPCRE scanning. Use regex only with\n trusted local patterns and inputs suited to that engine.\n\nThe separate [query interchange guide](query-interchange.md) shows bounded JSON\nround trips and the explicit regex read opt-in.\n\n## Traverse captured relationships\n\nRelation forms compile their child expression for the registered target model:\n\n| Form | Relation | Empty or missing behavior |\n| --- | --- | --- |\n| `(:any relation expression)` | To-many | False on an empty relation |\n| `(:all relation expression)` | To-many | True on an empty relation |\n| `(:none relation expression)` | To-many | True on an empty relation |\n| `(:is relation expression)` | To-one | False when the target is absent |\n\nThis expression requires one pane to be both active and running `nvim`:\n\n```lisp\n(q:compile-filter\n :session\n '(:any :session/window-links\n (:is :link/window\n (:any :window/panes\n (:and (:= :pane/active t)\n (:= :pane/current-command \"nvim\"))))))\n```\n\n- Two separate `:any` forms may match different panes.\n- Missing or unloaded relationship data signals `field-unavailable`. It is not\n a known empty collection.\n- `required-relations` reports every traversed relation in first-occurrence\n order.\n\n## Keep eager local selections in a QuerySet\n\nQuerySet is an optional, eager convenience, not a replacement for Common Lisp\nsequences. It owns a simple-vector container:\n\n```lisp\n(let* ((all (q:from panes :model :pane))\n (editors (q:where all *editors*))\n (wide (q:where-if editors (lambda (pane) (>= (tm:width pane) 120))))\n (ordered (q:order-by wide #'> :key #'tm:width)))\n (q:items ordered))\n```\n\n- [`from`](query-api.md#from-function), [`where`](query-api.md#where-function),\n [`where-if`](query-api.md#where-if-function) and\n [`order-by`](query-api.md#order-by-function) return new objects.\n [`items`](query-api.md#items-function) returns a fresh simple vector.\n- `order-by` uses `stable-sort` on a private copy, so equal keys keep input\n order. Its predicate and key follow Common Lisp's ordinary sorting callback\n contract.\n- `where-if` and `order-by` accept function objects or symbols naming global\n functions. Each designator resolves once before traversal or sorting, so a\n redefinition during a call affects the next operation.\n- Macros, special operators and unbound function names signal\n [`invalid-argument`](api.md#invalid-argument-type).\n- `where-if` calls its function once per item, in input order, on normal\n completion.\n- A declared model is checked against every item. An empty QuerySet can carry\n its model explicitly; `where` can take the model from its compiled filter.\n- `one` and `one-or-none` accept QuerySets directly.\n\n## Inspect owned query data\n\nInspection returns fresh ordinary data:\n\n```lisp\n(q:expression *editors*)\n```\n\n```lisp\n(q:required-fields *editors*)\n```\n\n```lisp\n(q:explain *editors*)\n```\n\n- Changing the source form after compilation, or an inspection result, does\n not alter the compiled filter.\n- `fields` returns fresh registry metadata for one of `:session`, `:window`,\n `:pane`, `:window-link` or `:client`. `:client` means a captured attached\n tmux client, not the connection object.\n- [`explain`](query-api.md#explain-function) reports `:execution :local` and\n `:source-filtering :unavailable`. Acquisition never executes query filters.\n- The [source-execution decision](adr/0001-native-common-lisp-engine.md#qualify-control-mode-and-source-filtering-before-exposing-them)\n records the guarantees still required.\n\n## Select strictly before mutation\n\n`one` requires exactly one item. `one-or-none` returns two values so an empty\nselection differs from a singleton containing `nil`:\n\n```lisp\n(multiple-value-bind (pane present-p)\n (q:one-or-none (q:matching *editors* panes))\n (when present-p\n (tm:capture-pane client pane)))\n```\n\n- Both validate the complete bounded input before returning a candidate, so a\n dependent mutation cannot run before uniqueness is established.\n- Zero items signal `no-match` from `one`; multiple positions signal\n `ambiguous-match`.\n- Repeated references count as repeated positions.\n- The condition says whether its count is exact and exposes a fresh bounded\n sample.\n\n## Resource limits and failures\n\nDefault bounds:\n\n- Nesting: 64 containers.\n- Compilation: 10,000 structure visits.\n- One membership: 1,000 values.\n- One string: 65,536 characters.\n- Retained query text: 1,048,576 characters.\n- Selection: 100,000 items.\n- One execution scope: 1,000,000 expression and relation visits.\n\n`compile-filter`, `matching`, QuerySet constructors, `one` and `one-or-none`\ntake narrower keyword limits for untrusted in-process data.\n\nFailures:\n\n- Cycles, dotted lists, invalid operators, wrong field types and unavailable\n optional systems signal `invalid-filter`. Limit exhaustion signals its\n subtype `query-limit-exceeded`.\n- Applying a compiled filter to the wrong captured model or to a plist signals\n `invalid-query-target`.\n- Diagnostics keep bounded type and path data. They never print an unbounded\n caller object.\n\nFor external configuration files, use the bounded JSON codec. Disabling\n`*read-eval*` does not make the Common Lisp reader a query parser.\n" }, { "path": "docs/query-interchange.md", - "content": "# Optional query interchange\n\n`libtmux/regex` and `libtmux/json` are separate ASDF systems. Core and\n`libtmux/query` remain loadable with Common Lisp plus ASDF/UIOP. The optional\nsystems add CL-PPCRE and Jzon only where their behavior is required.\n\n[Query guide](queries.md) · [Query API](query-api.md) ·\n[JSON API](json-api.md) · [Testing](testing.md)\n\n## Load only what the application uses\n\nEnable the two regex operators:\n\n```lisp\n(asdf:load-system \"libtmux/regex\")\n```\n\nEnable versioned JSON reading and writing:\n\n```lisp\n(asdf:load-system \"libtmux/json\")\n```\n\nLoad both before reading a document containing regex nodes. Neither system\ncontacts tmux.\n\n## Compile a reusable regex\n\n\n```lisp\n(defparameter *cat-command-filter*\n (q:compile-filter\n :pane\n '(:regex-full-match :pane/current-command\n (:cl-ppcre \"CAT\" :case-insensitive-mode t))))\n\n(defun cat-pane-data (snapshot)\n \"Return owned data for captured panes whose command is exactly cat; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *cat-command-filter* (tm:panes snapshot))))\n```\n\n\nThe compiled filter retains owned pattern/options data and one prepared\nCL-PPCRE scanner. `:regex-search` accepts a match anywhere;\n`:regex-full-match` requires the complete captured string. An absent field does\nnot match. Parser and query visit limits do not interrupt scanner execution.\n\n## Round-trip a compiled filter\n\nApplications can give `libtmux.json` a package-local nickname such as `j`.\nWriting returns a fresh string by default:\n\n\n```lisp\n(defun round-trip-filter-document (snapshot)\n \"Round-trip the checked regex filter and apply it to one retained snapshot.\"\n (let* ((document (j:write-filter *cat-command-filter*))\n (restored (j:read-filter document :allow-regex t)))\n (values document\n (map 'vector #'tm:entity-data\n (q:matching restored (tm:panes snapshot))))))\n```\n\n\nWithout `:allow-regex t`, `read-filter` rejects a regex node before compiling\nits scanner. Non-regex documents need only `libtmux/json`.\n\n`write-filter` returns a fresh string unless given an open output character\nstream. It does not open pathnames or close a caller-owned stream.\n\n## Wire envelope\n\nThe native schema is `libtmux.lisp.filter/1`:\n\n```json\n{\"schema\":\"libtmux.lisp.filter/1\",\"model\":\"pane\",\"registryVersion\":1,\"expression\":[\"and\",[\"=\",\"pane/active\",false],[\"in\",\"pane/current-command\",[]]]}\n```\n\nThe root object is closed and requires exactly the named members. Duplicate or\nunknown members, unknown models/operators/fields, wrong arities and unsupported\nregistry versions signal `invalid-filter-document`. External names remain\nstrings until allowlist lookup; the decoder never interns them.\n\nBoolean false is JSON `false`. An empty membership is `[]`. JSON `null` is\ndistinct and rejected because registry version 1 has no nullable query operand.\nNumeric operands are integers; decimal and exponent syntax is rejected before\nJzon converts the token.\nNative closures and QuerySet callbacks are not serializable recipes.\n\nThis schema belongs to the Common Lisp port. Similar JSON from another port is\nnot compatible without operator-by-operator conformance evidence.\n\n## Decoder limits\n\n`read-filter` accepts one complete JSON string and defaults to:\n\n| Limit | Default |\n| --- | ---: |\n| UTF-8 input | 1 MiB |\n| Nesting depth | 64 |\n| JSON nodes | 10,000 |\n| One string | 65,536 characters |\n| Membership operands | 1,000 |\n| Decimal digits in one numeric token | 128 |\n\nOverride a limit with the corresponding keyword argument. An exhausted bound\nsignals `filter-document-limit-exceeded`; `document-limit` identifies the\nbound and `document-path` returns an owned location vector. Jzon syntax failures\nand native-query validation failures remain available through `error-cause`.\n" + "content": "# Optional query interchange\n\n`libtmux/regex` and `libtmux/json` are separate ASDF systems. Core and\n`libtmux/query` need neither. Regex adds CL-PPCRE; JSON adds Jzon.\n\n[Query guide](queries.md) · [Query API](query-api.md) ·\n[JSON API](json-api.md) · [Testing](testing.md)\n\n## Load only what the application uses\n\nEnable the two regex operators:\n\n```lisp\n(asdf:load-system \"libtmux/regex\")\n```\n\nEnable versioned JSON reading and writing:\n\n```lisp\n(asdf:load-system \"libtmux/json\")\n```\n\nLoad both before reading a document containing regex nodes. Neither system\ncontacts tmux.\n\n## Compile a reusable regex\n\n\n```lisp\n(defparameter *cat-command-filter*\n (q:compile-filter\n :pane\n '(:regex-full-match :pane/current-command\n (:cl-ppcre \"CAT\" :case-insensitive-mode t))))\n\n(defun cat-pane-data (snapshot)\n \"Return owned data for captured panes whose command is exactly cat; no I/O.\"\n (map 'vector #'tm:entity-data\n (q:matching *cat-command-filter* (tm:panes snapshot))))\n```\n\n\n- The compiled filter keeps owned pattern and option data plus one prepared\n CL-PPCRE scanner.\n- `:regex-search` accepts a match anywhere; `:regex-full-match` requires the\n complete captured string.\n- An absent field does not match.\n- Parser and query visit limits do not interrupt scanner execution.\n\n## Round-trip a compiled filter\n\nApplications can give `libtmux.json` a package-local nickname such as `j`.\nWriting returns a fresh string by default:\n\n\n```lisp\n(defun round-trip-filter-document (snapshot)\n \"Round-trip the checked regex filter and apply it to one retained snapshot.\"\n (let* ((document (j:write-filter *cat-command-filter*))\n (restored (j:read-filter document :allow-regex t)))\n (values document\n (map 'vector #'tm:entity-data\n (q:matching restored (tm:panes snapshot))))))\n```\n\n\n- Without `:allow-regex t`, `read-filter` rejects a regex node before compiling\n its scanner. Non-regex documents need only `libtmux/json`.\n- `write-filter` returns a fresh string unless given an open output character\n stream. It never opens pathnames or closes a caller-owned stream.\n\n## Wire envelope\n\nThe native schema is `libtmux.lisp.filter/1`:\n\n```json\n{\"schema\":\"libtmux.lisp.filter/1\",\"model\":\"pane\",\"registryVersion\":1,\"expression\":[\"and\",[\"=\",\"pane/active\",false],[\"in\",\"pane/current-command\",[]]]}\n```\n\n- The root object is closed and needs exactly the named members.\n- Duplicate or unknown members, unknown models, operators or fields, wrong\n arities and unsupported registry versions signal `invalid-filter-document`.\n- External names stay strings until allowlist lookup. The decoder never interns\n them.\n\nOperands:\n\n- Boolean false is JSON `false`. An empty membership is `[]`.\n- JSON `null` is rejected: registry version 1 has no nullable query operand.\n- Numeric operands are integers. Decimal and exponent syntax is rejected before\n Jzon converts the token.\n- Native closures and QuerySet callbacks are not serializable.\n\nThis schema belongs to the Common Lisp port. Do not assume similar JSON from\nanother port is compatible.\n\n## Decoder limits\n\n`read-filter` accepts one complete JSON string and defaults to:\n\n| Limit | Default |\n| --- | ---: |\n| UTF-8 input | 1 MiB |\n| Nesting depth | 64 |\n| JSON nodes | 10,000 |\n| One string | 65,536 characters |\n| Membership operands | 1,000 |\n| Decimal digits in one numeric token | 128 |\n\nOverride a limit with the matching keyword argument.\n\n- An exhausted bound signals `filter-document-limit-exceeded`.\n- `document-limit` identifies the bound; `document-path` returns an owned\n location vector.\n- Jzon syntax failures and native-query validation failures stay available\n through `error-cause`.\n" }, { "path": "docs/operations.md", - "content": "# Explicit operations\n\nNamed operations take the connection client first and a captured target where\nneeded. They read current state to validate the target, then use its identity.\nEarlier captures remain unchanged. Every operation accepts `:cancel-token`,\n`:timeout` and `:output-limit`; the latter two default to the client settings\nand cover validation, dispatch and any follow-up acquisition together.\n\nThe current APIs require a live daemon. `new-session` creates a session there;\ndaemon bootstrap is a separate unfinished part of the implementation.\n\n| Operation | Target / result |\n| --- | --- |\n| `rename-window`, `rename-session` | Physical entity; command outcome with optional replacement |\n| `select-window` | Window link, preserving session/index context |\n| `select-pane` | Physical pane |\n| `next-window`, `previous-window`, `last-window` | Session; outcome containing its selected window link |\n| `last-pane` | Physical window; outcome containing its selected pane |\n| `new-session` | Selected live daemon; outcome containing the created session |\n| `new-window` | Captured session; outcome containing the physical window |\n| `split-pane` | Captured pane; outcome containing the new pane |\n| `capture-pane` | Pane; UTF-8 text and diagnostic outcome as two values |\n| `capture-pane-bytes` | Pane; owned octets and diagnostic outcome as two values |\n| `send-text`, `send-keys`, `send-prefix` | Pane; command outcome for the send request |\n| `respawn-pane`, `respawn-window` | Physical target; explicit process replacement and optional captured result |\n| `pipe-pane` | Pane; explicit shell source, direction and daemon-owned pipe |\n| [`switch-client`](api.md#switch-client-function) | Captured terminal client and destination session; outcome with optional replacement |\n| [`detach-client`](api.md#detach-client-function), [`refresh-client`](api.md#refresh-client-function), [`suspend-client`](api.md#suspend-client-function), [`lock-client`](api.md#lock-client-function) | Captured terminal client; outcome acknowledging the request |\n| [`lock-session`](api.md#lock-session-function), [`lock-server`](api.md#lock-server-function) | Frontends attached to a captured session or the addressed daemon; request outcome |\n| [`wait-for`](api.md#wait-for-function) | Literal server channel; signal, wait, lock or unlock outcome |\n| `clear-history`, `copy-mode` | Pane; command outcome |\n| `resize-pane`, `resize-window` | Physical target; outcome with optional replacement |\n| `select-layout`, `next-layout`, `previous-layout` | Physical window; outcome with optional replacement |\n| `link-window`, `move-window`, `break-pane` | Explicit link/session/index context; outcome containing the destination link |\n| `swap-windows`, `swap-panes` | Two targets; outcome containing a fresh vector in argument order |\n| `unlink-window` | Window link; outcome without a replacement |\n| `move-pane`, `join-pane`, `rotate-window` | Physical targets; outcome with optional replacement |\n| `list-buffers` | Fresh vector of metadata plists and diagnostic outcome |\n| `show-buffer` | Owned octets and diagnostic outcome |\n| `set-buffer`, `load-buffer`, `save-buffer`, `delete-buffer`, `paste-buffer` | Explicit buffer data/path/name and optional pane; command outcome |\n| [`set-option`](api.md#set-option-function), [`unset-option`](api.md#unset-option-function) | Typed live-catalog option mutation in one explicit table |\n| [`set-hook`](api.md#set-hook-function), [`unset-hook`](api.md#unset-hook-function) | Tmux command-source installation/removal; never evaluates source as Lisp |\n| [`set-environment`](api.md#set-environment-function), [`unset-environment`](api.md#unset-environment-function), [`remove-environment`](api.md#remove-environment-function) | Raw global/session environment value, deletion or tombstone |\n| [`kill-pane`](api.md#kill-pane-function), [`kill-window`](api.md#kill-window-function), [`kill-session`](api.md#kill-session-function) | Exact captured entity; outcome without replacement |\n| [`kill-server`](api.md#kill-server-function) | Retained live daemon; proven process exit or uncertain outcome |\n\nCreation defaults to detached mode. Selection uses explicit captured targets.\n`new-window :index` chooses a free session index. `split-pane` accepts\n`:horizontal` (left/right) or `:vertical` (top/bottom), with a cell `:size` or\n`:percent`. Creation returns a fresh captured entity through `outcome-value`.\n\nFor typed option/hook values, inherited table reads and environment presence,\nsee [decoded configuration](configuration.md). Raw printers remain available for\nunrestricted native inspection.\n\n## Names and child commands\n\nNames and creation `:cwd` strings are literal, including `#[...]` and `#{...}`\ntext. Rename's `:format-p t` explicitly requests tmux format expansion. Tmux can\nnormalize or reject a name; inspect the replacement observation for the\nresulting name. Cwd text follows tmux's own relative-path rules. Tmux can fall\nback from an inaccessible cwd; use child-side evidence when the exact directory\nmatters.\n\nCreation accepts a nonempty `:command` list/vector of argv strings or a separate\n`:shell-command` string. Omission selects tmux's default shell. Supplying an\nempty argv is invalid. Strings may contain spaces, quotes, semicolons, dollar\nsigns, backslashes and Unicode; the encoder preserves their argument boundaries.\nOne-element argv starts that executable with no added program argument.\n`:environment` is a list/vector of `(name . value)` string pairs.\n\nThe final encoded tmux command is limited to 16,000 UTF-8 bytes, including NUL\nterminators between argv entries. Nested command quoting counts toward this\nlimit. Oversized named commands fail before their payload is dispatched. They\nare never silently split into multiple mutations.\n\n## Terminal input\n\n`send-text` preserves literal text such as `C-c`; `:enter t` appends one Return\nkey in the same request. `send-keys` accepts a nonempty list/vector of tmux key\nstrings and a positive `:repeat` count. Tmux recognizes names such as `C-c` and\n`Enter`, and falls back to literal input for unrecognized strings. `send-prefix`\nuses the configured prefix; `:second t` selects prefix2.\n\nThe pane's current tmux mode handles input. Successful dispatch means tmux\nprocessed the send request; it does not establish application consumption or\nreadiness. Coordinate dependent work through an application signal.\n\n`copy-mode` enters copy mode; `:page-up t` scrolls on entry, and `:exit t` exits.\nPage-up and exit are mutually exclusive. `clear-history` removes retained tmux\nhistory; it does not promise to clear the application's current screen.\n\n## Geometry and selection\n\n`resize-pane` and `resize-window` accept positive cell `:width`/`:height`, or a\n`:direction` (`:left`, `:right`, `:up`, `:down`) with positive `:amount` (default\none). Absolute dimensions range from 1 through 10,000, the common supported\nrange. Relative amounts range from 1 through 2,147,483,647. Tmux may clamp the\nactual layout; the replacement observation contains the resulting dimensions.\n\nPane `:zoom t` toggles zoom. Window `:fit :smallest` or `:fit :largest` fits the\nattached clients. These modes cannot be combined with dimensions or direction.\nA window resize sets tmux's `window-size` option to manual.\n\n`select-layout` accepts `:even-horizontal`, `:even-vertical`, `:main-horizontal`,\n`:main-vertical`, `:tiled`, or `(:custom \"tmux-layout-description\")`.\nTmux validates custom checksums and geometry. Layout operations unzoom the\nwindow. `next-layout` and `previous-layout` follow tmux's layout ordering.\n\n`next-window`, `previous-window` and `last-window` take a captured session and\nreturn its newly observed active **window link** through `outcome-value`.\nNext and previous accept `:activity t` to restrict selection to alerting windows.\n`last-pane` takes a physical window and returns its observed active pane.\nTmux signals when no last selection exists. These operations and geometry\naccept `:observe nil` to omit follow-up acquisition.\n\n## Attached terminal clients\n\n[Fetch-clients](api.md#fetch-clients-function) returns attached-client observations;\nthey are distinct from the library connection passed as the first argument.\nThe five client operations above require an ordinary terminal client captured\nthrough that connection. They reject control-mode observations. Preflight\nrequires one matching name and the same PID, creation time and tty. It also\nrejects a name that matches another client's full or abbreviated tty. A missing,\nreplaced or foreign observation signals [stale-target](api.md#stale-target-type).\nTmux has no dispatch-side client fingerprint guard across the supported floor,\nso replacement between preflight and dispatch remains possible.\n\n`switch-client` takes an explicit destination session. It preserves that\nsession's environment by default; `:update-environment t` applies tmux's\n`update-environment` option using the attached client's environment. Its default\n`:observe t` acquires a replacement client observation; `:observe nil` omits\nthat read. The earlier observation still points to its captured session.\n\n`refresh-client` schedules a full redraw; `:status-only t` schedules only the\nstatus line. [Refresh](api.md#refresh-function) instead acquires a replacement\nobservation. `detach-client` requests detachment of the selected client.\n`suspend-client` requests native SIGTSTP suspension; the controlling application\nowns resumption. `lock-client` asks the frontend to execute its configured\n`lock-command` through a shell. An already suspended client can make suspend\nor lock a no-op; an empty or oversized lock command is also ignored by tmux.\nThese four calls return no replacement observation.\n\nSuccess acknowledges the server's request. It does not prove frontend exit,\nterminal restoration, completed redraw, process suspension, lock startup or\nauthentication. Coordinate dependent work through the frontend's own completion\nsignal. Missing dispatch/completion evidence remains an unknown outcome; the\nlibrary never retries these requests automatically.\n\n[`lock-session`](api.md#lock-session-function) requests locking for frontends\nattached to the selected session when tmux executes the command.\n[`lock-server`](api.md#lock-server-function) requests it across the addressed\ndaemon. Both use live membership, including frontends attached after the\ncaller's capture. They return one request outcome, with no per-frontend results.\nControl clients, already suspended frontends and empty or oversized lock\ncommands are skipped; no eligible frontends is a successful no-op.\n\nThese requests run the configured frontend lock programs. They do not block\nother tmux commands or suspend pane processes. Closing the library client leaves\nthe frontend programs running. Hooks can add effects or fail after requests\nhave been sent, so a failed outcome does not undo a lock request. See tmux's\n[`server_lock`](https://github.com/tmux/tmux/blob/3.8/server-fn.c#L175-L218).\n\n## Message printing\n\n[`display-message`](api.md#display-message-function) returns two values: owned\nstrict UTF-8 text and its diagnostic command outcome. It uses tmux's ordinary\n`-p` printer and preserves whitespace, including the final newline. Message text\nis literal by default, including `#{...}`, `#(...)`, `#[...]` and `%Y`.\nLiteral input disables expansion; it does not make the printer a byte-identical\necho. Native versions can escape output, including `$` on 3.4. The API retains\nthat presentation rather than interpreting it as decoded field data.\n\nAn optional `:target` accepts a captured session, physical window, pane or\nwindow link owned by the supplied client. Use a link when its session and index\nmatter. Physical windows and panes let tmux choose their session context;\nomitting the target lets tmux choose the complete context. Authority and stale\nlink checks apply before the request. The call acquires no replacement.\n\n`:format-p t` explicitly enables tmux format and time expansion. A `#()`\nexpression may start a shell job, but expansion does not wait for its result.\nA fresh command client may print an empty or incomplete result. Those jobs\nbelong to the native command client and are cleaned up on its disconnect;\nthis API does not provide job completion or background process ownership.\n\nAfter-hooks can print additional text or have effects. The returned text retains\nthat output; it does not establish a single field's value or presence. Use\ncaptured getters for local field reads. Decoded configuration acquisition\nremains a separate capability. Invalid UTF-8 raises\n[`decoding-error`](api.md#decoding-error-type) with the outcome's original bytes.\n\nTmux 3.4 and newer provide native literal printing. The 3.3a fallback escapes\nformat and time syntax and conservatively limits the intermediate after time\nexpansion to 8,191 UTF-8 bytes. That limit is checked after live-version\npreflight and before payload dispatch. The encoded command limit also applies.\nSee [`cmd_display_message_exec`](https://github.com/tmux/tmux/blob/3.8/cmd-display-message.c#L62-L176).\n\n## Commands and key bindings\n\n[`list-commands`](api.md#list-commands-function) and\n[`list-keys`](api.md#list-keys-function) return ordinary UTF-8 printer text and\nthe retained outcome. Both preserve native escaping, whitespace and after-hook output. The\nresult is intended for inspection, not replay or decoded configuration lookup.\n\n`list-commands` lists built-ins. Its optional `:command` accepts exact names or\nbuilt-in aliases; configured `command-alias` entries are not part of that table.\nThrough tmux 3.5a, an unknown selector produces no rows. From 3.6, unique\nprefixes work, while unknown or ambiguous selectors fail.\n\n`list-keys` accepts an optional literal `:table` and `:key`. Omitted table means\nall tables. Unknown tables and invalid key syntax remain errors. A valid but\nunbound key is an error except on tmux 3.7 through 3.7c, which return empty text.\nThose four releases also send a single matching row to the server message log\nand any selected frontend's status line instead of stdout, including with\n`:format`. Multiple matching rows print normally. Empty text therefore does\nnot establish that a binding is absent, and inspection can display a status\nmessage. The native [single-row branch](https://github.com/tmux/tmux/blob/3.7c/cmd-list-keys.c#L236-L248)\nchanges in [tmux 3.8](https://github.com/tmux/tmux/blob/3.8/cmd-list-keys.c#L220-L248).\n\nIts `:format` requires tmux 3.7 or newer; older daemons reject it before payload\ndispatch. Both listing functions accept explicit tmux format source without\ntime expansion, so `%Y` stays literal. Empty formatted rows may be omitted.\nFormat jobs have the same asynchronous lifetime limits as message printing.\n\n[`bind-key`](api.md#bind-key-function) replaces one binding in `:table`, which\ndefaults to `\"prefix\"`. Supply exactly one of `:command` argv or\n`:command-source`, explicit tmux source. The argv form preserves token\nboundaries and rejects `=` in its command-name token. `:note` is literal text;\n`:repeat t` enables native repetition. The stored command nodes run when tmux\ndispatches that key, using the key event's context. This does not carry a\ncaptured target's authority into future execution.\n\nTmux parses binding source immediately. Assignments and directives can alter\nthe daemon's environment before a later parse error. Aliases resolve during\nbinding and can introduce parser effects even through argv. A failed bind is\nnot a rollback; missing completion evidence can leave its outcome unknown.\nKeep source and aliases under the application's control. See tmux's\n[`cmd_bind_key_exec`](https://github.com/tmux/tmux/blob/3.8/cmd-bind-key.c#L55-L107)\nand [assignment grammar](https://github.com/tmux/tmux/blob/3.8/cmd-parse.y#L224-L244).\n\n[`unbind-key`](api.md#unbind-key-function) removes exactly one key, also from\n`\"prefix\"` by default. A missing key in an existing table is a no-op; an absent\ntable is an error. Removing a table's last binding may delete the table, so a\nsecond removal need not succeed. Neither helper retries or implicitly removes\nall bindings. Binding success acknowledges storage and hooks, not later key\nexecution. [`send-keys`](api.md#send-keys-function) sends pane input and does\nnot exercise a frontend's key-binding dispatch.\n\n## Server access\n\n[`server-access`](api.md#server-access-function) takes a literal account name\nand one access operation. `:allow` adds a writable entry; `:deny` removes one;\n`:read-only` and `:read-write` update or add an entry. Duplicate additions and\nmissing removals remain errors. Tmux resolves names through the daemon's name\nservice; strings are not treated as numeric UIDs. Root and the daemon-owner UID\ncannot be changed. `:group-p t` selects a group name and requires live tmux 3.8;\nolder daemons reject that request before payload dispatch.\n\nRemoval does not create a deny rule. From tmux 3.8, a user without an explicit\nentry can still match its connecting peer's GID. An explicit UID entry wins\nover the GID entry; supplementary groups are not searched. Socket and directory\naccess must be configured separately; an ACL entry alone does not make the\nendpoint reachable.\n\nPermission changes can affect connected clients. In tmux 3.8, removal and\nread-only/read-write updates recompute every client's effective ACL. A writable\nentry can therefore clear an unrelated frontend's separately set read-only\nflag. A request can schedule disconnection without proving frontend exit, and\na later grant does not cancel an already scheduled exit. `:allow` alone does\nnot recompute connected-client flags. Earlier captures retain their values;\nuse [`refresh`](api.md#refresh-function) to acquire a replacement observation.\nSee the native [command](https://github.com/tmux/tmux/blob/3.8/cmd-server-access.c#L61-L152)\nand [ACL update](https://github.com/tmux/tmux/blob/3.8/server-acl.c#L71-L110).\n\n[`list-server-access`](api.md#list-server-access-function) returns ordinary\nUTF-8 listing text and an outcome. Native rows use `(R)`/`(W)` before 3.8 and\ninclude `U`/`G` account kinds from 3.8. UID 0 is omitted; a failed name lookup\nprints `unknown`. Empty text cannot establish that nobody has access. This\nlisting is intended for inspection and is not a decoded authorization model.\n\nTests cover entry lifecycle, literal input, version gates and the frontend\nflag effect on private sockets under one OS user. Cross-user connection,\nauthorization and revocation behavior remain unverified by this library's\nsuite. No test changes users, socket permissions or privileges. Calls retain\nuncertain outcomes and never retry automatically.\n\n## Wait channels\n\n[`wait-for`](api.md#wait-for-function) accepts `:operation :wait` (the default),\n`:signal`, `:lock` or `:unlock`, and a nonempty literal channel name. Signal and\nunlock work on the supported tmux floor. Wait and lock require tmux 3.8's\nclient-loss cleanup; older daemons signal\n[`unsupported-capability`](api.md#unsupported-capability-type) before dispatch.\nThis is a capability restriction, not a change to the core tmux floor.\n\nA signal wakes existing waiters. With none waiting, one signal leaves a pending\nwake; a second can remove it. This is neither an idempotent latch nor a counting\nsemaphore. Use an application protocol when acknowledgements or sender identity\nmatter. Server shutdown can also flush waiting requests.\n\nLocks belong to the daemon channel, not a Lisp client or thread. They survive a\ncompleted call and client closure within the daemon's lifetime. Unlock explicitly;\nno resource macro or automatic cleanup unlocks them. Signals and locks share\nnative channel state, so use different channel names for those protocols.\n\nEach call blocks its caller. Use a second connection client to signal or unlock\nanother client's pending operation. Timeout and byte limits include preflight.\nCancellation removes the owned command process; tmux 3.8 removes a disconnected\nqueued waiter. Cancellation or lost receipts cannot prove that a signal was not\nconsumed or a lock was not granted. Inspect the retained outcome and coordinate\nrecovery through the application; the library does not retry a channel request.\nSee [`cmd_wait_for_client_lost`](https://github.com/tmux/tmux/blob/3.8/cmd-wait-for.c#L483-L515).\n\n## Links and pane placement\n\n`link-window` and `move-window` take a source **window link**, a destination\nsession and an explicit free index. The source link preserves session group\ncontext. Neither overwrites an occupied index. Moving removes only the selected\nsource link; removing a session's last link can destroy that session.\n`unlink-window` refuses a last reference unless `:kill-if-last t` is explicit;\ntmux session groups affect its last-reference check.\n\n`swap-windows` takes two links and returns their replacement links in argument\norder. `:select t` selects the affected indexes; omission retains current\nindexes. An old link whose index now points at another window is stale.\n\n`move-pane` and `join-pane` take source and destination physical panes.\n`:direction`, `:size`, `:percent`, `:before` and `:full-size` control placement;\n`:detached t` is the default. An emptied source window and all its links are\ndestroyed. With `:detached nil`, tmux chooses the session context of the physical\ndestination. Percentage sizing follows the installed tmux semantics: with\n`:full-size t`, 3.3a uses the destination pane's dimensions while 3.8 uses the\nwhole window. Use `:size` for cell-based control.\n\n`break-pane` takes the pane, its explicit source link, a destination session\nand a free index. This source link matters when the pane is its window's only\npane: tmux moves that link while preserving other links and the physical window.\nThe outcome contains the destination link. Its optional `:name` is literal.\n\nTmux 3.7 has an inverted new-window naming branch, corrected in 3.7a. The\nlibrary selects the safe branch from the live pane count within the guarded\nrequest. For a new window with an explicit name, it follows the break with\n`rename-window` targeting the moved pane. This adds no subprocess or retry,\nbut can run an `after-rename-window` hook and is not transactional: a failing\nhook can leave the pane moved and renamed. Inspect the retained command\noutcome before deciding what to do next. Unnamed single-pane moves keep their\nexisting name and automatic-rename setting.\nSee [`cmd_break_pane_exec` in 3.7](https://github.com/tmux/tmux/blob/3.7/cmd-break-pane.c#L116-L123)\nand [the corrected 3.7a branch](https://github.com/tmux/tmux/blob/3.7a/cmd-break-pane.c#L116-L123).\n\n`swap-panes` preserves physical IDs and returns replacements in argument order.\n`rotate-window` moves pane positions `:up` (default) or `:down` and advances\nthe active pane. Both accept `:preserve-zoom t`. Placement operations preserve\nolder observations; a successful operation may have a separate observation\nfailure. Unlink has no replacement to observe.\n\n## Pane processes\n\n`respawn-pane` restarts its process. `respawn-window` restarts the physical\nwindow as one pane, retaining its first pane and destroying every other pane,\nincluding through other session links. Neither kills a running process unless\n`:kill t` is supplied. Omit both `:command` and `:shell-command` to reuse the\nstored command; explicit argv, shell text, cwd and environment follow creation.\nBy default, `outcome-value` supplies a new observation. Earlier captures remain\nlocal and unchanged. A fast-exiting process can disappear before acquisition.\n\n`pipe-pane` accepts explicit `:shell-command` source. It preserves literal `#`\nand `%` text by default; `:format-p t` enables tmux format and time expansion\nbefore the shell runs. Literal commands must fit tmux's 8,191-byte time-format\ncapacity after format escaping. `:direction` is `:output` (pane to shell),\n`:input` (shell to pane) or `:both`. Omitting the command closes the pipe.\n`:toggle t` closes an existing pipe without starting its replacement.\n\nPipe success acknowledges configuration. It does not prove shell startup,\ncommand success or data consumption. Coordinate dependent work through an\napplication signal. Tmux owns the pipe child, and closing the library client\nleaves it running. Pipe replacement or explicit closure releases the pane's\nconnection to that child.\n\n## Buffers\n\n`list-buffers` returns a fresh vector of plists with `:buffer/name`, `:buffer/size`\nin bytes and `:buffer/created` in Unix seconds. It preserves tmux's listing\norder, limits decoding to 10,000 rows by default, and returns `#()` when empty.\nNames are mutable locators, not captured entity identities.\n\n`set-buffer` accepts a literal NUL-free string or an octet vector. Octets travel\nthrough tmux's stdin buffer loader and preserve NUL and invalid UTF-8. `:append t`\nis supported for strings. `show-buffer` returns owned octets without decoding.\nBoth accept a literal `:name`; setting without a name creates an automatic buffer.\nCreation through set/load rejects backslashes, ASCII controls and DEL before\nI/O because tmux versions otherwise rewrite or reject them. Spaces and Unicode\nare supported. Looking up an existing buffer preserves its actual name.\n\n`show-buffer` uses one ordinary unattached tmux client with stdout reserved for\nbuffer bytes. The same live server guard, operation budget and alias audit apply.\nIt succeeds only after normal process completion and complete pipe draining,\nwith exit zero and empty stderr. A hook cannot hide an error by changing its\nexit status. Post-launch read failure retains partial output and diagnostics;\nit does not prove that the read was never dispatched. Buffer contents are never\nparsed as receipts or errors. This contract does not apply to control mode.\n\n`load-buffer` and `save-buffer` take literal file-path strings; `:name` selects\nthe buffer. Save overwrites unless `:append t` is supplied. Relative paths follow\nthe tmux command client's cwd. A literal file named `-` must be spelled `./-`;\nuse set/show for in-memory bytes. Empty input or an empty loaded file is tmux's\nno-op and preserves any existing buffer.\nSave success records tmux's reported completion; it does not independently\nverify file contents or durability. Tmux 3.3a can suppress some file-write errors.\n\n`paste-buffer` takes a physical pane and optional `:name`. Newlines become Return\nby default. `:raw t` preserves them; a separate `:separator` string replaces\neach newline. `:bracketed t` requests bracket markers when the pane enabled\nbracketed paste. `:verbatim t` preserves all bytes, disables newer tmux control-byte\nsanitization, and cannot add separators or bracket markers. It chooses flags\nfrom the live daemon version. `:delete t` removes the selected buffer after pasting. Input\ndisablement and application consumption remain tmux/application concerns.\n\n`delete-buffer :name` requires tmux 3.4 or newer. On 3.3a it signals\n`unsupported-capability` before dispatch, because that release can delete an\nunrelated top buffer when a named buffer is missing. The condition exposes\n`error-feature`, `error-required-version` and `error-actual-version`; the check\nuses the live daemon's version, independently of the selected executable.\n\nOmitting a buffer name for show, save, paste or delete uses tmux's default:\nthe newest buffer on 3.3a, and the newest **automatic** buffer from 3.4 onward.\nIt does not select the newest explicitly named buffer on modern tmux.\n\n## Configuration inspection\n\n[`show-options-text`](api.md#show-options-text-function),\n[`show-hooks-text`](api.md#show-hooks-text-function) and\n[`show-environment-text`](api.md#show-environment-text-function) return native\nUTF-8 printer text and a retained command outcome. Supply an explicit scope;\nlocal tables require the matching captured target. Normal client identity,\npreflight, last-moment target guards, cancellation and resource limits apply.\nThese functions acquire state and do not change earlier observations.\n\nThis function from the [executed example package](../examples/workspace.lisp)\nreturns three printer views plus their diagnostic outcomes. The\n[REPL tutorial](tutorial.md) supplies the package's `tm` nickname and setup.\n\n\n```lisp\n(defun configuration-report (client session)\n \"Read native configuration text; return an owned report and diagnostic outcomes.\"\n (let ((outcomes nil))\n (flet ((inspect-text (reader &rest options)\n (multiple-value-bind (text outcome) (apply reader client options)\n (push outcome outcomes)\n text)))\n (let ((report\n (list :options (inspect-text #'tm:show-options-text\n :scope :session :target session\n :name \"status\" :include-inherited t)\n :hooks (inspect-text #'tm:show-hooks-text\n :scope :session :target session)\n :environment (inspect-text #'tm:show-environment-text\n :scope :session :target session))))\n (values report (coerce (nreverse outcomes) 'simple-vector))))))\n```\n\n\nOption and hook `:name` is a literal tmux reference: format-looking characters\nstay literal, while native abbreviations and array-reference syntax still\napply. Omit it to list the table. `:scope` selects native flags; tmux can infer\na built-in option's table from its name instead. These raw inspectors do not\nenforce the typed mutation catalog's name/type restrictions.\nA physical window's native format context need not identify one particular\ncaptured session link; use a session target for session-table inspection.\n\n`show-options-text` exposes `:include-inherited` (`-A`), `:include-hooks` (`-H`)\nand `:value-only` (`-v`). Native whole-table `-A` output does not promise\ninherited user `@` options. `show-hooks-text` has no server-scope flag; its named\nprinter can return an ordinary `@` option without proving event registration.\nIts `:monitors` option selects native monitor presentation. Both printers'\n`:format` and hook monitor inspection require the live daemon to be tmux 3.8.\nFormat text is explicit tmux source with no implicit time expansion; `#()`\ncan start command-client jobs whose results may be incomplete and whose\ncleanup follows client disconnect.\n\nEnvironment scopes are `:global` and captured `:session`. Session output is the\nraw table, not a merged child environment. `:hidden t` selects hidden entries;\nthe default selects ordinary entries. A visibility mismatch may succeed with\nempty text, which does not prove absence. `:shell-format t` returns native\nshell-looking text as data. Names may contain spaces, format punctuation and\nUnicode; only empty text, NUL and `=` are rejected. No reader executes this text.\n\nEscaping, whitespace and ordinary hook output stay in the returned presentation.\nForeign names and multiline values can make bulk text ambiguous. Missing names\nremain native errors with outcome evidence; invalid UTF-8 signals a decoding\ncondition retaining the client and original bytes. These operations do not\nclaim parsed values, presence, inherited provenance or complete decoded\nrecords. Decoded acquisition remains under development behind its separate\n[transport admission gate](adr/0001-native-common-lisp-engine.md#qualify-control-mode-and-source-filtering-before-exposing-them).\n\n## Configuration mutations\n\n[`set-option`](api.md#set-option-function) and\n[`unset-option`](api.md#unset-option-function) address one explicit tmux option\ntable. Server and global scopes reject a target. Session, window and pane\nscopes require a captured target of that type, so the normal generation and\nlast-moment target guards apply. The exact live daemon version selects the\nreviewed option catalog after preflight; the executable's version cannot\nsilently substitute for it. The current catalogs cover the twelve exact\nsupported releases from 3.3a through 3.8. An unreviewed neighboring release\nsignals an error; see [capabilities and current limits](capabilities.md).\n\nLiteral writes validate the catalog's native Boolean, integer, choice and text\ntype before payload dispatch. `nil` is a valid false option value and becomes\ntmux `off`. `:format-p t` instead accepts explicit tmux format text and lets the\ndaemon validate its expanded value. Registered array elements use `:key` and\nnever allocate a vector by the greatest numeric key. Without `:key`, an array\nvalue uses the option's native tmux list grammar and may create several entries;\nuse `:key` when the value must remain one literal entry. `:append t` is accepted\nonly where tmux implements it: strings, keyed string-array values and unkeyed\narray assignment. Public user-option writes accept the reversible\n`@[A-Za-z0-9_.-]+` name grammar.\n\n`:only-if-unset t` requests a local absent-only write. An inherited value permits\na local override. An existing local value, including false or empty text,\nrefuses replacement and retains the normal condition/outcome evidence. With\n`:key`, tmux tests that array element; other local keys may already exist.\nWithout a key, it tests the local option entry. This condition applies once to\nthe selected command; hooks and later operations remain independent. The\ndefault keeps ordinary replacement behavior.\n\n[`set-hook`](api.md#set-hook-function) accepts explicit tmux command source; it\ndoes not parse the source as Lisp or execute it locally. Ordinary installation\nnever uses tmux's immediate-run flag. Tmux can still run a registered native\nafter-hook such as `after-set-hook` as a consequence of processing the command.\nKeyed hook entries do not support appending command text; unkeyed append adds\nhook entries through tmux's array grammar. Use\n[`unset-hook`](api.md#unset-hook-function) to remove the hook. Registered hooks\nstay separate from ordinary option writes, and the live catalog gates dynamic\nevent sources.\n\n[`set-environment`](api.md#set-environment-function) writes one raw global or\ncaptured-session environment table. It accepts literal text by default,\nexplicit format expansion through `:format-p t`, and tmux's hidden flag.\n[`unset-environment`](api.md#unset-environment-function) deletes an entry;\n[`remove-environment`](api.md#remove-environment-function) stores tmux's\nremoval marker. A tombstone, absence and a present empty string remain distinct.\nNames use `[A-Za-z_][A-Za-z0-9_]*` so later named acquisition is reversible.\n\nAll seven operations return a\n[`command-outcome`](api.md#command-outcome-type), retain effective arguments\nand diagnostics, and never retry uncertain mutations. Use the guarded\n[text inspectors](#configuration-inspection) for native printer views and\n[decoded configuration](configuration.md) for typed, presence-aware reads. Use\n[`run-command`](api.md#run-command-function) when raw tmux argv and its weaker\ntarget contract are intentional.\n\n## Explicit termination\n\n[`kill-pane`](api.md#kill-pane-function),\n[`kill-window`](api.md#kill-window-function) and\n[`kill-session`](api.md#kill-session-function) accept one captured physical\ntarget. The same preflight and last-moment guards used by other named mutations\nreject a missing, replaced or foreign-generation target. These functions do not\nexpose tmux's broad `-a` forms. Killing a physical window removes all its links;\nkilling a session removes that session's links and any now-unreferenced panes.\n\n[`kill-server`](api.md#kill-server-function) is deliberately separate from\n[`close-client`](api.md#close-client-function). Closing releases library-owned\nresources and leaves tmux alive. Server termination succeeds only after a\npre-dispatch receipt and readiness of the pidfd retained for the daemon accepted\nduring this call's preflight prove both dispatch and process exit. Daemon death\nwithout the receipt remains `:unknown` because another actor could have\nterminated it. After observed death, the client remains open but its generation\nis invalidated; retained captures still support local traversal and projection.\n\nAll four operations are destructive and never retry automatically. Select the\ntarget once, establish cardinality before dispatch, and inspect a retained\ncondition outcome when completion is uncertain.\n\n## Outcomes and target checks\n\nMutators return `command-outcome`. `outcome-value` returns a value and presence\nas two values. Rename and selection accept `:observe nil` to omit follow-up\nacquisition. Otherwise a successful mutation followed by failed acquisition\nstill has status `:succeeded`, no value, and an `outcome-observation-error`.\n\n| Evidence | Outcome |\n| --- | --- |\n| Preflight failed or live guard explicitly rejected the target | `:not-dispatched` |\n| Completion receipt, successful tmux process exit and empty stderr | `:succeeded` |\n| Completion receipt and nonzero process exit | `:failed` |\n| Successful process exit with diagnostic output | `:unknown` |\n| Dispatched operation lacks required receipts, or transport lost completion | `:unknown` |\n| Server pidfd proves exit but the pre-dispatch receipt is missing | `:unknown` |\n| Server receipt and retained pidfd both prove explicit termination | `:succeeded`, phase `:server-terminated` |\n| Server exit wait fails after dispatch | `:unknown`, reason `:server-exit-unobserved`; cause retained |\n\nThe outcome retains exit status, diagnostic bytes, effective arguments and\nelapsed time. A failed command queue can have completed effects; it does not\nimply rollback. An unknown mutation is never automatically retried.\n\nValidation checks the live server generation and captured entity identity.\nThe dispatch connection checks the daemon again and checks physical targets or\nsession/index/window mappings immediately before the payload. A reused link\nindex signals `stale-target`. These checks do not make selection and mutation\na transaction; tmux hooks and other clients can change state.\n\nCapture preserves whitespace and trailing lines. The text API strictly decodes\nUTF-8; decoding failures retain the client and raw command outcome. The byte API\ncopies output without decoding. Its flags expose tmux's history, wrapping,\nalternate-screen, pending-output and escape modes; they do not reconstruct\nterminal bytes that tmux did not retain.\n\n## Command aliases and daemon configuration\n\nNamed APIs require the original built-in command meanings and stable\n`command-alias` configuration during each call. `show-options` is the trusted\nbootstrap spelling used to inspect aliases. It must remain the built-in command.\nThe audit cannot safely inspect an arbitrary override of itself or prevent\nconfiguration changes after inspection.\n\nBefore acquisition or a named operation, the library reads `command-alias` and\nsignals `unsupported-configuration` for collisions with reserved command names.\n`error-setting` identifies the option; `error-commands` returns the colliding\nspellings. The reserved list is maintained in\n[command-policy.lisp](../src/command-policy.lisp). Other alias names are allowed.\nThe check conservatively rejects an apparent reserved assignment on any line\nof a multiline alias value.\n\nConfigured tmux hooks keep their ordinary behavior. The library does not remove\naliases or hooks from the user's daemon. `run-command` remains an explicit raw\nescape hatch with tmux's command grammar and no captured-target or alias audit.\n" + "content": "# Explicit operations\n\nNamed operations take the connection client first and a captured target where\nneeded.\n\n- They read current state to validate the target, then use its identity.\n- Earlier captures stay unchanged.\n- Every operation accepts `:cancel-token`, `:timeout` and `:output-limit`. The\n latter two default to the client settings and cover validation, dispatch and\n any follow-up acquisition together.\n- All operations need a live daemon. `new-session` creates a session there.\n Daemon startup is separate; see [managed daemon scopes](daemons.md).\n- No operation retries an uncertain mutation.\n\n| Operation | Target / result |\n| --- | --- |\n| `rename-window`, `rename-session` | Physical entity; command outcome with optional replacement |\n| `select-window` | Window link, preserving session/index context |\n| `select-pane` | Physical pane |\n| `next-window`, `previous-window`, `last-window` | Session; outcome containing its selected window link |\n| `last-pane` | Physical window; outcome containing its selected pane |\n| `new-session` | Selected live daemon; outcome containing the created session |\n| `new-window` | Captured session; outcome containing the physical window |\n| `split-pane` | Captured pane; outcome containing the new pane |\n| `capture-pane` | Pane; UTF-8 text and diagnostic outcome as two values |\n| `capture-pane-bytes` | Pane; owned octets and diagnostic outcome as two values |\n| `send-text`, `send-keys`, `send-prefix` | Pane; command outcome for the send request |\n| `respawn-pane`, `respawn-window` | Physical target; explicit process replacement and optional captured result |\n| `pipe-pane` | Pane; explicit shell source, direction and daemon-owned pipe |\n| [`switch-client`](api.md#switch-client-function) | Captured terminal client and destination session; outcome with optional replacement |\n| [`detach-client`](api.md#detach-client-function), [`refresh-client`](api.md#refresh-client-function), [`suspend-client`](api.md#suspend-client-function), [`lock-client`](api.md#lock-client-function) | Captured terminal client; outcome acknowledging the request |\n| [`lock-session`](api.md#lock-session-function), [`lock-server`](api.md#lock-server-function) | Frontends attached to a captured session or the addressed daemon; request outcome |\n| [`wait-for`](api.md#wait-for-function) | Literal server channel; signal, wait, lock or unlock outcome |\n| `clear-history`, `copy-mode` | Pane; command outcome |\n| `resize-pane`, `resize-window` | Physical target; outcome with optional replacement |\n| `select-layout`, `next-layout`, `previous-layout` | Physical window; outcome with optional replacement |\n| `link-window`, `move-window`, `break-pane` | Explicit link/session/index context; outcome containing the destination link |\n| `swap-windows`, `swap-panes` | Two targets; outcome containing a fresh vector in argument order |\n| `unlink-window` | Window link; outcome without a replacement |\n| `move-pane`, `join-pane`, `rotate-window` | Physical targets; outcome with optional replacement |\n| `list-buffers` | Fresh vector of metadata plists and diagnostic outcome |\n| `show-buffer` | Owned octets and diagnostic outcome |\n| `set-buffer`, `load-buffer`, `save-buffer`, `delete-buffer`, `paste-buffer` | Explicit buffer data/path/name and optional pane; command outcome |\n| [`set-option`](api.md#set-option-function), [`unset-option`](api.md#unset-option-function) | Typed live-catalog option mutation in one explicit table |\n| [`set-hook`](api.md#set-hook-function), [`unset-hook`](api.md#unset-hook-function) | Tmux command-source installation/removal; never evaluates source as Lisp |\n| [`set-environment`](api.md#set-environment-function), [`unset-environment`](api.md#unset-environment-function), [`remove-environment`](api.md#remove-environment-function) | Raw global/session environment value, deletion or tombstone |\n| [`kill-pane`](api.md#kill-pane-function), [`kill-window`](api.md#kill-window-function), [`kill-session`](api.md#kill-session-function) | Exact captured entity; outcome without replacement |\n| [`kill-server`](api.md#kill-server-function) | Retained live daemon; proven process exit or uncertain outcome |\n\n- Creation defaults to detached mode. Selection uses explicit captured targets.\n- `new-window :index` chooses a free session index.\n- `split-pane` takes `:horizontal` (left/right) or `:vertical` (top/bottom),\n with a cell `:size` or `:percent`.\n- Creation returns a fresh captured entity through `outcome-value`.\n- Typed option/hook values, inherited table reads and environment presence:\n see [decoded configuration](configuration.md). Raw printers stay available\n for unrestricted native inspection.\n\n## Names and child commands\n\nNames and creation `:cwd` strings:\n\n- Literal, including `#[...]` and `#{...}` text. Rename's `:format-p t`\n requests tmux format expansion.\n- tmux can normalize or reject a name. The replacement observation holds the\n result.\n- `:cwd` follows tmux's relative-path rules. tmux can fall back from an\n inaccessible cwd, so check from the child side when the exact directory\n matters.\n\nCreation commands:\n\n- `:command` is a nonempty list/vector of argv strings. `:shell-command` is a\n single string. Omit both for tmux's default shell. An empty argv is invalid.\n- Strings may contain spaces, quotes, semicolons, dollar signs, backslashes and\n Unicode. The encoder preserves argument boundaries.\n- A one-element argv starts that executable with no added argument.\n- `:environment` is a list/vector of `(name . value)` string pairs.\n\nSize limit:\n\n- The final encoded tmux command is limited to 16,000 UTF-8 bytes, counting\n the NUL between argv entries. Nested command quoting counts too.\n- Oversized named commands fail before their payload is dispatched. They are\n never split into several mutations.\n\n## Terminal input\n\n- `send-text` sends literal text (`C-c` arrives as characters). `:enter t`\n appends one Return in the same request.\n- `send-keys` takes a nonempty list/vector of tmux key strings and a positive\n `:repeat`. tmux recognizes names such as `C-c` and `Enter`, and falls back to\n literal input for other strings.\n- `send-prefix` uses the configured prefix. `:second t` selects prefix2.\n- The pane's current tmux mode handles input.\n- Success means tmux processed the request, not that the application consumed\n it. Coordinate dependent work through an application signal.\n\n`copy-mode` and `clear-history`:\n\n- `copy-mode` enters copy mode. `:page-up t` scrolls on entry; `:exit t`\n exits. The two are mutually exclusive.\n- `clear-history` removes retained tmux history. It does not promise to clear\n the application's current screen.\n\n## Geometry and selection\n\nResize:\n\n- `resize-pane` and `resize-window` take positive cell `:width`/`:height`, or\n a `:direction` (`:left`, `:right`, `:up`, `:down`) with a positive `:amount`\n (default 1).\n- Absolute dimensions run from 1 to 10,000. Relative amounts run from 1 to\n 2,147,483,647.\n- tmux may clamp the layout. The replacement observation holds the resulting\n dimensions.\n- Pane `:zoom t` toggles zoom. Window `:fit :smallest` or `:fit :largest`\n fits the attached clients. Neither combines with dimensions or direction.\n- A window resize sets tmux's `window-size` option to manual.\n\nLayout:\n\n- `select-layout` takes `:even-horizontal`, `:even-vertical`,\n `:main-horizontal`, `:main-vertical`, `:tiled`, or\n `(:custom \"tmux-layout-description\")`.\n- tmux validates custom checksums and geometry.\n- Layout operations unzoom the window. `next-layout` and `previous-layout`\n follow tmux's layout ordering.\n\nSelection:\n\n- `next-window`, `previous-window` and `last-window` take a captured session\n and return its newly observed active **window link** through\n `outcome-value`.\n- Next and previous accept `:activity t` to restrict selection to alerting\n windows.\n- `last-pane` takes a physical window and returns its observed active pane.\n tmux signals when no last selection exists.\n- These operations and geometry accept `:observe nil` to skip follow-up\n acquisition.\n\n## Attached terminal clients\n\n[Fetch-clients](api.md#fetch-clients-function) returns attached-client\nobservations. They are distinct from the library connection passed as the first\nargument.\n\n- The five client operations in the table need an ordinary terminal client\n captured through that connection. Control-mode observations are rejected.\n- Preflight requires one matching name and the same PID, creation time and tty.\n It rejects a name that matches another client's full or abbreviated tty.\n- A missing, replaced or foreign observation signals\n [stale-target](api.md#stale-target-type).\n- tmux has no dispatch-side client fingerprint guard across the supported\n floor, so a replacement between preflight and dispatch remains possible.\n\n`switch-client`:\n\n- Takes an explicit destination session and preserves that session's\n environment by default.\n- `:update-environment t` applies tmux's `update-environment` option using the\n attached client's environment.\n- Default `:observe t` acquires a replacement client observation. `:observe nil`\n skips that read. The earlier observation still points to its captured\n session.\n\nThe other four:\n\n- `refresh-client` schedules a full redraw. `:status-only t` redraws only the\n status line. [Refresh](api.md#refresh-function) instead acquires a\n replacement observation.\n- `detach-client` requests detachment of the selected client.\n- `suspend-client` requests native SIGTSTP suspension. The controlling\n application owns resumption.\n- `lock-client` asks the frontend to run its configured `lock-command` through\n a shell.\n- An already suspended client can turn suspend or lock into a no-op. tmux also\n ignores an empty or oversized lock command.\n- These four return no replacement observation.\n\nSuccess acknowledges the server's request.\n\n- It does not prove frontend exit, terminal restoration, completed redraw,\n suspension, lock startup or authentication. Coordinate dependent work\n through the frontend's own completion signal.\n- Missing dispatch or completion evidence is an unknown outcome.\n\n[`lock-session`](api.md#lock-session-function) requests locking for frontends\nattached to the selected session when tmux executes the command.\n[`lock-server`](api.md#lock-server-function) requests it across the addressed\ndaemon.\n\n- Both use live membership, including frontends attached after the caller's\n capture.\n- They return one request outcome, with no per-frontend results.\n- Control clients, already suspended frontends and empty or oversized lock\n commands are skipped. No eligible frontend is a successful no-op.\n- They run the configured frontend lock programs. They do not block other tmux\n commands or suspend pane processes.\n- Closing the library client leaves the frontend programs running.\n- Hooks can add effects or fail after the requests were sent, so a failed\n outcome does not undo a lock request.\n- See tmux's\n [`server_lock`](https://github.com/tmux/tmux/blob/3.8/server-fn.c#L175-L218).\n\n## Message printing\n\n[`display-message`](api.md#display-message-function) returns two values: owned\nstrict UTF-8 text and its diagnostic command outcome.\n\n- It uses tmux's ordinary `-p` printer and preserves whitespace, including the\n final newline.\n- Message text is literal by default, including `#{...}`, `#(...)`, `#[...]`\n and `%Y`.\n- Literal input disables expansion. It does not make the printer a\n byte-identical echo: native versions can escape output, such as `$` on tmux\n 3.4. The API keeps that presentation and does not decode it as field data.\n- Invalid UTF-8 raises [`decoding-error`](api.md#decoding-error-type) with the\n outcome's original bytes.\n\n`:target`:\n\n- Accepts a captured session, physical window, pane or window link owned by\n the supplied client.\n- Use a link when its session and index matter. A physical window or pane lets\n tmux choose its session context. Omitting the target lets tmux choose the\n whole context.\n- Authority and stale-link checks run before the request. No replacement is\n acquired.\n\n`:format-p t` enables tmux format and time expansion.\n\n- A `#()` expression may start a shell job, but expansion does not wait for\n its result. A fresh command client may print an empty or incomplete result.\n- The native command client owns those jobs and cleans them up on disconnect.\n The API offers no job completion or background process ownership.\n\nAfter-hooks can print extra text or have effects.\n\n- The returned text keeps that output. It does not establish one field's value\n or presence. Use captured getters for local field reads.\n- Decoded configuration acquisition is a separate capability.\n\nVersion differences:\n\n- tmux 3.4 or newer prints literal text natively.\n- The 3.3a fallback escapes format and time syntax and limits the intermediate\n after time expansion to 8,191 UTF-8 bytes. The check runs after live-version\n preflight and before payload dispatch. The encoded command limit also\n applies.\n- See\n [`cmd_display_message_exec`](https://github.com/tmux/tmux/blob/3.8/cmd-display-message.c#L62-L176).\n\n## Commands and key bindings\n\n[`list-commands`](api.md#list-commands-function) and\n[`list-keys`](api.md#list-keys-function) return ordinary UTF-8 printer text and\nthe retained outcome.\n\n- Both keep native escaping, whitespace and after-hook output.\n- Use them for inspection, not replay or decoded configuration lookup.\n\n`list-commands`:\n\n- Lists built-ins. Optional `:command` takes exact names or built-in aliases.\n Configured `command-alias` entries are not in that table.\n- Before tmux 3.6, an unknown selector produces no rows. From 3.6, unique\n prefixes work, and unknown or ambiguous selectors fail.\n\n`list-keys`:\n\n- Takes an optional literal `:table` and `:key`. Omitting the table means all\n tables.\n- Unknown tables and invalid key syntax are errors.\n- A valid but unbound key is an error, except on tmux 3.7 releases, which\n return empty text.\n- Those 3.7 releases also send a single matching row to the server message log\n and any selected frontend's status line instead of stdout, even with\n `:format`. Multiple matching rows print normally.\n- So empty text does not show a binding is absent, and inspection can display\n a status message. The native\n [single-row branch](https://github.com/tmux/tmux/blob/3.7c/cmd-list-keys.c#L236-L248)\n changes in [tmux 3.8](https://github.com/tmux/tmux/blob/3.8/cmd-list-keys.c#L220-L248).\n\n`:format` on both:\n\n- `list-keys :format` needs tmux 3.7 or newer. Older daemons reject it before\n payload dispatch.\n- Both listing functions take explicit tmux format source without time\n expansion, so `%Y` stays literal. Empty formatted rows may be omitted.\n- Format jobs have the same asynchronous lifetime limits as message printing.\n\n[`bind-key`](api.md#bind-key-function) replaces one binding in `:table`\n(default `\"prefix\"`).\n\n- Supply exactly one of `:command` argv or `:command-source` (explicit tmux\n source).\n- The argv form preserves token boundaries and rejects `=` in its command-name\n token.\n- `:note` is literal text. `:repeat t` enables native repetition.\n- The stored command nodes run when tmux dispatches that key, in the key\n event's context. A captured target's authority does not carry into future\n execution.\n\ntmux parses binding source immediately.\n\n- Assignments and directives can alter the daemon's environment before a later\n parse error.\n- Aliases resolve during binding and can cause parser effects even through\n argv.\n- A failed bind is not a rollback. Missing completion evidence can leave the\n outcome unknown.\n- Keep source and aliases under the application's control.\n- See tmux's\n [`cmd_bind_key_exec`](https://github.com/tmux/tmux/blob/3.8/cmd-bind-key.c#L55-L107)\n and [assignment grammar](https://github.com/tmux/tmux/blob/3.8/cmd-parse.y#L224-L244).\n\n[`unbind-key`](api.md#unbind-key-function) removes exactly one key, also from\n`\"prefix\"` by default.\n\n- A missing key in an existing table is a no-op. An absent table is an error.\n- Removing a table's last binding may delete the table, so a second removal\n need not succeed.\n- Neither helper retries or removes all bindings.\n- Binding success acknowledges storage and hooks, not later key execution.\n [`send-keys`](api.md#send-keys-function) sends pane input and does not\n exercise a frontend's key-binding dispatch.\n\n## Server access\n\n[`server-access`](api.md#server-access-function) takes a literal account name\nand one operation:\n\n- `:allow` adds a writable entry. `:deny` removes one.\n- `:read-only` and `:read-write` update or add an entry.\n- Duplicate additions and missing removals are errors.\n- tmux resolves names through the daemon's name service. Strings are not\n numeric UIDs.\n- Root and the daemon-owner UID cannot be changed.\n- `:group-p t` selects a group name. It needs live tmux 3.8; older daemons\n reject it before payload dispatch.\n\nAccess rules:\n\n- Removal does not create a deny rule. From tmux 3.8, a user without an\n explicit entry can still match its connecting peer's GID.\n- An explicit UID entry wins over the GID entry. Supplementary groups are not\n searched.\n- Configure socket and directory access separately. An ACL entry alone does\n not make the endpoint reachable.\n\nConnected clients:\n\n- In tmux 3.8, removal and read-only/read-write updates recompute every\n client's effective ACL. A writable entry can clear an unrelated frontend's\n separately set read-only flag.\n- A request can schedule disconnection without proving frontend exit. A later\n grant does not cancel an already scheduled exit.\n- `:allow` alone does not recompute connected-client flags.\n- Earlier captures keep their values. Use [`refresh`](api.md#refresh-function)\n for a replacement observation.\n- See the native [command](https://github.com/tmux/tmux/blob/3.8/cmd-server-access.c#L61-L152)\n and [ACL update](https://github.com/tmux/tmux/blob/3.8/server-acl.c#L71-L110).\n\n[`list-server-access`](api.md#list-server-access-function) returns ordinary\nUTF-8 listing text and an outcome.\n\n- Rows use `(R)`/`(W)` before tmux 3.8 and add `U`/`G` account kinds from 3.8.\n- UID 0 is omitted. A failed name lookup prints `unknown`.\n- Empty text does not show that nobody has access.\n- It is for inspection, not a decoded authorization model.\n\nCross-user connection, authorization and revocation behavior is untested.\nTests use private sockets under one OS user.\n\n## Wait channels\n\n[`wait-for`](api.md#wait-for-function) takes `:operation :wait` (default),\n`:signal`, `:lock` or `:unlock`, and a nonempty literal channel name.\n\n- Signal and unlock work on the supported tmux floor.\n- Wait and lock need tmux 3.8's client-loss cleanup. Older daemons signal\n [`unsupported-capability`](api.md#unsupported-capability-type) before\n dispatch. This restricts one capability, not the core tmux floor.\n\nSignals:\n\n- A signal wakes existing waiters.\n- With none waiting, one signal leaves a pending wake. A second can remove it.\n- It is neither an idempotent latch nor a counting semaphore. Use an\n application protocol when acknowledgements or sender identity matter.\n- Server shutdown can flush waiting requests.\n\nLocks:\n\n- A lock belongs to the daemon channel, not to a Lisp client or thread.\n- It survives a completed call and client closure for the daemon's lifetime.\n- Unlock explicitly. No resource macro or automatic cleanup unlocks.\n- Signals and locks share native channel state. Use different channel names\n for each protocol.\n\nBlocking and cancellation:\n\n- Each call blocks its caller. Use a second connection client to signal or\n unlock another client's pending operation.\n- Timeout and byte limits include preflight.\n- Cancellation removes the owned command process. tmux 3.8 removes a\n disconnected queued waiter.\n- Cancellation or lost receipts cannot prove a signal was not consumed or a\n lock was not granted. Inspect the retained outcome and recover through the\n application.\n- See [`cmd_wait_for_client_lost`](https://github.com/tmux/tmux/blob/3.8/cmd-wait-for.c#L483-L515).\n\n## Links and pane placement\n\nWindow links:\n\n- `link-window` and `move-window` take a source **window link**, a destination\n session and an explicit free index. The source link preserves session group\n context. Neither overwrites an occupied index.\n- Moving removes only the selected source link. Removing a session's last link\n can destroy that session.\n- `unlink-window` refuses a last reference unless `:kill-if-last t`. tmux\n session groups affect its last-reference check.\n- `swap-windows` takes two links and returns their replacement links in\n argument order. `:select t` selects the affected indexes; omit it to keep\n the current indexes.\n- An old link whose index now points at another window is stale.\n\nPanes:\n\n- `move-pane` and `join-pane` take source and destination physical panes.\n `:direction`, `:size`, `:percent`, `:before` and `:full-size` control\n placement. `:detached t` is the default.\n- An emptied source window and all its links are destroyed.\n- With `:detached nil`, tmux chooses the session context of the physical\n destination.\n- Percentage sizing follows the installed tmux. With `:full-size t`, 3.3a uses\n the destination pane's dimensions and 3.8 uses the whole window. Use `:size`\n for cell-based control.\n- `swap-panes` preserves physical IDs and returns replacements in argument\n order.\n- `rotate-window` moves pane positions `:up` (default) or `:down` and advances\n the active pane. Both accept `:preserve-zoom t`.\n- Placement operations preserve older observations. A successful operation may\n have a separate observation failure. Unlink has no replacement to observe.\n\n`break-pane` takes the pane, its explicit source link, a destination session\nand a free index.\n\n- The source link matters when the pane is its window's only pane: tmux moves\n that link and keeps the other links and the physical window.\n- The outcome contains the destination link. Optional `:name` is literal.\n- tmux 3.7 has an inverted new-window naming branch, fixed in 3.7a. The\n library picks the safe branch from the live pane count inside the guarded\n request.\n- For a new window with an explicit name, it follows the break with\n `rename-window` on the moved pane. That adds no subprocess or retry, but it\n can run an `after-rename-window` hook and is not transactional: a failing\n hook can leave the pane moved and renamed. Inspect the retained command\n outcome before deciding what to do.\n- Unnamed single-pane moves keep their existing name and automatic-rename\n setting.\n- See [`cmd_break_pane_exec` in 3.7](https://github.com/tmux/tmux/blob/3.7/cmd-break-pane.c#L116-L123)\n and [the corrected 3.7a branch](https://github.com/tmux/tmux/blob/3.7a/cmd-break-pane.c#L116-L123).\n\n## Pane processes\n\nRespawn:\n\n- `respawn-pane` restarts its process. `respawn-window` restarts the physical\n window as one pane: it keeps the first pane and destroys every other pane,\n including through other session links.\n- Neither kills a running process unless `:kill t`.\n- Omit `:command` and `:shell-command` to reuse the stored command. Explicit\n argv, shell text, cwd and environment follow creation.\n- By default `outcome-value` supplies a new observation. Earlier captures stay\n unchanged.\n- A fast-exiting process can disappear before acquisition.\n\n`pipe-pane` takes an explicit `:shell-command`.\n\n- `#` and `%` stay literal by default. `:format-p t` enables tmux format and\n time expansion before the shell runs.\n- A literal command must fit tmux's 8,191-byte time-format capacity after\n format escaping.\n- `:direction` is `:output` (pane to shell), `:input` (shell to pane) or\n `:both`.\n- Omit the command to close the pipe. `:toggle t` closes an existing pipe\n without starting its replacement.\n- Success acknowledges configuration. It does not show shell startup, command\n success or data consumption. Coordinate dependent work through an\n application signal.\n- tmux owns the pipe child. Closing the library client leaves it running.\n- Replacing or explicitly closing the pipe releases the pane's connection to\n that child.\n\n## Buffers\n\n`list-buffers` returns a fresh vector of plists with `:buffer/name`,\n`:buffer/size` (bytes) and `:buffer/created` (Unix seconds).\n\n- It keeps tmux's listing order, decodes at most 10,000 rows by default, and\n returns `#()` when empty.\n- Names are mutable locators, not captured entity identities.\n\n`set-buffer` and `show-buffer`:\n\n- `set-buffer` takes a literal NUL-free string or an octet vector. Octets go\n through tmux's stdin buffer loader, keeping NUL and invalid UTF-8.\n `:append t` works for strings.\n- `show-buffer` returns owned octets without decoding.\n- Both take a literal `:name`. Setting without a name creates an automatic\n buffer.\n- Creation through set/load rejects backslashes, ASCII controls and DEL before\n I/O, because tmux versions otherwise rewrite or reject them. Spaces and\n Unicode work.\n- Looking up an existing buffer keeps its actual name.\n\n`show-buffer` runs one ordinary unattached tmux client with stdout reserved for\nbuffer bytes.\n\n- The same live server guard, operation budget and alias audit apply.\n- It succeeds only after normal process completion and complete pipe draining,\n with exit zero and empty stderr. A hook cannot hide an error by changing the\n exit status.\n- A read failure after launch retains partial output and diagnostics. It does\n not show the read was never dispatched.\n- Buffer contents are never parsed as receipts or errors. Control mode is not\n covered.\n\n`load-buffer` and `save-buffer`:\n\n- Take literal file-path strings. `:name` selects the buffer.\n- Save overwrites unless `:append t`.\n- Relative paths follow the tmux command client's cwd.\n- A literal file named `-` must be spelled `./-`. Use set/show for in-memory\n bytes.\n- Empty input or an empty loaded file is tmux's no-op and keeps any existing\n buffer.\n- Save success records tmux's reported completion. It does not verify file\n contents or durability. tmux 3.3a can suppress some file-write errors.\n\n`paste-buffer` takes a physical pane and optional `:name`.\n\n- Newlines become Return by default. `:raw t` keeps them. A `:separator`\n string replaces each newline.\n- `:bracketed t` requests bracket markers when the pane enabled bracketed\n paste.\n- `:verbatim t` keeps all bytes and disables newer tmux control-byte\n sanitization. It cannot add separators or bracket markers.\n- Flags come from the live daemon version.\n- `:delete t` removes the buffer after pasting.\n- Input disablement and application consumption are outside the library.\n\n`delete-buffer :name` needs tmux 3.4 or newer.\n\n- On 3.3a it signals `unsupported-capability` before dispatch, because that\n release can delete an unrelated top buffer when the named buffer is missing.\n- The condition exposes `error-feature`, `error-required-version` and\n `error-actual-version`. The check uses the live daemon's version, not the\n selected executable's.\n\nOmitting a buffer name for show, save, paste or delete uses tmux's default:\nthe newest buffer on 3.3a, and the newest **automatic** buffer from 3.4 onward.\nOn modern tmux it never selects the newest explicitly named buffer.\n\n## Configuration inspection\n\n[`show-options-text`](api.md#show-options-text-function),\n[`show-hooks-text`](api.md#show-hooks-text-function) and\n[`show-environment-text`](api.md#show-environment-text-function) return native\nUTF-8 printer text and a retained command outcome.\n\n- Supply an explicit scope. Local tables need the matching captured target.\n- Normal client identity, preflight, last-moment target guards, cancellation\n and resource limits apply.\n- They acquire state and do not change earlier observations.\n\nThis function from the [example package](../examples/workspace.lisp) returns\nthree printer views plus their diagnostic outcomes. The\n[REPL tutorial](tutorial.md) supplies the package's `tm` nickname and setup.\n\n\n```lisp\n(defun configuration-report (client session)\n \"Read native configuration text; return an owned report and diagnostic outcomes.\"\n (let ((outcomes nil))\n (flet ((inspect-text (reader &rest options)\n (multiple-value-bind (text outcome) (apply reader client options)\n (push outcome outcomes)\n text)))\n (let ((report\n (list :options (inspect-text #'tm:show-options-text\n :scope :session :target session\n :name \"status\" :include-inherited t)\n :hooks (inspect-text #'tm:show-hooks-text\n :scope :session :target session)\n :environment (inspect-text #'tm:show-environment-text\n :scope :session :target session))))\n (values report (coerce (nreverse outcomes) 'simple-vector))))))\n```\n\n\nOptions and hooks:\n\n- `:name` is a literal tmux reference. Format-looking characters stay literal;\n native abbreviations and array-reference syntax still apply. Omit it to list\n the table.\n- `:scope` selects native flags. tmux can infer a built-in option's table from\n its name.\n- These raw inspectors do not enforce the typed mutation catalog's name/type\n restrictions.\n- A physical window's native format context need not identify one captured\n session link. Use a session target for session-table inspection.\n- `show-options-text` exposes `:include-inherited` (`-A`), `:include-hooks`\n (`-H`) and `:value-only` (`-v`). Native whole-table `-A` output does not\n promise inherited user `@` options.\n- `show-hooks-text` has no server-scope flag. Its named printer can return an\n ordinary `@` option without proving event registration. `:monitors` selects\n native monitor presentation.\n- Both printers' `:format` and hook monitor inspection need live tmux 3.8.\n Format text is explicit tmux source with no implicit time expansion. `#()`\n can start command-client jobs whose results may be incomplete and whose\n cleanup follows client disconnect.\n\nEnvironment:\n\n- Scopes are `:global` and captured `:session`. Session output is the raw\n table, not a merged child environment.\n- `:hidden t` selects hidden entries. The default selects ordinary entries. A\n visibility mismatch may succeed with empty text, which does not show\n absence.\n- `:shell-format t` returns native shell-looking text as data. No reader\n executes it.\n- Names may contain spaces, format punctuation and Unicode. Only empty text,\n NUL and `=` are rejected.\n\nText limits:\n\n- Escaping, whitespace and ordinary hook output stay in the returned\n presentation. Foreign names and multiline values can make bulk text\n ambiguous.\n- Missing names remain native errors with outcome evidence. Invalid UTF-8\n signals a decoding condition that retains the client and original bytes.\n- No parsed values, presence, inherited provenance or complete decoded\n records. For those, use [decoded configuration](configuration.md).\n\n## Configuration mutations\n\n[`set-option`](api.md#set-option-function) and\n[`unset-option`](api.md#unset-option-function) address one explicit tmux option\ntable.\n\n- Server and global scopes reject a target. Session, window and pane scopes\n need a captured target of that type, so the normal generation and\n last-moment target guards apply.\n- The exact live daemon version selects the reviewed option catalog after\n preflight. The executable's version cannot substitute for it.\n- The catalogs cover tmux 3.3a through 3.8. An unreviewed neighboring release\n signals an error; see [capabilities and current limits](capabilities.md).\n\nLiteral writes:\n\n- They validate the catalog's native Boolean, integer, choice and text type\n before payload dispatch. `nil` is a valid false value and becomes tmux\n `off`.\n- `:format-p t` instead accepts explicit tmux format text and lets the daemon\n validate the expanded value.\n- Registered array elements use `:key` and never allocate a vector by the\n greatest numeric key.\n- Without `:key`, an array value uses the option's native tmux list grammar and\n may create several entries. Use `:key` to keep one literal entry.\n- `:append t` is accepted only where tmux implements it: strings, keyed\n string-array values and unkeyed array assignment.\n- Public user-option writes accept the reversible `@[A-Za-z0-9_.-]+` name\n grammar.\n\n`:only-if-unset t` requests a local absent-only write.\n\n- An inherited value permits a local override.\n- An existing local value, including false or empty text, refuses replacement\n and retains the normal condition/outcome evidence.\n- With `:key`, tmux tests that array element; other local keys may already\n exist. Without a key, it tests the local option entry.\n- The condition applies once, to the selected command. Hooks and later\n operations are independent.\n- The default keeps ordinary replacement.\n\n[`set-hook`](api.md#set-hook-function) takes explicit tmux command source. It\ndoes not parse the source as Lisp or run it locally.\n\n- Ordinary installation never uses tmux's immediate-run flag. tmux can still\n run a registered native after-hook such as `after-set-hook` while processing\n the command.\n- Keyed hook entries do not support appending command text. Unkeyed append adds\n hook entries through tmux's array grammar.\n- [`unset-hook`](api.md#unset-hook-function) removes the hook.\n- Registered hooks stay separate from ordinary option writes. The live catalog\n gates dynamic event sources.\n\n[`set-environment`](api.md#set-environment-function) writes one raw global or\ncaptured-session environment table.\n\n- Literal text by default. `:format-p t` requests format expansion. It also\n takes tmux's hidden flag.\n- [`unset-environment`](api.md#unset-environment-function) deletes an entry.\n [`remove-environment`](api.md#remove-environment-function) stores tmux's\n removal marker. A tombstone, absence and a present empty string stay\n distinct.\n- Names use `[A-Za-z_][A-Za-z0-9_]*` so later named acquisition is reversible.\n\nAll seven operations:\n\n- Return a [`command-outcome`](api.md#command-outcome-type) that retains\n effective arguments and diagnostics.\n- For native printer views, use the guarded\n [text inspectors](#configuration-inspection). For typed, presence-aware reads, use\n [decoded configuration](configuration.md).\n- Use [`run-command`](api.md#run-command-function) when raw tmux argv and its\n weaker target contract are intentional.\n\n## Explicit termination\n\n[`kill-pane`](api.md#kill-pane-function),\n[`kill-window`](api.md#kill-window-function) and\n[`kill-session`](api.md#kill-session-function) take one captured physical\ntarget.\n\n- The same preflight and last-moment guards as other named mutations reject a\n missing, replaced or foreign-generation target.\n- They do not expose tmux's broad `-a` forms.\n- Killing a physical window removes all its links. Killing a session removes\n that session's links and any now-unreferenced panes.\n\n[`kill-server`](api.md#kill-server-function) is separate from\n[`close-client`](api.md#close-client-function). Closing releases library-owned\nresources and leaves tmux alive.\n\n- Server termination succeeds only when a pre-dispatch receipt and readiness\n of the pidfd retained for the daemon accepted during this call's preflight\n prove both dispatch and process exit.\n- Daemon death without the receipt stays `:unknown`, because another actor\n could have terminated it.\n- After observed death the client stays open but its generation is\n invalidated. Retained captures still support local traversal and projection.\n\nAll four operations are destructive.\n\n- Select the target once and establish cardinality before dispatch.\n- When completion is uncertain, inspect the retained condition outcome.\n\n## Outcomes and target checks\n\nMutators return `command-outcome`. `outcome-value` returns a value and presence\nas two values.\n\n- Rename and selection accept `:observe nil` to skip follow-up acquisition.\n- Otherwise a successful mutation followed by a failed acquisition still has\n status `:succeeded`, no value, and an `outcome-observation-error`.\n\n| Evidence | Outcome |\n| --- | --- |\n| Preflight failed or live guard explicitly rejected the target | `:not-dispatched` |\n| Completion receipt, successful tmux process exit and empty stderr | `:succeeded` |\n| Completion receipt and nonzero process exit | `:failed` |\n| Successful process exit with diagnostic output | `:unknown` |\n| Dispatched operation lacks required receipts, or transport lost completion | `:unknown` |\n| Server pidfd proves exit but the pre-dispatch receipt is missing | `:unknown` |\n| Server receipt and retained pidfd both prove explicit termination | `:succeeded`, phase `:server-terminated` |\n| Server exit wait fails after dispatch | `:unknown`, reason `:server-exit-unobserved`; cause retained |\n\n- The outcome retains exit status, diagnostic bytes, effective arguments and\n elapsed time.\n- A failed command queue can have completed effects. There is no rollback.\n\nTarget checks:\n\n- Validation checks the live server generation and captured entity identity.\n- The dispatch connection checks the daemon again. Immediately before the\n payload it checks physical targets and session/index/window mappings. A\n reused link index signals `stale-target`.\n- These checks do not make selection and mutation a transaction: tmux hooks\n and other clients can change state.\n\nCapture:\n\n- Preserves whitespace and trailing lines.\n- The text API strictly decodes UTF-8. Decoding failures retain the client and\n raw command outcome. The byte API copies output without decoding.\n- Flags expose tmux's history, wrapping, alternate-screen, pending-output and\n escape modes. They do not reconstruct terminal bytes tmux did not retain.\n\n## Command aliases and daemon configuration\n\nNamed APIs need the original built-in command meanings and stable\n`command-alias` configuration during each call.\n\n- `show-options` is the trusted bootstrap spelling used to inspect aliases. It\n must remain the built-in command.\n- The audit cannot safely inspect an arbitrary override of itself, and cannot\n prevent configuration changes after inspection.\n\nBefore acquisition or a named operation, the library reads `command-alias`.\n\n- It signals `unsupported-configuration` for collisions with reserved command\n names. `error-setting` identifies the option; `error-commands` returns the\n colliding spellings.\n- The reserved list is in [command-policy.lisp](../src/command-policy.lisp).\n Other alias names are allowed.\n- The check conservatively rejects an apparent reserved assignment on any line\n of a multiline alias value.\n\nConfigured tmux hooks keep their ordinary behavior.\n\n- The library does not remove aliases or hooks from the user's daemon.\n- `run-command` remains the raw escape hatch: tmux's command grammar, no\n captured-target or alias audit.\n" }, { "path": "docs/transport.md", - "content": "# Clients and subprocess commands\n\n`open-client` checks the selected tmux executable and returns a connection\nscope. It does not start a daemon. Choose one of `:socket-name` or\n`:socket-path`; omitting both selects tmux's default endpoint. `:config-file`\nis passed explicitly when provided. Configuration strings are copied.\n\n`with-client` closes the original client on every exit. The body supports\ndeclarations and preserves multiple values. Rebinding its visible variable\ndoes not change the resource to close. Closing releases the client's processes\nand streams; it leaves the tmux daemon running.\n\n## Command results\n\n`run-command` takes a client and a finite list or vector of argv strings.\nSupply `:effect :read` or `:effect :mutation` explicitly. Arguments bypass\nshell parsing, but tmux's command and format grammar still applies. This\nescape hatch does not validate captured target identities. Named entity\noperations provide that validation; see the [operation contracts](operations.md).\n\nThe optional `:input` is an octet vector, copied before dispatch. Standard\noutput and diagnostic output are retained as bytes, including invalid UTF-8.\n`outcome-stdout`, `outcome-stderr` and `outcome-arguments` return owned copies.\nAn external command failure signals a condition whose `error-outcome` retains\nthe result and whose `error-cause` retains an underlying failure when present.\n`error-client` identifies the client, including a partially opened client that\nstill owns cleanup work. Retry `close-client` on that object if cleanup failed.\n\n| Outcome status | Meaning |\n| --- | --- |\n| `:succeeded` | The child exited successfully and transport cleanup completed |\n| `:failed` | The child reported a nonzero exit status |\n| `:unknown` | Dispatch was possible but interruption, limits or cleanup prevented a complete result |\n| `:not-dispatched` | Dispatch was prevented or the launcher positively reported an exec failure |\n\nRaw `outcome-phase` records `:prepared`, `:launching`, `:dispatched` or\n`:exited`; named operations also use `:preflight` and `:guard-rejected`.\nTheir [receipt and outcome policy](operations.md#outcomes-and-target-checks)\nrequires more evidence than the raw process runner. Inspect `outcome-reason`,\n`outcome-exit-code` and retained diagnostics\nas well. A command reporting failure can already have changed tmux; these\nstatuses do not promise rollback. The library never retries an uncertain\nmutation automatically.\n\n## Bounds and concurrency\n\nThe default command timeout is 30 seconds. The default combined stdout/stderr\nlimit is 16 MiB. Override these through client defaults or per-command\n`:timeout` and `:output-limit`. The low-level deadline starts after validation,\nargument/environment copies, selected child-directory validation and executable\ninspection. It charges setup, launch and pipe\nservice, but synchronous setup/launch cannot be interrupted by its later checks.\nThe gate rechecks admission before releasing the target. This is an execution\ndeadline, not a hard limit on caller wall time. A byte limit retains at most the\nconfigured count.\nInput is written while both output pipes are drained, avoiding pipe deadlock.\n\nOne external operation owns a client at a time; concurrent work signals\n`client-busy` before dispatch. Use separate clients for independent operations.\n`make-cancellation-token` creates reusable one-way cancellation state; pass it\nas `:cancel-token`, then call `cancel` from another thread. `cancel` returns\ntrue only for the first request. An idle token owns no OS descriptors.\nCancellation signals `command-cancelled` from the operation and retains its\ndispatch evidence; it does not undo a completed mutation.\n\nClosing rejects new operations, requests cancellation and waits for the owner.\nNormal process stop allows 50 ms before KILL and 500 ms for stop/drain. Final\ncleanup can separately wait another 500 ms for child exit. Client close has a\n750 ms active-owner join allowance after its initial lock/cancellation work;\nlock acquisition and retained-job cleanup add time. Timed condition-wait\nreacquisition has no separate lock timeout. A failed join signals\n`cleanup-failed` and leaves the client closing. If child authority or cleanup\ncannot be completed, the client retains the resources. Correct the underlying\nresource problem and retry `close-client`. `client-cleanup-failures` returns a\nfresh vector of retained secondary conditions.\n\nCleanup failure after a normal scope return signals. During an existing error\nor nonlocal exit it is recorded without replacing that exit. Captured data\nremains usable locally after client closure.\n\n## Supported process boundary\n\nThe first backend targets SBCL on Linux x86-64. It requires pidfds, eventfd,\npidfd process-group signalling (Linux 6.9 or newer), their libc wrappers, and\nBash. [`open-client`](api.md#open-client) checks the runtime profile before\nresolving the executable. The first open also probes pidfd/group signalling,\neventfd and the launcher, closing the temporary descriptors before proceeding.\n[`unsupported-platform`](api.md#unsupported-platform) identifies the requirement\nthrough [`error-feature`](api.md#error-feature): `:runtime-profile`, `:pidfd`,\n`:pidfd-process-group`, `:eventfd` or `:launcher`.\n[`error-cause`](api.md#error-cause) retains a failed probe when available.\nThe check is cached in the running image; it is not a continuing health monitor\nor qualification of another implementation or platform. Non-SBCL hosts have no\nreplacement backend. SBCL creates the child\ngroup for redirected stdin. A private FIFO exec barrier delays target execution\nuntil Lisp retains the pidfd, verifies the group and admits dispatch. It passes\nargv as separate positional arguments and does not evaluate caller strings as\nshell source.\nOnly trusted native ELF target executables are accepted. A script or\ntool-manager shim error names the selected file; pass the underlying tmux\nbinary through `open-client`'s `:program` argument.\n\nOrdinary commands force `LC_ALL=C.UTF-8`, clear `TMUX` and `TMUX_PANE`, and normalize\nBash startup variables used by its fixed launcher. It is not a byte-for-byte\nenvironment transfer API. Each private process job owns its selected environment\nand any explicit child working directory; preparing or launching it does not change the Lisp\nprocess's environment or working directory. A separate daemon owner can use\nthat boundary without imposing the command locale on newly created panes;\n[managed daemon scopes](daemons.md) keep that environment and lifecycle separate.\nUse explicit tmux environment operations to change a running server's values.\n\nThe private descriptor poll does not run application REPL\nhandlers. The library does not install a process-wide subreaper.\n\nThe bounds cover the supervised process group. They cannot force an\nuninterruptible kernel syscall to return or contain a descendant that\ndeliberately leaves that group. An unfinished launch remains owned and is\nreported as incomplete cleanup.\n\nSee the [architecture decision](adr/0001-native-common-lisp-engine.md#supervise-subprocesses-with-explicit-scopes-and-bounded-outcomes)\nfor launcher alternatives and saved-image limitations.\n\n\n\n## Persistent control implementation\n\nThe optional `libtmux/control` system exposes scoped native connections, queued\nrequests and byte events through [`libtmux.control`](control-api.md). See the\n[control guide](control.md) and its executable example. The engine reuses the\nexisting process supervisor, one reader and\nserialized request writes. Requests queue without waiting; awaiting a result\nand receiving an event have separate timeout results. Closing cancels pending\nwork, joins the owned worker and leaves the daemon running.\n\nThe live daemon must be at least 3.8 so native notifications are deferred until\na command reply ends. The 3.7 series can include pause/continue notices inside\nreplies. The version comes from the daemon witness. Core operations still support 3.3a through 3.8. Current live\ncontrol tests exercise 3.8; the 3.3a test proves rejection before a control launch.\n\nReply bytes, pending requests and event delivery have separate finite limits.\nAn expired queued request is never dispatched. An in-flight deadline closes\nthe connection and retains partial replies and dispatch state. Awaiting with\na shorter timeout leaves the request live. Event overflow drops the oldest\nevents and reports a gap with event and byte counts. Completion means the\nnative command queue progressed; application readiness needs its own evidence.\n\nThe LF assembler accepts split octet chunks, preserves all bytes except the\nterminating LF, and returns owned line vectors. Separate limits bound each\nline, each feed's bytes and each returned batch's line count. Truncated EOF\nsignals a decoding error. A resource failure, cancellation or escaping exit\nretires the decoder; it cannot resume after losing consumed input.\n\nThe pane-output leaf decoder preserves NUL, invalid UTF-8 and all other bytes.\nIt understands tmux's three-digit octal escapes and extended-output age and\nreserved fields. Encoded and decoded byte limits are separate. Codecs themselves\ndo not own queues or workers; the persistent owner supplies those resources.\n\nThe engine follows tmux's ordinary reply guards and notification conventions.\nIt sends a separate completion command after each request so a failed command\ndoes not strand the next request. It performs no automatic mutation retry or\nreconnection. See the\n[architecture record](adr/0001-native-common-lisp-engine.md#qualify-control-mode-and-source-filtering-before-exposing-them)\nfor the remaining reconnect, event coverage and compatibility work.\n" + "content": "# Clients and subprocess commands\n\n`open-client` checks the selected tmux executable and returns a connection\nscope. It does not start a daemon.\n\n- Choose one of `:socket-name` or `:socket-path`. Omit both for tmux's default\n endpoint.\n- `:config-file` is passed explicitly when given.\n- Configuration strings are copied.\n\n`with-client` closes the original client on every exit.\n\n- The body supports declarations and preserves multiple values.\n- Rebinding its visible variable does not change which resource closes.\n- Closing releases the client's processes and streams. The tmux daemon keeps\n running.\n\n## Command results\n\n`run-command` takes a client and a finite list or vector of argv strings.\n\n- Supply `:effect :read` or `:effect :mutation` explicitly.\n- Arguments bypass shell parsing. tmux's command and format grammar still\n applies.\n- It does not validate captured target identities. Named operations do; see\n the [operation contracts](operations.md).\n- Optional `:input` is an octet vector, copied before dispatch.\n- Standard output and diagnostic output are kept as bytes, including invalid\n UTF-8. `outcome-stdout`, `outcome-stderr` and `outcome-arguments` return\n owned copies.\n\nAn external command failure signals a condition:\n\n- `error-outcome` retains the result.\n- `error-cause` retains an underlying failure when present.\n- `error-client` identifies the client, including a partially opened one that\n still owns cleanup work. Retry `close-client` on it if cleanup failed.\n\n| Outcome status | Meaning |\n| --- | --- |\n| `:succeeded` | The child exited successfully and transport cleanup completed |\n| `:failed` | The child reported a nonzero exit status |\n| `:unknown` | Dispatch was possible but interruption, limits or cleanup prevented a complete result |\n| `:not-dispatched` | Dispatch was prevented or the launcher positively reported an exec failure |\n\n- Raw `outcome-phase` is `:prepared`, `:launching`, `:dispatched` or\n `:exited`. Named operations add `:preflight` and `:guard-rejected`; their\n [receipt and outcome policy](operations.md#outcomes-and-target-checks) is\n stricter than the raw runner's.\n- Also inspect `outcome-reason`, `outcome-exit-code` and retained diagnostics.\n- A command reporting failure can already have changed tmux. Statuses promise\n no rollback.\n- The library never retries an uncertain mutation.\n\n## Bounds and concurrency\n\nLimits:\n\n- Default command timeout: 30 seconds. Default combined stdout/stderr limit:\n 16 MiB. Override per client or per command with `:timeout` and\n `:output-limit`.\n- The deadline starts after validation, argument/environment copies,\n child-directory validation and executable inspection. It covers setup,\n launch and pipe service.\n- It is an execution deadline, not a hard limit on caller wall time:\n synchronous setup and launch cannot be interrupted by its later checks.\n- A byte limit retains at most the configured count.\n- Input is written while both output pipes drain, so pipes cannot deadlock.\n\nConcurrency:\n\n- One external operation owns a client at a time. Concurrent work signals\n `client-busy` before dispatch. Use separate clients for independent\n operations.\n- `make-cancellation-token` creates reusable one-way cancellation state. Pass\n it as `:cancel-token`, then call `cancel` from another thread.\n- `cancel` returns true only for the first request. An idle token owns no OS\n descriptors.\n- Cancellation signals `command-cancelled` and retains its dispatch evidence.\n It does not undo a completed mutation.\n\nClosing rejects new operations, requests cancellation and waits for the owner.\n\n- Normal process stop allows 50 ms before KILL and 500 ms for stop/drain.\n Final cleanup can wait another 500 ms for child exit.\n- Client close allows 750 ms to join the active owner, after its initial\n lock/cancellation work. Lock acquisition and retained-job cleanup add time.\n Timed condition-wait reacquisition has no separate lock timeout.\n- A failed join signals `cleanup-failed` and leaves the client closing.\n- If child authority or cleanup cannot complete, the client retains the\n resources. Fix the underlying problem and retry `close-client`.\n- `client-cleanup-failures` returns a fresh vector of retained secondary\n conditions.\n- Cleanup failure after a normal scope return signals. During an existing error\n or nonlocal exit it is recorded without replacing that exit.\n- Captured data stays usable locally after the client closes.\n\n## Supported process boundary\n\nThe backend needs SBCL, x86-64 Linux and Bash.\n\n- Linux must provide pidfds, eventfd and pidfd process-group signalling (Linux\n 6.9 or newer), plus their libc wrappers.\n- [`open-client`](api.md#open-client) checks the runtime profile before\n resolving the executable. The first open also probes pidfd/group\n signalling, eventfd and the launcher, then closes the temporary descriptors.\n- [`unsupported-platform`](api.md#unsupported-platform) names the missing\n requirement through [`error-feature`](api.md#error-feature): `:runtime-profile`,\n `:pidfd`, `:pidfd-process-group`, `:eventfd` or `:launcher`.\n [`error-cause`](api.md#error-cause) retains a failed probe when available.\n- The check is cached in the running image. It is not a continuing health\n monitor.\n- Non-SBCL hosts have no replacement backend.\n\nLaunch:\n\n- SBCL creates the child group for redirected stdin.\n- A private FIFO exec barrier delays target execution until Lisp retains the\n pidfd, verifies the group and admits dispatch.\n- argv passes as separate positional arguments. Caller strings are never\n evaluated as shell source.\n- Only trusted native ELF executables are accepted. A script or tool-manager\n shim error names the selected file. Pass the underlying tmux binary through\n `open-client`'s `:program` argument.\n\nEnvironment:\n\n- Ordinary commands force `LC_ALL=C.UTF-8`, clear `TMUX` and `TMUX_PANE`, and\n normalize the Bash startup variables its fixed launcher uses. This is not a\n byte-for-byte environment transfer.\n- Each private process job owns its environment and any explicit child working\n directory. Preparing or launching it leaves the Lisp process's environment\n and working directory alone.\n- A separate daemon owner can use that boundary without imposing the command\n locale on new panes. [Managed daemon scopes](daemons.md) keep that\n environment and lifecycle separate.\n- To change a running server's values, use explicit tmux environment\n operations.\n\nLimits:\n\n- The private descriptor poll does not run application REPL handlers.\n- The library installs no process-wide subreaper.\n- The bounds cover the supervised process group. They cannot force an\n uninterruptible kernel syscall to return, or contain a descendant that\n deliberately leaves the group.\n- An unfinished launch remains owned and is reported as incomplete cleanup.\n\nSee the [architecture decision](adr/0001-native-common-lisp-engine.md#supervise-subprocesses-with-explicit-scopes-and-bounded-outcomes)\nfor launcher alternatives and saved-image limitations.\n\n\n\n## Persistent control implementation\n\nThe optional `libtmux/control` system exposes scoped native connections,\nqueued requests and byte events through [`libtmux.control`](control-api.md).\nSee the [control guide](control.md) and its executable example.\n\n- The engine reuses the process supervisor, one reader and serialized request\n writes.\n- Requests queue without waiting. Awaiting a result and receiving an event\n have separate timeout results.\n- Closing cancels pending work, joins the owned worker and leaves the daemon\n running.\n- The live daemon must be tmux 3.8 or newer, so native notifications are\n deferred until a command reply ends. The 3.7 series can put pause/continue\n notices inside replies. The version comes from the daemon witness. Core\n operations still support tmux 3.3a and newer.\n\nLimits:\n\n- Reply bytes, pending requests and event delivery have separate finite limits.\n- An expired queued request is never dispatched.\n- An in-flight deadline closes the connection and retains partial replies and\n dispatch state.\n- Awaiting with a shorter timeout leaves the request live.\n- Event overflow drops the oldest events and reports a gap with event and byte\n counts.\n- Completion means the native command queue progressed. Application readiness\n needs its own signal.\n\nLine assembler (LF):\n\n- Accepts split octet chunks, keeps every byte except the terminating LF, and\n returns owned line vectors.\n- Separate limits bound each line, each feed's bytes and each returned batch's\n line count.\n- A truncated EOF signals a decoding error.\n- A resource failure, cancellation or escaping exit retires the decoder. It\n cannot resume after losing consumed input.\n\nPane-output decoder:\n\n- Keeps NUL, invalid UTF-8 and all other bytes.\n- Understands tmux's three-digit octal escapes and extended-output age and\n reserved fields.\n- Encoded and decoded byte limits are separate.\n- Codecs own no queues or workers. The persistent owner supplies them.\n\nThe engine follows tmux's ordinary reply guards and notification conventions.\n\n- It sends a separate completion command after each request, so a failed\n command does not strand the next one.\n- It never retries a mutation or reconnects on its own.\n- See the\n [architecture record](adr/0001-native-common-lisp-engine.md#qualify-control-mode-and-source-filtering-before-exposing-them)\n for the remaining reconnect, event coverage and compatibility work.\n" }, { "path": "docs/capabilities.md", - "content": "# Capabilities and current limits\n\nThe implemented systems suit bounded, blocking SBCL/Linux tmux automation with\ncaptured graph traversal, native queries, explicit commands and declarative\nworkspace bootstrap. Persistent control requests, explicit reconnection and pane-output events are\noptional on tmux 3.8+. Ordinary notifications retain raw bytes; pane output\nis decoded to octets. Larger stream and retained-memory benchmarks remain open.\n\n| Area | Available now | Remaining work |\n| --- | --- | --- |\n| Runtime | SBCL 2.6.10, ASDF/UIOP 3.3.7, Linux x86-64, kernel 6.9+, Bash | Other implementation/OS support |\n| Acquisition | Finite CLOS snapshots, explicit window links, identity, bounds and replacement observations | Complete acceptance after further operations |\n| Local processing | Ordinary lists/vectors, functions, owned plists, presence via multiple values, validated relation/regex queries and eager QuerySets | Source-side filter lowering |\n| Operations | Creation, rename, selection, geometry, placement, input, buffers, respawn, shell pipes, decoded configuration reads, native printer inspection and typed mutations, captured terminal-client requests, session/server frontend locking, message/command/key printing, key binding/removal, server ACL entries, wait channels (blocking wait/lock require 3.8), explicit entity/server termination and private empty-config daemon scopes | Remaining named server-command helpers |\n| Concurrency | Synchronous core calls; one operation per client; optional nonblocking control submission/event waits and explicit generation-changing reconnect | Larger control workloads |\n| Streaming/events | Bounded captures and byte buffers; daemon-owned `pipe-pane`; optional raw notifications and native pane-output events with gap/end results and bounded drop-oldest delivery | Long-running streams and retained-memory benchmarks |\n| Workspace | Separate bounded JSON/native system; owned logical IDs and records, explicit state/inspection, local drift previews, guarded apply/reconcile and explicit-endpoint CLI; legacy topology reuse | Deletion, process replacement, takeover and replay are outside owned reconciliation |\n| MCP | Intentionally excluded by project policy | Use a separately maintained external integration if one becomes suitable |\n| Optional integrations | Separate CL-PPCRE regex, bounded query JSON, workspace/CLI and scoped native control connections | Broader mode benchmarks |\n| Performance | [Optional native read-path comparison](benchmarks.md) with separate acquisition/startup, launch counts and allocation samples | Large-graph, query and stream workloads; retained heap and broader latency qualification |\n\nThe process backend services stdin/stdout/stderr through nonblocking descriptors\nand a private poll loop. Public operations still block their caller. The library\nhas no Python `asyncio` API or event-loop integration; applying an asyncio\ncorrectness rating to this native Common Lisp core would be misleading.\nIndependent clients can perform independent operations, but their identity\ncontexts differ. Do not pass one client's observations to another for mutation.\n\nPortable Common Lisp plus ASDF/UIOP is the default dependency boundary. The\nworkspace consumer is a separate `libtmux/workspace` ASDF system over core and\nthe locked Jzon parser; its CLI is another separate system. External libraries\nstay isolated in the optional systems that justify them.\n\nMCP is intentionally outside this port's product scope; it is not an unfinished\npackage or release gate. An agent can still read the [public API](api.md),\n[query API](query-api.md), [field registry](fields.md) and [tutorial](tutorial.md),\nbut these documents are not a protocol server. No terminal output stream or\nlossless event-replay guarantee is implied by `pipe-pane`.\n\n## Evidence and adoption\n\n`mise run examples` executes the shipped Lisp examples on an owned socket with\nempty tmux configuration. `mise run check` checks unit semantics, exported\ndocstrings, generated API/field/module pages, executable excerpts and local\ndocumentation links. `mise run package` checks an isolated ASDF consumer;\n`mise run integration` exercises the native transport and named operations.\nSee [verification](../verification.md) for evidence boundaries and commands.\n\nThe supported tmux range is 3.3a through 3.8, including intermediate releases.\nCI uses the latest stable SBCL pin and checks only the two endpoints, 3.3a and\n3.8, to reduce build time. The library rejects plain 3.3; unit tests check that\nfloor. Runtime flags and some operation semantics depend on the live daemon\nversion as documented in the\n[operation contracts](operations.md).\nDecoded configuration reads and mutations require one of the twelve exact reviewed catalogs from\n3.3a through 3.8; an unreviewed neighboring release is rejected rather than\nsilently borrowing another version's schema.\n\nA build-versus-adopt decision should check the platform boundary, required\noperations, identity policy, synchronous concurrency model, diagnostics and\ncleanup behavior against the actual application. Teams requiring continuous updates should check the optional control system\nagainst their required event coverage and reconnect policy. MCP stays excluded. The single maintainer\nand unreleased status do not change those technical boundaries.\n\nBenchmark evidence must report workload, graph size, tmux/toolchain versions,\nacquisition counts, warm/cold timing, distributions and allocations. Test-loop\ntimings measure verification cost; they are not throughput benchmarks.\n" + "content": "# Capabilities and current limits\n\nBounded, blocking tmux automation from SBCL on Linux.\n\n- Captured graph traversal, native queries, explicit commands and declarative\n workspace bootstrap.\n- Persistent control requests, explicit reconnection and pane-output events\n are optional and need tmux 3.8 or newer.\n- Ordinary notifications keep raw bytes. Pane output decodes to octets.\n- Larger stream and retained-memory benchmarks remain open.\n\n| Area | Available now | Remaining work |\n| --- | --- | --- |\n| Runtime | SBCL, ASDF/UIOP, Bash, x86-64 Linux with [pidfd support](transport.md#supported-process-boundary); pins in [.tool-versions](../.tool-versions) | Other implementation/OS support |\n| Acquisition | Finite CLOS snapshots, explicit window links, identity, bounds and replacement observations | Complete acceptance after further operations |\n| Local processing | Ordinary lists/vectors, functions, owned plists, presence via multiple values, validated relation/regex queries and eager QuerySets | Source-side filter lowering |\n| Operations | Creation, rename, selection, geometry, placement, input, buffers, respawn, shell pipes, decoded configuration reads, native printer inspection and typed mutations, captured terminal-client requests, session/server frontend locking, message/command/key printing, key binding/removal, server ACL entries, wait channels (blocking wait/lock require 3.8), explicit entity/server termination and private empty-config daemon scopes | Remaining named server-command helpers |\n| Concurrency | Synchronous core calls; one operation per client; optional nonblocking control submission/event waits and explicit generation-changing reconnect | Larger control workloads |\n| Streaming/events | Bounded captures and byte buffers; daemon-owned `pipe-pane`; optional raw notifications and native pane-output events with gap/end results and bounded drop-oldest delivery | Long-running streams and retained-memory benchmarks |\n| Workspace | Separate bounded JSON/native system; owned logical IDs and records, explicit state/inspection, local drift previews, guarded apply/reconcile and explicit-endpoint CLI; legacy topology reuse | Deletion, process replacement, takeover and replay are outside owned reconciliation |\n| Optional integrations | Separate CL-PPCRE regex, bounded query JSON, workspace/CLI and scoped native control connections | Broader mode benchmarks |\n| Performance | [Optional native read-path comparison](benchmarks.md) with separate acquisition/startup, launch counts and allocation samples | Large-graph, query and stream workloads; retained heap and broader latency measurements |\n\n## Concurrency\n\n- Public operations block their caller. There is no asyncio or event-loop\n integration.\n- Independent clients can run independent operations. Their identity contexts\n differ: never pass one client's observations to another for mutation.\n- `pipe-pane` promises no terminal output stream and no lossless event replay.\n\n## Dependencies\n\n- Core needs only portable Common Lisp plus ASDF/UIOP.\n- `libtmux/workspace` is a separate ASDF system over core and the locked Jzon\n parser. Its CLI is another separate system.\n- Other external libraries stay in the optional systems that need them.\n\nRead next: [public API](api.md), [query API](query-api.md),\n[field registry](fields.md) and [tutorial](tutorial.md).\n\n## Supported tmux\n\n- tmux 3.3a through 3.8, including intermediate releases. Plain 3.3 is\n rejected.\n- Some flags and operation semantics depend on the live daemon version; see\n [operations](operations.md).\n- Decoded configuration reads and mutations accept only reviewed releases in\n that range. An unreviewed neighboring release is rejected, not mapped to\n another version's schema.\n\nCommands and coverage: [verification](../verification.md).\n\n## Before adopting\n\nCheck these against your application:\n\n- Platform boundary and required operations.\n- Identity policy and the synchronous concurrency model.\n- Diagnostics and cleanup behavior.\n- For continuous updates, the control system's event coverage and reconnect\n policy.\n\n## Benchmarks\n\n- Report workload, graph size, tmux and toolchain versions, acquisition\n counts, warm and cold timing, distributions and allocations.\n- Test-loop timings measure verification cost, not throughput.\n" }, { "path": "docs/testing.md", - "content": "# Testing\n\nUse FiveAM directly at the REPL for local tests. Use the separate command for\nlive tmux tests so the process owner can check fixture cleanup.\n\n## Run and redefine a local test\n\nInstall the pinned tools and locked dependencies following the\n[contributor guide](../.github/CONTRIBUTING.md), then start a REPL:\n\n```console\n$ mise run repl\n```\n\nLoad the unit tests:\n\n```lisp\n(asdf:load-system \"libtmux/tests\")\n```\n\nRun one existing test:\n\n```lisp\n(fiveam:run! 'libtmux.tests::record-codec-preserves-text-and-presence)\n```\n\nRe-evaluate its changed test definition in the editor, then rerun that name:\n\n```lisp\n(fiveam:!)\n```\n\n[`fiveam:!!`](https://github.com/lispci/fiveam/blob/3ba1300a9dd6bafdaef2af76d261d73bdf7e4bf0/src/run.lisp)\nand [`fiveam:!!!`](https://github.com/lispci/fiveam/blob/3ba1300a9dd6bafdaef2af76d261d73bdf7e4bf0/src/run.lisp)\nrerun the second and third previous selections.\nThese rerun functions do not shift their history. To enter the debugger on an\nunexpected condition, run the test with `debug!`:\n\n```lisp\n(fiveam:debug! 'libtmux.tests::record-codec-preserves-text-and-presence)\n```\n\nFiveAM supplies `retest` and `ignore` restarts while the condition is active.\nUse the complete unit suite after a focused change:\n\n```lisp\n(fiveam:run! 'libtmux.tests::unit)\n```\n\nLoad and run the separate native-query suite without contacting tmux:\n\n```lisp\n(asdf:test-system \"libtmux/query\")\n```\n\nFor interactive redefinition, load the test system explicitly:\n\n```lisp\n(asdf:load-system \"libtmux/tests/query\")\n```\n\n```lisp\n(fiveam:run! 'libtmux.tests::query)\n```\n\nThe optional systems keep their own suites and remain local:\n\n```lisp\n(asdf:test-system \"libtmux/regex\")\n```\n\n```lisp\n(asdf:test-system \"libtmux/json\")\n```\n\nThe pinned FiveAM 1.4.3 compiles test bodies at definition time by default.\nAfter changing a macro used by a test, re-evaluate that test definition too.\nFor a test specifically studying macro redefinition, `def-test` supports the\n`:compile-at :run-time` option. The upstream homepage's older macro-redefinition\ndescription does not describe this default. See the pinned\n[test definitions](https://github.com/lispci/fiveam/blob/3ba1300a9dd6bafdaef2af76d261d73bdf7e4bf0/src/test.lisp)\nand [runner](https://github.com/lispci/fiveam/blob/3ba1300a9dd6bafdaef2af76d261d73bdf7e4bf0/src/run.lisp).\n\n`run!` returns a Boolean; scripts must check it to return a failing process\nstatus. Unknown names and entirely skipped selections can report no failures,\nso select a known test or suite and read the check and skip counts. The shipped\nrunner selects declared suites and checks the result before exiting.\n\nThe mid loop runs the five local suites in one image, loading each system just\nbefore its suite. Core and query tests therefore run before optional libraries\nload. A failure stops the remaining suites. Package-consumer checks still use\nisolated images to verify loading boundaries.\nLive CLI apply/reapply runs through the extracted package's entry point in\n`mise run package-examples`; core workspace behavior stays in integration.\n\n## Run external tests\n\nRun all local checks without contacting tmux:\n\n```console\n$ mise run check\n```\n\nRun only the native-query inner loop:\n\n```console\n$ mise run query\n```\n\nRun the regex or JSON inner loop:\n\n```console\n$ mise run regex\n```\n\n```console\n$ mise run json\n```\n\nRun the owned live fixtures with one explicit tmux executable:\n\n```console\n$ LIBTMUX_TEST_TMUX=/path/to/tmux mise run integration\n```\n\nThis outer loop uses a dedicated process owner and subreaper. It checks that\nno test-owned child or daemon survives the Lisp image. Tests coordinate through\nFIFOs, semaphores, pidfds and application signals. A send acknowledgment alone\ndoes not establish application consumption. See [verification](../verification.md)\nfor the loop budgets and current coverage.\n\n## GitHub Actions\n\nThe workflow uses the same mise tasks, pinned SBCL/ASDF, Qlot lock and FiveAM\nsuites as local development. The supported tmux range is 3.3a through 3.8,\nincluding every intermediate release. CI samples only the two endpoints to\nreduce build time; that selection does not narrow compatibility. It uses one\nlanguage version: the latest stable SBCL pin in\n[.tool-versions](../.tool-versions), currently 2.6.10. Pushes to `master`, pull\nrequests and manual runs check tmux 3.3a and 3.8. Unit tests cover\nrejection of plain 3.3 without another tmux build. The explicit Ubuntu 26.04\nimage supplies the Linux capabilities required by the process backend.\n\nRun the same endpoint checks manually:\n\n```console\n$ gh workflow run tests.yml \\\n --ref master\n```\n\nQlot dependencies use a cache keyed by the toolchain configuration and lock.\nIt contains both `.qlot` and Qlot's shared cache, because installed systems\nlink to source directories outside the project.\nTmux builds use exact keys containing source/archive identities, build recipe,\nrunner image, architecture, compiler and dependency versions. Runtime libraries\nare installed before restoring a binary. Reuse checks provenance, binary hash,\nELF architecture and the exact version. A rejected cached artifact is rebuilt.\nOnly a build that passes its Lisp checks is saved.\n\nWorkflow artifacts retain build provenance, logs and the isolated package\nevidence. A passing save step alone does not prove that GitHub stored a cache;\na second run of the same revision must restore the exact entry and report\n`reused: true` with no configure or make commands. GitHub cache entries are\nimmutable; rebuilding a rejected exact hit cannot replace that entry.\n" + "content": "# Testing\n\nRun local tests in FiveAM at the REPL. Run live tmux tests through the\nseparate command, so the process owner can check fixture cleanup.\n\n## Run and redefine a local test\n\nInstall the pinned tools and locked dependencies following the\n[contributor guide](../.github/CONTRIBUTING.md), then start a REPL:\n\n```console\n$ mise run repl\n```\n\nLoad the unit tests:\n\n```lisp\n(asdf:load-system \"libtmux/tests\")\n```\n\nRun one existing test:\n\n```lisp\n(fiveam:run! 'libtmux.tests::record-codec-preserves-text-and-presence)\n```\n\nRe-evaluate its changed test definition in the editor, then rerun that name:\n\n```lisp\n(fiveam:!)\n```\n\n[`fiveam:!!`](https://github.com/lispci/fiveam/blob/3ba1300a9dd6bafdaef2af76d261d73bdf7e4bf0/src/run.lisp)\nand [`fiveam:!!!`](https://github.com/lispci/fiveam/blob/3ba1300a9dd6bafdaef2af76d261d73bdf7e4bf0/src/run.lisp)\nrerun the second and third previous selections without shifting the history.\nTo enter the debugger on an unexpected condition, use `debug!`:\n\n```lisp\n(fiveam:debug! 'libtmux.tests::record-codec-preserves-text-and-presence)\n```\n\nFiveAM supplies `retest` and `ignore` restarts while the condition is active.\nAfter a focused change, run the complete unit suite:\n\n```lisp\n(fiveam:run! 'libtmux.tests::unit)\n```\n\nRun the native-query suite without contacting tmux:\n\n```lisp\n(asdf:test-system \"libtmux/query\")\n```\n\nFor interactive redefinition, load the test system explicitly:\n\n```lisp\n(asdf:load-system \"libtmux/tests/query\")\n```\n\n```lisp\n(fiveam:run! 'libtmux.tests::query)\n```\n\nThe optional systems keep their own suites and remain local:\n\n```lisp\n(asdf:test-system \"libtmux/regex\")\n```\n\n```lisp\n(asdf:test-system \"libtmux/json\")\n```\n\nFiveAM compiles test bodies at definition time by default.\n\n- After changing a macro a test uses, re-evaluate that test definition too.\n- To study macro redefinition, `def-test` accepts `:compile-at :run-time`.\n- Upstream's homepage describes older behavior. See the pinned\n [test definitions](https://github.com/lispci/fiveam/blob/3ba1300a9dd6bafdaef2af76d261d73bdf7e4bf0/src/test.lisp)\n and [runner](https://github.com/lispci/fiveam/blob/3ba1300a9dd6bafdaef2af76d261d73bdf7e4bf0/src/run.lisp).\n\n`run!` returns a Boolean.\n\n- Scripts must check it to return a failing process status.\n- Unknown names and entirely skipped selections can report no failures. Select\n a known test or suite and read the check and skip counts.\n- The shipped runner selects declared suites and checks the result before\n exiting.\n\nThe mid loop runs the five local suites in one image.\n\n- Each system loads just before its suite, so core and query tests run before\n optional libraries load.\n- A failure stops the remaining suites.\n- Package-consumer checks still use isolated images to verify loading\n boundaries.\n- Live CLI apply/reapply runs through the extracted package's entry point in\n `mise run package-examples`. Core workspace behavior stays in integration.\n\n## Run external tests\n\nRun all local checks without contacting tmux:\n\n```console\n$ mise run check\n```\n\nRun only the native-query inner loop:\n\n```console\n$ mise run query\n```\n\nRun the regex or JSON inner loop:\n\n```console\n$ mise run regex\n```\n\n```console\n$ mise run json\n```\n\nRun the owned live fixtures with one explicit tmux executable:\n\n```console\n$ LIBTMUX_TEST_TMUX=/path/to/tmux mise run integration\n```\n\nThis outer loop uses a dedicated process owner and subreaper.\n\n- No test-owned child or daemon may survive the Lisp image.\n- Tests wait on application signals. A send acknowledgment alone does not show\n the application consumed the input.\n- Loop budgets and coverage: [verification](../verification.md).\n\n## GitHub Actions\n\nCI runs the same mise tasks and FiveAM suites as local development, with the\ntoolchain in [.tool-versions](../.tool-versions) and the Qlot lock.\n\n- Pushes to `master`, pull requests and manual runs check tmux 3.3a and 3.8,\n the two ends of the supported range. Intermediate releases are supported but\n not built in CI.\n- Unit tests cover rejection of plain 3.3 without another tmux build.\n- The runner image must meet the\n [process requirements](transport.md#supported-process-boundary).\n\nRun the same endpoint checks manually:\n\n```console\n$ gh workflow run tests.yml \\\n --ref master\n```\n\nCaches:\n\n- Qlot dependencies: keyed by toolchain configuration and lock. The cache holds\n both `.qlot` and Qlot's shared cache, because installed systems link to\n sources outside the project.\n- tmux builds: exact keys from source/archive identities, build recipe, runner\n image, architecture, compiler and dependency versions. Runtime libraries are\n installed before a binary is restored.\n- Reuse checks provenance, binary hash, ELF architecture and the exact version.\n A rejected cached artifact is rebuilt.\n- Only a build that passes its Lisp checks is saved.\n- GitHub cache entries are immutable. Rebuilding a rejected exact hit cannot\n replace that entry.\n- A passing save step does not prove GitHub stored the cache. A second run of\n the same revision must restore the exact entry and report `reused: true`\n with no configure or make commands.\n- Workflow artifacts keep build provenance, logs and the isolated package\n evidence.\n" }, { "path": "verification.md", - "content": "# Verification\n\nRun commands from the repository root after `mise install` and `mise run setup`.\nProvisioning uses the network; verification does not install dependencies.\n\n`mise run integration` runs transport, core operations, control, decoded\nconfiguration and workspace groups in separate serialized child processes. Each\nretains the same 60-second cap and owned-process cleanup checks. ASDF test-op\nincludes the named integration groups too.\n\n| Command | Tier | Current coverage |\n| --- | --- | --- |\n| `mise run unit` | Inner | Resource scopes, finite inputs, row/value decoding, graph relations, configuration schema/scope dispatch and defensive ownership |\n| `mise run query` | Inner | Scalar/reference agreement, relations, QuerySets, malformed data, limits, ownership and cardinality |\n| `mise run regex` | Inner | Optional CL-PPCRE search/full-match semantics, options, ownership and retained causes |\n| `mise run json` | Inner | Optional bounded filter documents, allowlists, false/empty/null distinctions and regex opt-in |\n| `mise run control` | Inner | Local codecs, byte fidelity, queued/active cancellation, terminal races, CLOS resource identity, live-witness admission, raw notification/reply routing and lexical cleanup; no live connection |\n| `tools/lisp.sh tools/test.lisp control-integration` | Outer | Persistent requests/events on 3.8, raw topology/configuration/flow notifications, binary pane output, reply separation, public cancellation, environment preservation, explicit reconnect/recapture without replay, cutover cancellation/cleanup recovery and 3.3a pre-launch rejection |\n| `tools/lisp.sh tools/test.lisp configuration-integration` | Outer | Decoded reads on both tmux endpoints, false/absence, sparse keys, inheritance/visibility races, partial evidence, cancellation and truncation |\n| `mise run check` | Mid | Source whitespace, all local unit suites, exported docstrings, generated references, excerpts and local documentation links |\n| `mise run lint-workflows` | Mid | GitHub Actions syntax, expressions and shell checks |\n| `mise run integration` | Outer | Bounded transport, cancellation/cleanup, managed daemon startup/shutdown and failure recovery, linked graphs, attached clients, daemon replacement, named operations, typed configuration reads/mutations, exact target/server termination and tutorial failure cleanup |\n| `mise run package` | Outer | Source archive plus isolated core/query/regex/JSON/control consumers and dependency-boundary checks |\n| `mise run examples` | Outer | Shipped Lisp recipes, all tutorial Lisp blocks, literal console setup/cleanup, worker consumption signals, optional control streaming and owned daemon cleanup |\n| `mise run package-examples` | Outer | Archive-local links, examples, and the installed workspace CLI's validation, preview, apply, reconciliation and stopped-work inspection |\n| `mise run docs` | Maintenance | Regenerate API signatures/docstrings, condition hierarchy, applicable models, fields, modules and executable excerpts |\n\nPerformance uses a separate tier: `mise run benchmark` compares identical native\nreads and measures graph acquisition separately. It is not run by CI or these\ntest loops. The mid loop includes only the reporter's four critical evidence\nchecks. See the [benchmark guide](docs/benchmarks.md) for sampling, owned cleanup,\nsource identity, resource accounting and interpretation limits.\n\nThese commands exercise the implemented native core; they do not establish\nfull-suite compatibility. New operation tests extend the integration suite as\nthose APIs are implemented. `check` detects generated-document drift without\nrewriting files. `docs` deliberately rewrites generated pages and excerpts.\nComplete catalog reads exercise many native commands. Each of the named\nintegration processes retains the same 60-second ceiling; the outer task runs\nevery group and cleanup checks.\nNo formatting tool is prescribed for Common Lisp; source checks and SBCL\ncompilation catch whitespace and reader/compiler errors respectively.\nThe [testing guide](docs/testing.md) describes FiveAM's interactive workflow and\nthe exact tmux build cache. Hosted results must identify the tested commit;\nlocal package or integration success does not establish a hosted CI result.\n\n## Recorded local compatibility\n\nThe [native matrix record](data/native-compatibility.json) identifies the exact\nsource revision, native source/binary identities, runtime and per-group results.\nOn 2026-11-10 UTC, the eleven native integration groups, including owned\nworkspace application, publication, races and the public API/CLI, passed on all twelve\nsupported releases: 3.3a, 3.4, 3.5, 3.5a, 3.6, 3.6a, 3.6b, 3.7, 3.7a, 3.7b,\n3.7c and 3.8. The native sources and Lisp fixtures at\n[07969d0](https://github.com/libtmux/libtmux-lisp/tree/07969d0ab3475cc2f41c060d16897fc00f6fb87c)\nare identical at the example-harness correction\n[0df49e4](https://github.com/libtmux/libtmux-lisp/tree/0df49e43c1f728e122d907287d55b3f4953024f3).\nEach row records its actual revision and executor. Ten intermediate releases\nran in five local two-cell shards, each under 102 seconds including startup.\nThe [hosted endpoint run](https://github.com/libtmux/libtmux-lisp/actions/runs/42762903411)\npassed on 3.3a and 3.8, including extracted examples and cleanup.\n\nEvery cell checked owned-process cleanup. Optional control cases are explicitly\nskipped below their 3.8 floor; older-daemon refusal is tested. The record retains\neach group's actual check, pass and skip counts.\n\nThis record covers the implemented native integration surface at its pinned\nrevision. It does not establish completion of the unfinished suite. CI continues\nto test only 3.3a and 3.8; source-archive consumers and complete examples have\nseparate endpoint evidence. The record's timings are verification costs, not\nperformance measurements or latency guarantees.\n\n## Source archives and consumers\n\nThe package command writes `dist/libtmux-source.tar.gz` and\n`dist/package-evidence.json`. The consumer loads the extracted artifact from a\ntemporary directory with an isolated ASDF source registry and output cache.\nIt checks that query, regex, JSON and thread packages were not loaded by core,\nthen loads `libtmux/query` separately without pulling those optional libraries.\nSeparate consumers load and exercise `libtmux/regex` and `libtmux/json` through\nthe same locked dependency setup.\nThe artifact includes its setup pins, tools, guides and executable examples.\n`package-examples` checks its local links and runs its own copy of the example\nrunner with an isolated core registry. `dist/examples-evidence.json` records\nthe runtime versions, source hashes, tutorial block count and cleanup result.\nThe runner reaps core recipes and the complete owned workspace workflow in\nseparate children, each capped at 60 seconds. It writes combined passing\nevidence only after both current groups pass with matching source and runtime\nidentities; an earlier invocation cannot supply a missing group.\nThe installed workspace entry point reads both shipped schemas. Legacy `/1`\nchecks create the declared topology and report zero mutations on repeat apply.\nOwned `/2` checks create recorded physical identities, preview and apply explicit\nreconciliation, preserve those identities, and inspect stopped work without\nrepeating it. The complete native constructor program also verifies shell\noutput, environment values, retained observations and an unrelated session.\nThese endpoint checks qualify their recorded inputs; they do not establish\nthe entire suite's current twelve-release qualification or product completion.\nThe [tutorial](docs/tutorial.md) explains the recipes and expected values.\n\nSelect a tmux binary explicitly when exercising a compatibility cell:\n\n```console\n$ LIBTMUX_TEST_TMUX=/path/to/tmux mise run integration\n```\n\nSupport covers every tmux release from 3.3a through 3.8. CI uses the latest\nstable SBCL pin and tests only tmux 3.3a and 3.8 to reduce execution time.\nIntermediate releases remain supported; they are not additional CI jobs.\n\nThe fixture uses a unique `libtmux-lisp-` temporary directory, an explicit socket\npath and `/dev/null` configuration. Child environments omit `TMUX` and\n`TMUX_PANE`. A pidfd verifies termination before owned files are removed.\nTests never address the default server. Attached-client tests launch ordinary\nPTY clients through SBCL's fork path, without control mode. They join captured\nPIDs to retained child pidfds, observe native SIGTSTP stops, and use an owned\nbounded FIFO lock command. Request acknowledgements and frontend effects have\nseparate assertions. Partial acquisition and nonlocal exits check cleanup.\nSession/server locking uses two ordinary frontends in separate sessions. Native\nsuspended flags establish recipient scope, and independent FIFO readiness proves\neach requested lock program started before owned cleanup releases it.\nWait-channel tests prove a waiter is queued through native listing before\ncancellation, then inspect the daemon's remaining queue. Lost lock\nacknowledgements remain separate from queued-waiter disposal; neither closing\nnor cancellation automatically releases a granted lock.\nMessage-printing tests distinguish literal and explicit format input, physical\nand link context, foreign authority, versioned intermediate limits and\nafter-hook text in the ordinary printer stream.\nKey-binding tests send bytes through an owned ordinary PTY frontend. Native\nhook/channel acknowledgements prove stored command execution and order a\nsecond key after removal. Direct fixture reads verify literal values and\nparse-time environment effects retained after a failed binding.\nPrinter profiles distinguish tmux 3.7 through 3.7c's single-row status routing\nand missing-key success from normal multi-row output and other releases.\nServer-access fixtures use the existing `nobody` account and its primary group\non private sockets, without changing OS identities or permissions. They prove\nentry lifecycle, literal names, group gating and tmux 3.8's recomputation of an\nunrelated owner's frontend flags. Cross-user authorization, connection and\nrevocation remain unverified.\n\nThe integration runner is a dedicated child-process subreaper. It verifies\nthat no test-owned worker or tmux daemon survives the test image, including an\ninjected tutorial failure before its Lisp termination call. Production loading\ndoes not change the application's process-reaping policy. Readiness FIFOs,\nsemaphores and pidfds coordinate tests without polling sleeps.\n\nUnit tests cover floor rejection without adding a third tmux build to CI.\nFor an optional maintenance probe, use the exact 3.3 executable:\n\n```console\n$ mise exec -- tools/lisp.sh tools/check-floor.lisp /path/to/tmux-3.3/tmux\n```\n\nThis check asserts the executable's release, expects `unsupported-tmux`, and\nchecks that opening the client created no daemon socket.\n\nBroader stream/retained-memory qualification, source filtering, shared-site\nrendering, broader benchmarks and\nintegrated acceptance of all required capabilities on both CI endpoints remain\npending. MCP is excluded by policy. The\n[capability table](docs/capabilities.md) separates implemented behavior from\nthose gaps. A passing core package or example does not cover them.\n" + "content": "# Verification\n\nRun commands from the repository root after `mise install` and `mise run setup`.\nProvisioning uses the network; verification does not install dependencies.\n\n`mise run integration` runs transport, core operations, control, decoded\nconfiguration and workspace groups in separate serialized child processes. Each\nretains the same 60-second cap and owned-process cleanup checks. ASDF test-op\nincludes the named integration groups too.\n\n| Command | Tier | Current coverage |\n| --- | --- | --- |\n| `mise run unit` | Inner | Resource scopes, finite inputs, row/value decoding, graph relations, configuration schema/scope dispatch and defensive ownership |\n| `mise run query` | Inner | Scalar/reference agreement, relations, QuerySets, malformed data, limits, ownership and cardinality |\n| `mise run regex` | Inner | Optional CL-PPCRE search/full-match semantics, options, ownership and retained causes |\n| `mise run json` | Inner | Optional bounded filter documents, allowlists, false/empty/null distinctions and regex opt-in |\n| `mise run control` | Inner | Local codecs, byte fidelity, queued/active cancellation, terminal races, CLOS resource identity, live-witness admission, raw notification/reply routing and lexical cleanup; no live connection |\n| `tools/lisp.sh tools/test.lisp control-integration` | Outer | Persistent requests/events on 3.8, raw topology/configuration/flow notifications, binary pane output, reply separation, public cancellation, environment preservation, explicit reconnect/recapture without replay, cutover cancellation/cleanup recovery and 3.3a pre-launch rejection |\n| `tools/lisp.sh tools/test.lisp configuration-integration` | Outer | Decoded reads on both tmux endpoints, false/absence, sparse keys, inheritance/visibility races, partial evidence, cancellation and truncation |\n| `mise run check` | Mid | Source whitespace, all local unit suites, exported docstrings, generated references, excerpts and local documentation links |\n| `mise run lint-workflows` | Mid | GitHub Actions syntax, expressions and shell checks |\n| `mise run integration` | Outer | Bounded transport, cancellation/cleanup, managed daemon startup/shutdown and failure recovery, linked graphs, attached clients, daemon replacement, named operations, typed configuration reads/mutations, exact target/server termination and tutorial failure cleanup |\n| `mise run package` | Outer | Source archive plus isolated core/query/regex/JSON/control consumers and dependency-boundary checks |\n| `mise run examples` | Outer | Shipped Lisp recipes, all tutorial Lisp blocks on a daemon the tutorial starts and stops itself, worker consumption signals, optional control streaming and owned daemon cleanup |\n| `mise run package-examples` | Outer | Archive-local links, examples, and the installed workspace CLI's validation, preview, apply, reconciliation and stopped-work inspection |\n| `mise run docs` | Maintenance | Regenerate API signatures/docstrings, condition hierarchy, applicable models, fields, modules and executable excerpts |\n\nPerformance uses a separate tier: `mise run benchmark` compares identical native\nreads and measures graph acquisition separately. It is not run by CI or these\ntest loops. The mid loop includes only the reporter's four critical evidence\nchecks. See the [benchmark guide](docs/benchmarks.md) for sampling, owned cleanup,\nsource identity, resource accounting and interpretation limits.\n\nThese commands exercise the implemented native core; they do not establish\nfull-suite compatibility. New operation tests extend the integration suite as\nthose APIs are implemented. `check` detects generated-document drift without\nrewriting files. `docs` deliberately rewrites generated pages and excerpts.\nComplete catalog reads exercise many native commands. Each of the named\nintegration processes retains the same 60-second ceiling; the outer task runs\nevery group and cleanup checks.\nNo formatting tool is prescribed for Common Lisp; source checks and SBCL\ncompilation catch whitespace and reader/compiler errors respectively.\nThe [testing guide](docs/testing.md) describes FiveAM's interactive workflow and\nthe exact tmux build cache. Hosted results must identify the tested commit;\nlocal package or integration success does not establish a hosted CI result.\n\n## Recorded local compatibility\n\nThe [native matrix record](data/native-compatibility.json) identifies the exact\nsource revision, native source/binary identities, runtime and per-group results.\nOn 2026-11-10 UTC, the eleven native integration groups, including owned\nworkspace application, publication, races and the public API/CLI, passed on all twelve\nsupported releases: 3.3a, 3.4, 3.5, 3.5a, 3.6, 3.6a, 3.6b, 3.7, 3.7a, 3.7b,\n3.7c and 3.8. The native sources and Lisp fixtures at\n[07969d0](https://github.com/libtmux/libtmux-lisp/tree/07969d0ab3475cc2f41c060d16897fc00f6fb87c)\nare identical at the example-harness correction\n[0df49e4](https://github.com/libtmux/libtmux-lisp/tree/0df49e43c1f728e122d907287d55b3f4953024f3).\nEach row records its actual revision and executor. Ten intermediate releases\nran in five local two-cell shards, each under 102 seconds including startup.\nThe [hosted endpoint run](https://github.com/libtmux/libtmux-lisp/actions/runs/42762903411)\npassed on 3.3a and 3.8, including extracted examples and cleanup.\n\nEvery cell checked owned-process cleanup. Optional control cases are explicitly\nskipped below their 3.8 floor; older-daemon refusal is tested. The record retains\neach group's actual check, pass and skip counts.\n\nThis record covers the implemented native integration surface at its pinned\nrevision. It does not establish completion of the unfinished suite. CI continues\nto test only 3.3a and 3.8; source-archive consumers and complete examples have\nseparate endpoint evidence. The record's timings are verification costs, not\nperformance measurements or latency guarantees.\n\n## Source archives and consumers\n\nThe package command writes `dist/libtmux-source.tar.gz` and\n`dist/package-evidence.json`. The consumer loads the extracted artifact from a\ntemporary directory with an isolated ASDF source registry and output cache.\nIt checks that query, regex, JSON and thread packages were not loaded by core,\nthen loads `libtmux/query` separately without pulling those optional libraries.\nSeparate consumers load and exercise `libtmux/regex` and `libtmux/json` through\nthe same locked dependency setup.\nThe artifact includes its setup pins, tools, guides and executable examples.\n`package-examples` checks its local links and runs its own copy of the example\nrunner with an isolated core registry. `dist/examples-evidence.json` records\nthe runtime versions, source hashes, tutorial block count and cleanup result.\nThe runner reaps core recipes and the complete owned workspace workflow in\nseparate children, each capped at 60 seconds. It writes combined passing\nevidence only after both current groups pass with matching source and runtime\nidentities; an earlier invocation cannot supply a missing group.\nThe installed workspace entry point reads both shipped schemas. Legacy `/1`\nchecks create the declared topology and report zero mutations on repeat apply.\nOwned `/2` checks create recorded physical identities, preview and apply explicit\nreconciliation, preserve those identities, and inspect stopped work without\nrepeating it. The complete native constructor program also verifies shell\noutput, environment values, retained observations and an unrelated session.\nThese endpoint checks qualify their recorded inputs; they do not establish\nthe entire suite's current twelve-release qualification or product completion.\nThe [tutorial](docs/tutorial.md) explains the recipes and expected values.\n\nSelect a tmux binary explicitly when exercising a compatibility cell:\n\n```console\n$ LIBTMUX_TEST_TMUX=/path/to/tmux mise run integration\n```\n\nSupport covers every tmux release from 3.3a through 3.8. CI uses the latest\nstable SBCL pin and tests only tmux 3.3a and 3.8 to reduce execution time.\nIntermediate releases remain supported; they are not additional CI jobs.\n\nThe fixture uses a unique `libtmux-lisp-` temporary directory, an explicit socket\npath and `/dev/null` configuration. Child environments omit `TMUX` and\n`TMUX_PANE`. A pidfd verifies termination before owned files are removed.\nTests never address the default server. Attached-client tests launch ordinary\nPTY clients through SBCL's fork path, without control mode. They join captured\nPIDs to retained child pidfds, observe native SIGTSTP stops, and use an owned\nbounded FIFO lock command. Request acknowledgements and frontend effects have\nseparate assertions. Partial acquisition and nonlocal exits check cleanup.\nSession/server locking uses two ordinary frontends in separate sessions. Native\nsuspended flags establish recipient scope, and independent FIFO readiness proves\neach requested lock program started before owned cleanup releases it.\nWait-channel tests prove a waiter is queued through native listing before\ncancellation, then inspect the daemon's remaining queue. Lost lock\nacknowledgements remain separate from queued-waiter disposal; neither closing\nnor cancellation automatically releases a granted lock.\nMessage-printing tests distinguish literal and explicit format input, physical\nand link context, foreign authority, versioned intermediate limits and\nafter-hook text in the ordinary printer stream.\nKey-binding tests send bytes through an owned ordinary PTY frontend. Native\nhook/channel acknowledgements prove stored command execution and order a\nsecond key after removal. Direct fixture reads verify literal values and\nparse-time environment effects retained after a failed binding.\nPrinter profiles distinguish tmux 3.7 through 3.7c's single-row status routing\nand missing-key success from normal multi-row output and other releases.\nServer-access fixtures use the existing `nobody` account and its primary group\non private sockets, without changing OS identities or permissions. They prove\nentry lifecycle, literal names, group gating and tmux 3.8's recomputation of an\nunrelated owner's frontend flags. Cross-user authorization, connection and\nrevocation remain unverified.\n\nThe integration runner is a dedicated child-process subreaper. It verifies\nthat no test-owned worker or tmux daemon survives the test image, including an\ninjected tutorial failure before its Lisp termination call. Production loading\ndoes not change the application's process-reaping policy. Readiness FIFOs,\nsemaphores and pidfds coordinate tests without polling sleeps.\n\nUnit tests cover floor rejection without adding a third tmux build to CI.\nFor an optional maintenance probe, use the exact 3.3 executable:\n\n```console\n$ mise exec -- tools/lisp.sh tools/check-floor.lisp /path/to/tmux-3.3/tmux\n```\n\nThis check asserts the executable's release, expects `unsupported-tmux`, and\nchecks that opening the client created no daemon socket.\n\nBroader stream/retained-memory qualification, source filtering, shared-site\nrendering, broader benchmarks and\nintegrated acceptance of all required capabilities on both CI endpoints remain\npending. The\n[capability table](docs/capabilities.md) separates implemented behavior from\nthose gaps. A passing core package or example does not cover them.\n" }, { "path": "docs/workspace-owned.md", - "content": "# Owned workspaces\n\nUse `libtmux/workspace` to create a declared workspace, retain logical-to-physical\nIDs, and explicitly reconcile permitted changes. Acquisition reads tmux;\nplanning over acquired state is local. Application reacquires and verifies its\ntargets before each operation.\n\n[Workspace API](workspace-api.md) · [System README](../workspace/README.md) ·\n[Ownership protocol](design/workspace-v2.md) · [Legacy topology reuse](workspaces.md)\n\n## Run the complete program\n\nComplete the [source setup](../README.md#install-from-source), including locked\noptional dependencies. From the checkout root:\n\n```console\n$ mise exec -- tools/lisp.sh examples/owned-workspace.lisp\n```\n\nThe [program](../examples/owned-workspace.lisp) owns a private daemon and closes\nits client and daemon on every exit. It checks native/file equivalence, printed\nshell output, environment values, identity-preserving reconciliation, no-op\nreapplication, retained observations and an unrelated session. It deliberately\nends one apply with a bad layout checksum, then inspects the stopped work.\nSuccess prints `OWNED WORKSPACE PASS`.\n\nThe program uses a bounded raw notification wait within its owned daemon to\nrun on tmux 3.3a through 3.8. The shell signals after printing its label; this\ndoes not prove a later application consumed input. The named\n[`wait-for`](api.md#wait-for-function) waiting contract requires tmux 3.8+.\n\n## Start with native data\n\nLoad the optional system after registering this checkout with ASDF:\n\n```lisp\n(asdf:load-system \"libtmux/workspace\")\n```\n\nThis pure constructor function comes from the complete program:\n\n\n```lisp\n(defun owned-description ()\n \"Describe two windows and three panes without contacting tmux.\"\n (libtmux.workspace:make-workspace\n '(:schema \"libtmux.lisp.workspace/2\" :id \"demo-workspace\"\n :session\n (:id \"main\" :name \"owned-demo\"\n :environment #((\"DEMO_LABEL\" . \"hello from Common Lisp\"))\n :windows\n #((:id \"code\" :name \"code\" :index 2 :layout :tiled\n :panes #((:id \"shell\" :command #(\"/bin/cat\"))\n (:id \"repl\" :command #(\"/bin/cat\"))))\n (:id \"logs\" :name \"logs\" :index 5\n :panes #((:id \"tail\" :command #(\"/bin/cat\")))))))))\n```\n\n\nThe equivalent [JSON document](../examples/owned-workspace.json) has two windows\nand three panes. The example compares both declarations before binding its\nrun-specific notification environment. `:command` is literal argv;\n`:shell-command` explicitly requests shell source. Parsing never executes either.\n\nThe root, session, windows and panes have bounded logical IDs. Names and indexes\ncan change without replacing those IDs. Captured tmux `$`, `@` and `%` IDs are\nseparate physical identities; application records bind them to the declaration\nand observed daemon. Input and projected data own their mutable containers and\nstrings.\n\n## Acquire, preview and apply\n\nIn the remaining function excerpts, the program declares package-local `tm`\nfor `libtmux` and `ws` for `libtmux.workspace`.\n[`fetch-workspace-state`](workspace-api.md#fetch-workspace-state-function)\nacquires ready owned state or proven vacancy. The following function previews\nlocally and then applies through the same explicit client:\n\n\n```lisp\n(defun apply-owned-description (client workspace)\n \"Acquire, preview and apply explicitly; return the result and its owned record.\"\n (let* ((state (ws:fetch-workspace-state client workspace))\n (preview (ws:plan-workspace workspace state)))\n (assert (getf (ws:plan-data preview) :publish-p))\n (let ((result (ws:apply-workspace client workspace :total-timeout 30)))\n (assert (eq :succeeded (getf (ws:result-data result) :publication-status)))\n (values result (getf (ws:result-data result) :record)))))\n```\n\n\nThe [`plan-data`](workspace-api.md#plan-data-function) plist separates changes,\ndrift, conflicts and informational context. `:publish-p` says whether the plan\nrequires publication. An empty step vector alone does not establish a no-op:\nmetadata-only changes can still need publication.\n\nA preview is observational data. It grants no execution authority; apply\nreacquires state and plans again. Unowned sessions, invalid mappings and busy\nclaims are refused. A matching session name does not grant ownership.\n\n## Reconcile explicitly\n\nDefault application refuses declaration changes or captured drift. Pass\n`:reconcile t` to preview and apply permitted additions, renames, layouts and\nmetadata changes:\n\n\n```lisp\n(defun reconcile-owned-description (client workspace)\n \"Preview permitted edits, then reacquire and apply them without replacing IDs.\"\n (let* ((state (ws:fetch-workspace-state client workspace))\n (preview (ws:plan-workspace workspace state :reconcile t)))\n (assert (getf (ws:plan-data preview) :publish-p))\n (ws:apply-workspace client workspace :reconcile t :total-timeout 30)))\n```\n\n\nThe program renames the session and code window, adds a pane and changes the\nlayout. Assertions establish that the original session, window and first pane\nretain their physical IDs. Earlier observations retain their captured names.\nThe unrelated session remains present.\n\nReconciliation preserves unrelated entities; it does not adopt an unowned\nsession, remove extra work, steal a busy claim or replace existing pane\nprocesses. Existing command, working-directory and environment changes have\nthe explicit refusals described in the [protocol](design/workspace-v2.md).\nNamed layouts and custom layout descriptions use the core\n[`select-layout`](api.md#select-layout-function) contract, including the live\ntmux 3.8 minimum for custom JSON layouts.\n\n## Keep result and failure evidence\n\n[`result-data`](workspace-api.md#result-data-function) returns two values:\nowned data and `t` for schema `/2`, or `nil, nil` for legacy `/1`. Owned data\nretains phase, mappings, selected/candidate/observed metadata, the selected\nrecord and publication status. `result-created-p` reports creation of the owned\nsession. An unchanged application still acquires state and retains its reads.\n\n`result-snapshot` provides the replacement observation. `result-outcomes`\nreturns chronological command outcomes; `result-causes` retains original\nconditions. These readers are local. A public\n[`workspace-apply-failed`](workspace-api.md#workspace-apply-failed-type)\nexposes the same evidence and the actual failed step where known.\n\nPublication is the final mutation. Failed observation after successful\npublication differs from failed or uncertain publication. Do not automatically\nrepeat an interrupted apply. Completed steps remain completed; an apply is\nnot a transaction.\n\nUse `:total-timeout` for one admission budget across acquisition, planning and\napplication. Per-operation timeout and output limits retain their own meanings;\nsynchronous preparation and cleanup can extend caller wall time.\n\n## Inspect stopped work\n\n[`inspect-workspace`](workspace-api.md#inspect-workspace-function) explicitly\nacquires diagnostic evidence even when ownership metadata is busy, incomplete\nor invalid. It returns a distinct inspection object, which cannot satisfy the\nplanning input type:\n\n\n```lisp\n(defun inspect-stopped-workspace (client workspace)\n \"Acquire incomplete ownership evidence; never retry the interrupted apply.\"\n (let* ((inspection (ws:inspect-workspace client workspace))\n (data (ws:inspection-data inspection)))\n (assert (getf data :complete-p))\n (assert (eq :busy (getf data :status)))\n data))\n```\n\n\nHere `:complete-p` means the inspection read completed. `:busy` describes the\ninterrupted writer, not readiness to plan or retry. The program uses a canonical\nlayout header with an incorrect checksum to exercise this path without\nterminating its daemon.\n\nOn a terminal read failure,\n[`workspace-inspection-error`](workspace-api.md#workspace-inspection-error-type)\nretains partial `inspection-evidence` and a separate `inspection-terminal`.\nInspection readers expose attempts, snapshots, outcomes and original causes;\nthey perform no further I/O. A `workspace-state-error` similarly retains partial\nready-state acquisition evidence without inventing vacancy.\n\n## Use the CLI\n\nThe separate `libtmux/workspace/cli` system ships\n[`bin/libtmux-workspace`](../bin/libtmux-workspace). Validation is local:\n\n```console\n$ bin/libtmux-workspace validate examples/owned-workspace.json\n```\n\nSuccess reports schema `libtmux.lisp.workspace/2`, ID `demo-workspace`, two\nwindows and three panes. Inspect the accepted option grammar:\n\n```console\n$ bin/libtmux-workspace --help\n```\n\n`plan FILE`, `apply FILE` and `inspect FILE` require `--socket-path PATH` for\nowned documents; `--program PROGRAM` selects the native tmux executable.\n`--reconcile` is a standalone flag for owned plan/apply only. Endpoint plan\nacquires state before previewing; inspect never mutates. Legacy `/1` additionally\nsupports an offline creation preview without an endpoint.\n\nExit codes are 0 for completed commands, 2 for invalid usage, and 1 for document\nor operational failure. Successful results use stdout; errors use stderr.\nA completed inspection exits 0 even when it reports busy or invalid ownership.\nTerminal failed inspection exits 1 with its retained evidence.\n\nOwned summaries add `data` using lowercase native keyword names. Boolean\nfields preserve `false`, optional absent values use `null`, and vectors use\narrays. Environment and session-group associations are objects. Application\nsummaries retain `commandOutcomes` and causes; failures retain outcomes and\nfailed-step data. Snapshots are available through the Lisp API rather than\nrecursive JSON graph expansion.\n\n`mise run examples` executes the CLI with cold compilation, creation, no-op\nreapply, explicit reconcile, failure reporting and busy inspection on an owned\nendpoint. `mise run package-examples` repeats these checks from the extracted\nsource artifact.\n" + "content": "# Owned workspaces\n\nUse `libtmux/workspace` to declare a workspace, keep logical-to-physical IDs,\nand reconcile permitted changes explicitly.\n\n- Acquisition reads tmux; planning over acquired state is local.\n- Application reacquires and verifies its targets before each operation.\n\n[Workspace API](workspace-api.md) · [System README](../workspace/README.md) ·\n[Ownership protocol](design/workspace-v2.md) · [Legacy topology reuse](workspaces.md)\n\n## Run the complete program\n\nComplete the [source setup](../README.md#install-from-source), including locked\noptional dependencies. From the checkout root:\n\n```console\n$ mise exec -- tools/lisp.sh examples/owned-workspace.lisp\n```\n\nThe [program](../examples/owned-workspace.lisp):\n\n- Owns a private daemon and closes its client and daemon on every exit.\n- Ends one apply on purpose with a bad layout checksum, then inspects the\n stopped work.\n- Waits on a raw notification inside its own daemon, so it runs on tmux 3.3a\n or newer. The signal does not prove a later application consumed input.\n- Prints `OWNED WORKSPACE PASS` on success.\n\nThe named [`wait-for`](api.md#wait-for-function) needs tmux 3.8 or newer.\n\n## Start with native data\n\nLoad the optional system after registering this checkout with ASDF:\n\n```lisp\n(asdf:load-system \"libtmux/workspace\")\n```\n\nThis pure constructor, from the complete program, never contacts tmux:\n\n\n```lisp\n(defun owned-description ()\n \"Describe two windows and three panes without contacting tmux.\"\n (libtmux.workspace:make-workspace\n '(:schema \"libtmux.lisp.workspace/2\" :id \"demo-workspace\"\n :session\n (:id \"main\" :name \"owned-demo\"\n :environment #((\"DEMO_LABEL\" . \"hello from Common Lisp\"))\n :windows\n #((:id \"code\" :name \"code\" :index 2 :layout :tiled\n :panes #((:id \"shell\" :command #(\"/bin/cat\"))\n (:id \"repl\" :command #(\"/bin/cat\"))))\n (:id \"logs\" :name \"logs\" :index 5\n :panes #((:id \"tail\" :command #(\"/bin/cat\")))))))))\n```\n\n\nThe equivalent [JSON document](../examples/owned-workspace.json) declares the\nsame two windows and three panes.\n\n- `:command` is literal argv.\n- `:shell-command` explicitly requests shell source.\n- Parsing never executes either.\n\nIDs and ownership:\n\n- The root, session, windows and panes carry bounded logical IDs.\n- Names and indexes can change without replacing an ID.\n- Captured tmux `$`, `@` and `%` IDs are separate physical identities.\n Application records bind them to the declaration and the observed daemon.\n- Input and projected data own their mutable containers and strings.\n\n## Acquire, preview and apply\n\nThe remaining excerpts use the package-local nicknames `tm` (`libtmux`) and\n`ws` (`libtmux.workspace`).\n[`fetch-workspace-state`](workspace-api.md#fetch-workspace-state-function)\nacquires ready owned state or proven vacancy. This function previews locally,\nthen applies through the same explicit client:\n\n\n```lisp\n(defun apply-owned-description (client workspace)\n \"Acquire, preview and apply explicitly; return the result and its owned record.\"\n (let* ((state (ws:fetch-workspace-state client workspace))\n (preview (ws:plan-workspace workspace state)))\n (assert (getf (ws:plan-data preview) :publish-p))\n (let ((result (ws:apply-workspace client workspace :total-timeout 30)))\n (assert (eq :succeeded (getf (ws:result-data result) :publication-status)))\n (values result (getf (ws:result-data result) :record)))))\n```\n\n\nThe [`plan-data`](workspace-api.md#plan-data-function) plist separates changes,\ndrift, conflicts and informational context.\n\n- `:publish-p` says whether the plan requires publication.\n- An empty step vector alone is not a no-op: metadata-only changes can still\n need publication.\n\nPreview rules:\n\n- A preview is observational and grants no execution authority. Apply\n reacquires state and plans again.\n- Apply refuses unowned sessions, invalid mappings and busy claims.\n- A matching session name does not grant ownership.\n\n## Reconcile explicitly\n\nDefault application refuses declaration changes or captured drift. Pass\n`:reconcile t` to preview and apply permitted additions, renames, layouts and\nmetadata changes:\n\n\n```lisp\n(defun reconcile-owned-description (client workspace)\n \"Preview permitted edits, then reacquire and apply them without replacing IDs.\"\n (let* ((state (ws:fetch-workspace-state client workspace))\n (preview (ws:plan-workspace workspace state :reconcile t)))\n (assert (getf (ws:plan-data preview) :publish-p))\n (ws:apply-workspace client workspace :reconcile t :total-timeout 30)))\n```\n\n\nThe program renames the session and code window, adds a pane and changes the\nlayout. The session, window and first pane keep their physical IDs; earlier\nobservations keep their captured names.\n\nReconciliation:\n\n- Preserves unrelated entities.\n- Does not adopt an unowned session, remove extra work, steal a busy claim or\n replace existing pane processes.\n- Gives existing command, working-directory and environment changes explicit\n refusals; see the [protocol](design/workspace-v2.md).\n- Applies named and custom layouts through\n [`select-layout`](api.md#select-layout-function). Custom JSON layouts need\n tmux 3.8 or newer.\n\n## Keep result and failure evidence\n\n[`result-data`](workspace-api.md#result-data-function) returns two values:\n\n- Owned data and `t` for schema `/2`; `nil, nil` for legacy `/1`.\n- Owned data holds phase, mappings, selected/candidate/observed metadata, the\n selected record and publication status.\n\nRelated readers:\n\n- `result-created-p` reports creation of the owned session.\n- An unchanged apply still acquires state and retains its reads.\n- `result-snapshot` is the replacement observation.\n- `result-outcomes` lists command outcomes in chronological order.\n- `result-causes` keeps the original conditions.\n- All of these readers are local.\n- A public\n [`workspace-apply-failed`](workspace-api.md#workspace-apply-failed-type)\n exposes the same evidence and the actual failed step where known.\n\nFailure rules:\n\n- Publication is the final mutation.\n- A failed observation after successful publication differs from failed or\n uncertain publication.\n- Do not repeat an interrupted apply automatically. Completed steps stay\n completed; an apply is not a transaction.\n\n`:total-timeout` sets one admission budget across acquisition, planning and\napplication.\n\n- Per-operation timeout and output limits keep their own meanings.\n- Synchronous preparation and cleanup can extend caller wall time.\n\n## Inspect stopped work\n\n[`inspect-workspace`](workspace-api.md#inspect-workspace-function) acquires\ndiagnostic evidence even when ownership metadata is busy, incomplete or\ninvalid. It returns an inspection object that cannot satisfy the planning input\ntype:\n\n\n```lisp\n(defun inspect-stopped-workspace (client workspace)\n \"Acquire incomplete ownership evidence; never retry the interrupted apply.\"\n (let* ((inspection (ws:inspect-workspace client workspace))\n (data (ws:inspection-data inspection)))\n (assert (getf data :complete-p))\n (assert (eq :busy (getf data :status)))\n data))\n```\n\n\n- `:complete-p` means the inspection read completed.\n- `:busy` describes the interrupted writer, not readiness to plan or retry.\n\nOn a terminal read failure,\n[`workspace-inspection-error`](workspace-api.md#workspace-inspection-error-type)\nretains partial `inspection-evidence` and a separate `inspection-terminal`.\n\n- Inspection readers expose attempts, snapshots, outcomes and original causes,\n and perform no further I/O.\n- `workspace-state-error` likewise retains partial ready-state acquisition\n evidence without inventing vacancy.\n\n## Use the CLI\n\nThe separate `libtmux/workspace/cli` system ships\n[`bin/libtmux-workspace`](../bin/libtmux-workspace). Validation is local:\n\n```console\n$ bin/libtmux-workspace validate examples/owned-workspace.json\n```\n\nSuccess reports schema `libtmux.lisp.workspace/2`, ID `demo-workspace`, two\nwindows and three panes. Show the accepted options:\n\n```console\n$ bin/libtmux-workspace --help\n```\n\nOptions:\n\n- `plan FILE`, `apply FILE` and `inspect FILE` need `--socket-path PATH` for\n owned documents.\n- `--program PROGRAM` selects the native tmux executable.\n- `--reconcile` is a standalone flag, for owned plan and apply only.\n- Endpoint `plan` acquires state before previewing; `inspect` never mutates.\n- Legacy `/1` also supports an offline creation preview with no endpoint.\n\nExit codes and streams:\n\n- `0`: command completed. `2`: invalid usage. `1`: document or operational\n failure.\n- Successful results use stdout; errors use stderr.\n- A completed inspection exits `0` even when it reports busy or invalid\n ownership.\n- A terminal failed inspection exits `1` with its retained evidence.\n\nOwned summaries add `data`:\n\n- Keys are lowercase native keyword names.\n- `false` stays `false`; absent optional values are `null`; vectors are arrays.\n- Environment and session-group associations are objects.\n- Application summaries keep `commandOutcomes` and causes. Failures keep\n outcomes and failed-step data.\n- Snapshots stay in the Lisp API; JSON does not expand the recursive graph.\n\nRun the CLI end to end against an owned endpoint:\n\n```console\n$ mise run examples\n```\n" }, { "path": "docs/workspaces.md", - "content": "# Declarative workspaces\n\nThis guide describes schema `libtmux.lisp.workspace/1`, which preserves the\noriginal topology-only creation/reuse API. For logical IDs, ownership records,\ndrift reports and explicit reconciliation, start with\n[owned workspaces](workspace-owned.md).\n\n`libtmux/workspace` validates a closed workspace description, produces an\ninspectable plan without I/O, and creates a missing session through the core\nlibrary. Reapplying an exact topology dispatches no mutations. A conflict fails\nbefore the first mutation; a later failure retains every attempted\n[`command-outcome`](api.md#command-outcome-type).\n\n[Workspace API](workspace-api.md) · [v1 contract](design/workspace-v1.md) ·\n[operation outcomes](operations.md#outcomes-and-target-checks)\n\n## Load the optional system\n\nThe workspace system depends on core `libtmux` and the locked Jzon parser. It\ndoes not load with core.\n\n```lisp\n(asdf:load-system \"libtmux/workspace\")\n```\n\nThe command-line adapter is another explicit system:\n\n```lisp\n(asdf:load-system \"libtmux/workspace/cli\")\n```\n\n## Describe a topology\n\nStart with native data. This function from\n[`examples/workspace.lisp`](../examples/workspace.lisp) constructs an owned\ndeclaration without I/O. The session environment is inherited by later panes.\n`:command` is literal argv; `:shell-command` explicitly requests shell execution\nduring apply.\n\n\n```lisp\n(defun workspace-description ()\n \"Build the demo's declaration without I/O. Commands run only during apply.\nAPP_LABEL seeds the session environment, inherited by subsequent panes.\"\n (ws:make-workspace\n '(:schema \"libtmux.lisp.workspace/1\"\n :session\n (:name \"declared\" :cwd \"/tmp\"\n :environment #((\"APP_LABEL\" . \"declared\"))\n :windows\n #((:name \"code\" :index 2 :layout :tiled\n :panes #((:shell-command \"test \\\"$APP_LABEL\\\" = declared && exec /bin/cat\")\n (:command #(\"/bin/cat\"))))\n (:name \"shell\" :index 5\n :panes #((:command #(\"/bin/cat\")))))))))\n```\n\n\nThe shipped [`examples/workspace.json`](../examples/workspace.json) describes\nthe same two windows and three panes. The tested examples compare the native\nand JSON declarations before applying them. The loader never invokes the Common\nLisp reader, evaluates input, or interns external names.\n\n```json\n{\n \"schema\": \"libtmux.lisp.workspace/1\",\n \"session\": {\n \"name\": \"declared\",\n \"cwd\": \"/tmp\",\n \"environment\": {\"APP_LABEL\": \"declared\"},\n \"windows\": [\n {\n \"name\": \"code\",\n \"index\": 2,\n \"layout\": \"tiled\",\n \"panes\": [\n {\"shell_command\": \"test \\\"$APP_LABEL\\\" = declared && exec /bin/cat\"},\n {\"command\": [\"/bin/cat\"]}\n ]\n },\n {\n \"name\": \"shell\",\n \"index\": 5,\n \"panes\": [{\"command\": [\"/bin/cat\"]}]\n }\n ]\n }\n}\n```\n\n[`read-workspace`](workspace-api.md#read-workspace-function) requires a regular\nUTF-8 file. [`parse-workspace`](workspace-api.md#parse-workspace-function)\naccepts a complete string. Both reject duplicate and unknown members, trailing\ndata, nulls, floating-point numbers, and exhausted input, nesting, node, string,\nwindow, pane, argv, environment-pair, or integer-token bounds.\n\nFor trusted in-process data, [`make-workspace`](workspace-api.md#make-workspace-function)\naccepts the equivalent closed keyword plist with vectors or finite proper\nlists. It copies retained strings and containers. Session names cannot contain\nperiods or colons; names also reject characters tmux would rewrite. `:layout`\nuses a Common Lisp keyword such as `:tiled`; JSON uses the corresponding string.\nCustom layouts use `(:custom text)` or JSON `{\"custom\": \"...\"}`. Tmux validates\ntheir checksum and geometry during apply; failure can follow completed creation.\n\nSession `:environment` accepts `(name . value)` string pairs; JSON accepts a\nstring-valued object. Names are unique and exclude NUL and `=`. Empty values\nare allowed. `:max-environment` defaults to 256 and bounds pairs per session.\nThese are raw tmux session values, not an exact child environment; tmux supplies\nvariables such as `TMUX_PANE` and can update inherited values on attachment.\nPane/window environment keys are unsupported. See the\n[creation-input contract](design/workspace-v1.md#native-data).\n\n## Plan locally, then apply explicitly\n\nThis function is executable source from\n[`examples/workspace.lisp`](../examples/workspace.lisp). Planning against the\ncaptured graph is local. Applying performs its own fresh capture before any\nmutation, then proves the final topology with another capture.\n\n\n```lisp\n(defun apply-workspace-document (client pathname)\n \"Plan and apply one bounded workspace document through explicit CLIENT.\nReturn the preview steps and application result as two values. Application\nshares a 30-second budget; file loading and the preview precede that budget.\"\n (let* ((workspace (ws:read-workspace pathname))\n (snapshot (tm:fetch-snapshot client))\n (plan (ws:plan-workspace workspace snapshot)))\n (values (ws:plan-steps plan)\n (ws:apply-workspace client workspace :total-timeout 30))))\n```\n\n\nThe result separates the important facts:\n\n| Question | API |\n| --- | --- |\n| Did this call create the session? | `result-created-p` |\n| Which core commands completed? | `result-outcomes` |\n| What topology passed final proof? | `result-snapshot` |\n| What would an offline creation do? | `plan-steps`, then `step-action` and `step-data` |\n\n`result-outcomes` returns a fresh vector in dispatch order. Each member is the\ncore outcome with status, phase, diagnostics, elapsed time, and optional\nreplacement observation. Successfully dispatched commands remain present even\nwhen later workspace state validation fails. An exact second apply returns false from\n`result-created-p` and an empty outcome vector.\n\n## Bound application time\n\n[`apply-workspace`](workspace-api.md#apply-workspace-function) accepts\n`:total-timeout` in seconds, shared across its initial capture, core steps and\nfinal verification. The example supplies 30 seconds for application; its file\nloading and preview happen first. Omit the argument to keep only per-operation\ntimeouts. An explicit value must be a nonnegative finite real; zero refuses\nthe initial read.\n\nEach core call receives the smaller of the remaining application budget and\n`:timeout` or the client's default. `:output-limit` still applies separately to\neach core operation, and `:cancel-token` is shared. The application budget\nchecks admission between operations and after local planning. It cannot\ninterrupt core preparation, synchronous platform calls or additive cleanup;\nan admitted call may run or dispatch past it. It is not a hard caller wall-time\nlimit.\n\n[`workspace-deadline-exceeded`](workspace-api.md#workspace-deadline-exceeded-type)\nreports expiry between calls without inventing a command outcome. Before the\nfirst core-step invocation it is signalled directly. Execution begins with that\ninvocation, which can itself fail before dispatch. Later,\n[`workspace-apply-failed`](workspace-api.md#workspace-apply-failed-type)\nretains it as the cause with all completed outcomes. The failed step is the\nnext step refused admission, or `nil` during final verification. Inspect the\nretained evidence before deciding what to do next; no automatic retry occurs.\n\n## Use the CLI without an implicit server\n\nThe source checkout ships `bin/libtmux-workspace`. Validation and offline\nplanning do not contact tmux:\n\n```console\n$ bin/libtmux-workspace validate examples/workspace.json\n```\n\n```json\n{\"status\":\"valid\",\"schema\":\"libtmux.lisp.workspace/1\",\"session\":\"declared\",\"windows\":2,\"panes\":3}\n```\n\n```console\n$ bin/libtmux-workspace plan examples/workspace.json\n```\n\n```json\n{\"status\":\"planned\",\"steps\":5,\"actions\":[\"create-session\",\"move-window\",\"split-pane\",\"select-layout\",\"create-window\"]}\n```\n\nApply requires the socket pathname. It never falls back to the default server:\n\n```console\n$ bin/libtmux-workspace apply examples/workspace.json \\\n --socket-path /path/to/owned/tmux.sock\n```\n\nThe single JSON response reports whether the session was created and how many\ncore outcomes were retained. The tested\n[`libtmux.workspace.cli:main`](workspace-api.md#main-function) function returns\nstatus 0, 1, or 2 and accepts caller-owned output streams; it does not quit the\nimage or enter the debugger.\n\nLibrary failures return status 1, leave stdout empty, and write one JSON error\nto stderr. It retains condition names, messages, causes, workspace paths and\nlimits, failed-step data, and every retained command outcome. Outcomes include\nstatus, dispatch phase, argv, elapsed seconds and output bytes; an unknown exit\ncode is omitted. `stdoutBytes` and `stderrBytes` are integer arrays, preserving\ninvalid UTF-8. Observation and cleanup failures retain their own diagnostics.\nNested details stop after eight levels and set `detailsTruncated` to true.\nUsage errors return status 2 with usage text on stderr.\n\nInspect retained statuses and phases before recovering from a failed apply.\nAn `unknown` outcome can follow a mutation that already happened. Successful\noutcomes remain successful when a later step or observation fails.\n\n## Handle conflicts and partial application\n\n[`plan-workspace`](workspace-api.md#plan-workspace-function) matches an existing\nsession by name, then proves the exact number of named window links, every\ndeclared index, and each pane count. Extra, missing, duplicate, or mismatched\ntopology signals `workspace-conflict`. During creation, later explicit indexes\nare reserved before automatic windows, and redundant same-index moves dispatch\nnothing. Pane creation and final order follow the declaration. Each split uses\nthe pane just created and its larger captured dimension; intermediate tiled\nlayouts prevent repeatedly halving one shrinking pane. The requested layout\nruns after the final pane exists. No delete, restart, or compensating mutation\nruns.\n\nCommand argv, explicit shell source, environment, cwd and layouts are creation\ninputs. They are not inferred\nfrom later pane state. A pane may change process or directory without turning an\notherwise matching topology into a destructive repair plan.\n\nIf a step fails, inspect the condition while preserving its uncertainty:\n\n```lisp\n(handler-case\n (ws:apply-workspace client workspace)\n (ws:workspace-apply-failed (condition)\n (list :step (let ((step (ws:failed-step condition)))\n (and step (ws:step-action step)))\n :outcomes (map 'vector #'tm:outcome-status\n (ws:result-outcomes condition))\n :cause (tm:error-cause condition))))\n```\n\nA final-proof failure has no failed step because every planned command already\ncompleted. It still retains all outcomes. The workspace layer never retries or\nrolls back a mutation.\n\n## Current boundary\n\nReuse checks topology by name, index and pane count, including sessions created\noutside this library. Version 1 does not retain a canonical declaration or\nowned entity mapping. Logical IDs, ownership checks, declaration-versus-drift\nplanning and explicit reconciliation remain unfinished. Session environment,\nshell source and custom layouts are creation inputs; reuse does not converge\nthem.\n\nVersion 1 omits YAML, plugins, lifecycle scripts, implicit shell expansion,\ndeletion, process supervision, daemon startup and control-mode events.\nUse explicit core operations when the application\nneeds behavior outside this bounded bootstrap/reuse contract.\n\nThe FiveAM suite proves pure planning and parser bounds without tmux. Integration\ntests apply and reapply the same document on owned exact tmux 3.3a and 3.8\nservers. `mise run package-examples` repeats the executable example from the\nsource archive.\n" + "content": "# Declarative workspaces\n\nSchema `libtmux.lisp.workspace/1`: topology-only creation and reuse. For\nlogical IDs, ownership records, drift reports and explicit reconciliation, use\n[owned workspaces](workspace-owned.md).\n\n`libtmux/workspace` validates a closed workspace description, plans without\nI/O, and creates a missing session through the core library.\n\n- Reapplying an exact topology dispatches no mutations.\n- A conflict fails before the first mutation.\n- A later failure retains every attempted\n [`command-outcome`](api.md#command-outcome-type).\n\n[Workspace API](workspace-api.md) · [v1 contract](design/workspace-v1.md) ·\n[operation outcomes](operations.md#outcomes-and-target-checks)\n\n## Load the optional system\n\nThe workspace system depends on core `libtmux` and the locked Jzon parser. It\ndoes not load with core.\n\n```lisp\n(asdf:load-system \"libtmux/workspace\")\n```\n\nThe command-line adapter is another explicit system:\n\n```lisp\n(asdf:load-system \"libtmux/workspace/cli\")\n```\n\n## Describe a topology\n\nStart with native data. This function from\n[`examples/workspace.lisp`](../examples/workspace.lisp) builds a declaration\nwithout I/O.\n\n- The session environment is inherited by later panes.\n- `:command` is literal argv.\n- `:shell-command` requests shell execution during apply.\n\n\n```lisp\n(defun workspace-description ()\n \"Build the demo's declaration without I/O. Commands run only during apply.\nAPP_LABEL seeds the session environment, inherited by subsequent panes.\"\n (ws:make-workspace\n '(:schema \"libtmux.lisp.workspace/1\"\n :session\n (:name \"declared\" :cwd \"/tmp\"\n :environment #((\"APP_LABEL\" . \"declared\"))\n :windows\n #((:name \"code\" :index 2 :layout :tiled\n :panes #((:shell-command \"test \\\"$APP_LABEL\\\" = declared && exec /bin/cat\")\n (:command #(\"/bin/cat\"))))\n (:name \"shell\" :index 5\n :panes #((:command #(\"/bin/cat\")))))))))\n```\n\n\nThe shipped [`examples/workspace.json`](../examples/workspace.json) describes\nthe same two windows and three panes. The loader never invokes the Common Lisp\nreader, evaluates input, or interns external names.\n\n```json\n{\n \"schema\": \"libtmux.lisp.workspace/1\",\n \"session\": {\n \"name\": \"declared\",\n \"cwd\": \"/tmp\",\n \"environment\": {\"APP_LABEL\": \"declared\"},\n \"windows\": [\n {\n \"name\": \"code\",\n \"index\": 2,\n \"layout\": \"tiled\",\n \"panes\": [\n {\"shell_command\": \"test \\\"$APP_LABEL\\\" = declared && exec /bin/cat\"},\n {\"command\": [\"/bin/cat\"]}\n ]\n },\n {\n \"name\": \"shell\",\n \"index\": 5,\n \"panes\": [{\"command\": [\"/bin/cat\"]}]\n }\n ]\n }\n}\n```\n\nReading JSON:\n\n- [`read-workspace`](workspace-api.md#read-workspace-function) requires a\n regular UTF-8 file.\n- [`parse-workspace`](workspace-api.md#parse-workspace-function) accepts a\n complete string.\n- Both reject duplicate and unknown members, trailing data, nulls and\n floating-point numbers.\n- Both reject input over a bound on nesting, nodes, strings, windows, panes,\n argv, environment pairs or integer tokens.\n\nFor trusted in-process data,\n[`make-workspace`](workspace-api.md#make-workspace-function) accepts the\nequivalent closed keyword plist.\n\n- Sequences may be vectors or finite proper lists. Retained strings and\n containers are copied.\n- Session names cannot contain periods or colons, or characters tmux would\n rewrite.\n- `:layout` is a keyword such as `:tiled`; JSON uses the matching string.\n- Custom layouts: `(:custom text)` or JSON `{\"custom\": \"...\"}`. Tmux validates\n checksum and geometry during apply, so failure can follow completed creation.\n\nSession `:environment`:\n\n- Takes `(name . value)` string pairs; JSON takes a string-valued object.\n- Names are unique and exclude NUL and `=`. Empty values are allowed.\n- `:max-environment` bounds pairs per session (default 256).\n- Values are raw tmux session values, not an exact child environment: tmux\n supplies variables such as `TMUX_PANE` and can update inherited values on\n attachment.\n- Pane and window environment keys are unsupported.\n\nSee the [creation-input contract](design/workspace-v1.md#native-data).\n\n## Plan locally, then apply explicitly\n\nPlanning against the captured graph is local. Apply captures fresh before any\nmutation, then proves the final topology with another capture. This function\nis from [`examples/workspace.lisp`](../examples/workspace.lisp):\n\n\n```lisp\n(defun apply-workspace-document (client pathname)\n \"Plan and apply one bounded workspace document through explicit CLIENT.\nReturn the preview steps and application result as two values. Application\nshares a 30-second budget; file loading and the preview precede that budget.\"\n (let* ((workspace (ws:read-workspace pathname))\n (snapshot (tm:fetch-snapshot client))\n (plan (ws:plan-workspace workspace snapshot)))\n (values (ws:plan-steps plan)\n (ws:apply-workspace client workspace :total-timeout 30))))\n```\n\n\nThe result separates the important facts:\n\n| Question | API |\n| --- | --- |\n| Did this call create the session? | `result-created-p` |\n| Which core commands completed? | `result-outcomes` |\n| What topology passed final proof? | `result-snapshot` |\n| What would an offline creation do? | `plan-steps`, then `step-action` and `step-data` |\n\nAbout `result-outcomes`:\n\n- It returns a fresh vector in dispatch order.\n- Each member is the core outcome: status, phase, diagnostics, elapsed time and\n an optional replacement observation.\n- Dispatched commands stay present even when later state validation fails.\n- An exact second apply returns false from `result-created-p` and an empty\n outcome vector.\n\n## Bound application time\n\n[`apply-workspace`](workspace-api.md#apply-workspace-function) takes\n`:total-timeout` in seconds, shared across its initial capture, core steps and\nfinal verification.\n\n- The example passes 30. Its file loading and preview happen first.\n- Omit it to keep only per-operation timeouts.\n- It must be a nonnegative finite real. Zero refuses the initial read.\n\nHow the budget applies:\n\n- Each core call gets the smaller of the remaining budget and `:timeout` (or\n the client's default).\n- `:output-limit` applies separately to each core operation; `:cancel-token`\n is shared.\n- The budget gates admission between operations and after local planning.\n- It cannot interrupt core preparation, synchronous platform calls or additive\n cleanup, so an admitted call may run or dispatch past it. It is not a hard\n caller wall-time limit.\n\n[`workspace-deadline-exceeded`](workspace-api.md#workspace-deadline-exceeded-type)\nreports expiry between calls without inventing a command outcome.\n\n- Before the first core-step invocation, it is signalled directly. Execution\n begins with that invocation, which can itself fail before dispatch.\n- Later,\n [`workspace-apply-failed`](workspace-api.md#workspace-apply-failed-type)\n retains it as the cause, with all completed outcomes.\n- The failed step is the next step refused admission, or `nil` during final\n verification.\n- Inspect the retained evidence before deciding what to do; nothing retries\n automatically.\n\n## Use the CLI without an implicit server\n\nThe source checkout ships `bin/libtmux-workspace`. Validation and offline\nplanning do not contact tmux:\n\n```console\n$ bin/libtmux-workspace validate examples/workspace.json\n```\n\n```json\n{\"status\":\"valid\",\"schema\":\"libtmux.lisp.workspace/1\",\"session\":\"declared\",\"windows\":2,\"panes\":3}\n```\n\n```console\n$ bin/libtmux-workspace plan examples/workspace.json\n```\n\n```json\n{\"status\":\"planned\",\"steps\":5,\"actions\":[\"create-session\",\"move-window\",\"split-pane\",\"select-layout\",\"create-window\"]}\n```\n\nApply requires the socket pathname. It never falls back to the default server:\n\n```console\n$ bin/libtmux-workspace apply examples/workspace.json \\\n --socket-path /path/to/owned/tmux.sock\n```\n\n- `apply` prints one JSON response: whether the session was created and how\n many core outcomes were retained.\n- [`libtmux.workspace.cli:main`](workspace-api.md#main-function) returns\n status 0, 1 or 2 and takes caller-owned output streams. It never quits the\n image or enters the debugger.\n\nFailures:\n\n- A library failure returns status 1, leaves stdout empty and writes one JSON\n error to stderr.\n- The error keeps condition names, messages, causes, workspace paths and\n limits, failed-step data and every retained command outcome.\n- Outcomes carry status, dispatch phase, argv, elapsed seconds and output\n bytes. An unknown exit code is omitted.\n- `stdoutBytes` and `stderrBytes` are integer arrays, so invalid UTF-8\n survives.\n- Observation and cleanup failures keep their own diagnostics.\n- Nested details stop after eight levels and set `detailsTruncated` to true.\n- Usage errors return status 2 with usage text on stderr.\n\nRead the retained statuses and phases before recovering from a failed apply:\n\n- An `unknown` outcome can follow a mutation that already happened.\n- Successful outcomes stay successful when a later step or observation fails.\n\n## Handle conflicts and partial application\n\n[`plan-workspace`](workspace-api.md#plan-workspace-function) matches an existing\nsession by name, then proves the topology:\n\n- The number of named window links, every declared index and each pane count\n must match exactly.\n- Extra, missing, duplicate or mismatched topology signals\n `workspace-conflict`.\n\nDuring creation:\n\n- Later explicit indexes are reserved before automatic windows. Redundant\n same-index moves dispatch nothing.\n- Pane creation and final order follow the declaration.\n- Each split uses the pane just created and its larger captured dimension.\n Intermediate tiled layouts stop one shrinking pane from being halved\n repeatedly.\n- The requested layout runs after the final pane exists.\n- No delete, restart or compensating mutation runs.\n\nCommand argv, shell source, environment, cwd and layouts are creation inputs,\nnot inferred from later pane state. A pane that changes process or directory\nnever turns a matching topology into a destructive repair plan.\n\nIf a step fails, inspect the condition while preserving its uncertainty:\n\n```lisp\n(handler-case\n (ws:apply-workspace client workspace)\n (ws:workspace-apply-failed (condition)\n (list :step (let ((step (ws:failed-step condition)))\n (and step (ws:step-action step)))\n :outcomes (map 'vector #'tm:outcome-status\n (ws:result-outcomes condition))\n :cause (tm:error-cause condition))))\n```\n\nA final-proof failure has no failed step: every planned command already\ncompleted. It still retains all outcomes. The workspace layer never retries or\nrolls back a mutation.\n\n## Current boundary\n\n- Reuse checks topology by name, index and pane count, including sessions\n created outside this library.\n- Version 1 keeps no canonical declaration or owned entity mapping. It has no\n logical IDs, ownership checks, drift planning or reconciliation.\n- Session environment, shell source and custom layouts are creation inputs;\n reuse does not converge them.\n\nVersion 1 omits YAML, plugins, lifecycle scripts, implicit shell expansion,\ndeletion, process supervision, daemon startup and control-mode events. Use\nexplicit core operations for anything else.\n" } ] } diff --git a/site/src/data/tmux-usage/lisp.json b/site/src/data/tmux-usage/lisp.json index b1602b482..8e06d406e 100644 --- a/site/src/data/tmux-usage/lisp.json +++ b/site/src/data/tmux-usage/lisp.json @@ -94,7 +94,7 @@ ], "port": "lisp", "repo": "libtmux/libtmux-lisp", - "revision": "e6f319c4257789cfe39547af001c718975f0a2ef", + "revision": "a29c6b96e1c78501dff5073b538ae3180b0e63e3", "schemaVersion": 1, "symbols": { "libtmux:bind-key": [ diff --git a/site/test/port-examples-index.test.ts b/site/test/port-examples-index.test.ts index 9e32a3bc0..a0a4219ef 100644 --- a/site/test/port-examples-index.test.ts +++ b/site/test/port-examples-index.test.ts @@ -12,7 +12,7 @@ const page = (path: string) => readFileSync(new URL(`../src/content/docs/ports/$ // the revision of the API model, so a moved pin fails here until the links follow. const INDEXES = [ { path: 'erlang/examples/index.md', repo: 'libtmux-erlang', revision: erlangModel.revision, programs: 18 }, - { path: 'lisp/examples/index.md', repo: 'libtmux-lisp', revision: lispModel.revision, programs: 6 + 4 }, + { path: 'lisp/examples/index.md', repo: 'libtmux-lisp', revision: lispModel.revision, programs: 7 + 4 }, { path: 'clojure/examples.md', repo: 'libtmux-java', revision: clojureModel.revision, programs: 13 }, { path: 'haskell/examples/index.md', repo: 'libtmux-haskell', revision: haskellModel.revision, programs: 6 }, { path: 'ocaml/examples/index.md', repo: 'libtmux-ocaml', revision: ocamlModel.revision, programs: 22 }, From 491dd5ad8603849fe0ed4d7d4202a81b4b0d27a3 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 10:47:49 -0600 Subject: [PATCH 09/13] api-directory(test[ports]) Check the pinned Erlang, OCaml and Lisp models carry their directory why: The directory readers for Erlang, OCaml and Common Lisp were tested against synthetic prose only, so a model pinned before the native docs gained their directory passed every test while the reference page showed no table. The same gap hid that the Lisp client class had no members until the model was regenerated with the reparenting. what: - Fold the real doc of tmux_server, Libtmux_unix.Client and libtmux:client with groupDirectory and expect a directory of eight rows, each naming at least one member - Expect the Common Lisp client class to be the parent of its client-first functions, such as fetch-snapshot and send-text - Both checks fail on the models pinned before the three repins: no directory on any of the three owners and no members on the client class --- site/test/api-prose.test.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/site/test/api-prose.test.ts b/site/test/api-prose.test.ts index 227a76636..dc3742b00 100644 --- a/site/test/api-prose.test.ts +++ b/site/test/api-prose.test.ts @@ -331,6 +331,30 @@ describe('a Haskell module\'s export groups', () => { }) }) +describe('the capability directory of Erlang, OCaml and Common Lisp', () => { + // The shell folds whatever prose the pinned model carries, so a model pinned before the native docs gained their + // directory has a correct reader and no table. + const OWNERS = [ + { port: 'erlang', id: 'tmux_server', rows: 8 }, + { port: 'ocaml', id: 'Libtmux_unix.Client', rows: 8 }, + { port: 'lisp', id: 'libtmux:client', rows: 8 }, + ] + + it.each(OWNERS)('is on the pinned $port model, in $rows rows on $id', ({ port, id, rows }) => { + const owner = API_MODELS[port].symbols.find((symbol) => symbol.id === id) + const directory = groupDirectory(parseApiProse(owner?.doc?.body ?? ''), port).find((block) => block.kind === 'directory') + if (directory?.kind !== 'directory') throw new Error(`${port} ${id} has no directory`) + expect(directory.rows).toHaveLength(rows) + for (const row of directory.rows) expect(row.groups.flatMap((group) => group.refs).length, row.title).toBeGreaterThan(0) + }) + + it('lists the Common Lisp client\'s operations as members of its class', () => { + const members = API_MODELS.lisp.symbols.filter((symbol) => symbol.parent === 'libtmux:client') + expect(members.map((symbol) => symbol.id)).toEqual(expect.arrayContaining(['libtmux:fetch-snapshot', 'libtmux:send-text'])) + expect(members.every((symbol) => symbol.kind === 'function')).toBe(true) + }) +}) + describe('generated Python docstring parity', () => { it('keeps all source sessions and experimental emphasis in HTML input and Markdown', () => { const model = API_MODELS.py From 649394ab2bb8a99b2359d6ab165e1e9d81bb53ff Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 11:45:39 -0600 Subject: [PATCH 10/13] destinations(chore[evidence]) Drop the asyncio link the Lisp guide no longer makes why: At the new Common Lisp pin the concurrency guide says "There is no asyncio or event-loop integration" in plain prose; the earlier text put `asyncio` in a code span, which linked Python's asyncio module. The evidence still held that destination, so the destination check failed: the evidence names a link no source generates. what: - Remove the docs.python.org asyncio module row from the API destination evidence (`verify-api-destinations.mjs --missing`: no request made, only the row no source generates is dropped) --- site/src/data/api-destination-evidence.json | 1 - 1 file changed, 1 deletion(-) diff --git a/site/src/data/api-destination-evidence.json b/site/src/data/api-destination-evidence.json index d8c35b447..77b24370e 100644 --- a/site/src/data/api-destination-evidence.json +++ b/site/src/data/api-destination-evidence.json @@ -293,7 +293,6 @@ {"url":"https://docs.python.org/3/glossary.html#term-generator","host":"docs.python.org","status":200,"via":"html","title":"Glossary — Python 3.15.1 documentation","identity":{"via":"cpython","declared":"fragment","kind":"other","path":["term-generator"]},"heading":"#term-generator","fragment":"found","ok":true,"terminal":[{"key":"authored:Python generators","symbol":"Python generators","at":"review"}],"checkedAt":"2026-10-25","names":["site/src/lib/api-glossary.ts"],"sources":["authored"]}, {"url":"https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser","host":"docs.python.org","status":200,"via":"html","title":"argparse — Parser for command-line options, arguments and subcommands — Python 3.15.1 documentation","identity":{"via":"cpython","declared":"class","kind":"type","path":["argparse","ArgumentParser"]},"fragment":"found","ok":true,"terminal":[{"key":"py:argparse.ArgumentParser","symbol":"ArgumentParser","at":"identity"}],"checkedAt":"2026-10-25","names":["py:argparse.ArgumentParser"],"sources":["doc","type"]}, {"url":"https://docs.python.org/3/library/argparse.html#argparse.Namespace","host":"docs.python.org","status":200,"via":"html","title":"argparse — Parser for command-line options, arguments and subcommands — Python 3.15.1 documentation","identity":{"via":"cpython","declared":"class","kind":"type","path":["argparse","Namespace"]},"fragment":"found","ok":true,"terminal":[{"key":"py:argparse.Namespace","symbol":"Namespace","at":"identity"}],"checkedAt":"2026-10-25","names":["py:argparse.Namespace"],"sources":["doc","type"]}, - {"url":"https://docs.python.org/3/library/asyncio.html#module-asyncio","host":"docs.python.org","status":200,"via":"html","title":"asyncio — Asynchronous I/O — Python 3.15.2 documentation","identity":{"via":"cpython","declared":"module","kind":"module","path":["asyncio"]},"fragment":"found","ok":true,"terminal":[{"key":"py:asyncio","symbol":"asyncio","at":"identity"}],"checkedAt":"2026-11-08","names":["py:asyncio"],"sources":["prose"]}, {"url":"https://docs.python.org/3/library/code.html#module-code","host":"docs.python.org","status":200,"via":"html","title":"code — Interpreter base classes — Python 3.15.1 documentation","identity":{"via":"cpython","declared":"module","kind":"module","path":["code"]},"fragment":"found","ok":true,"terminal":[{"key":"py:code","symbol":"code","at":"identity"}],"checkedAt":"2026-10-25","names":["py:code"],"sources":["doc"]}, {"url":"https://docs.python.org/3/library/collections.abc.html#collections.abc.Callable","host":"docs.python.org","status":200,"via":"html","title":"collections.abc — Abstract Base Classes for Containers — Python 3.15.1 documentation","identity":{"via":"cpython","declared":"class","kind":"type","path":["collections","abc","Callable"]},"fragment":"found","ok":true,"terminal":[{"key":"py:Callable","symbol":"Callable","at":"identity"}],"checkedAt":"2026-10-25","names":["py:Callable"],"sources":["type"]}, {"url":"https://docs.python.org/3/library/collections.abc.html#collections.abc.Iterator","host":"docs.python.org","status":200,"via":"html","title":"collections.abc — Abstract Base Classes for Containers — Python 3.15.1 documentation","identity":{"via":"cpython","declared":"class","kind":"type","path":["collections","abc","Iterator"]},"fragment":"found","ok":true,"terminal":[{"key":"py:Iterator","symbol":"Iterator","at":"identity"}],"checkedAt":"2026-10-25","names":["py:Iterator"],"sources":["type"]}, From 46b9375e4492ccd984d12255b5191fa140c4ca72 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 11:46:45 -0600 Subject: [PATCH 11/13] badges(feat[cpan]) Render CPAN version badges from the registry data why: libtmux-perl's README now shows a shields CPAN version badge for each distribution (cpan/v/LibTmux and the Async and Workspace distributions). Staging the README from master threw "unsupported badge", so the Perl docs build stopped before it published. what: - Map shields' cpan version service (label "cpan", no qualifier) to the registry version of the named distribution, which registry.json already carries for all three Perl distributions - Cover it with the registry badge table in port-guide-badges.test.ts --- scripts/lib/badges.mjs | 1 + site/test/port-guide-badges.test.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/scripts/lib/badges.mjs b/scripts/lib/badges.mjs index 4f29b507e..bb9330b02 100644 --- a/scripts/lib/badges.mjs +++ b/scripts/lib/badges.mjs @@ -25,6 +25,7 @@ export const BADGE_DIRECTORY = 'badges' * a Maven group). */ const VERSION_SERVICES = { + cpan: { label: 'cpan', qualifiers: 0 }, gem: { label: 'gem', qualifiers: 0 }, crates: { label: 'crates.io', qualifiers: 0 }, hexpm: { label: 'hex', qualifiers: 0 }, diff --git a/site/test/port-guide-badges.test.ts b/site/test/port-guide-badges.test.ts index 62c65ad90..585314631 100644 --- a/site/test/port-guide-badges.test.ts +++ b/site/test/port-guide-badges.test.ts @@ -73,6 +73,7 @@ describe('localizeBadges', () => { ['elixir', 'https://img.shields.io/hexpm/v/libtmux', '0.1.0', 'hex: v0.1.0'], ['kotlin', 'https://img.shields.io/maven-central/v/io.github.libtmux/libtmux-kotlin', '0.1.0', 'maven-central: v0.1.0'], ['scala', 'https://img.shields.io/maven-central/v/io.github.libtmux/libtmux-scala_3', '0.1.0', 'maven-central: v0.1.0'], + ['perl', 'https://img.shields.io/cpan/v/LibTmux', '0.003', 'cpan: v0.003'], ])('renders the %s registry badge from a port entry without packages', (port, url, version, aria) => { const data = { ports: { [port]: { version } } } const [svg] = localizeBadges(`![x](${url})`, port, data).files.values() From 7cea5e52b3a1b2a5f59a283664673a44c80404ab Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 12:20:57 -0600 Subject: [PATCH 12/13] ports(fix[installs]) Take the Java BOM and Swift range from the registry why: The Java Gradle install named libtmux-bom:0.1.0 and the Swift Package.swift install named from: "0.1.0" as literals, so the registry refresh to Java 0.1.2 and Swift 0.1.1 left both landing pages offering the first release while every other port's install moved. what: - Write both installs with the {version} placeholder that installsFor fills from the registry entry (or the page's own release on a versioned tree) - Word the Swift note for any release - Test that the Java and Swift installs name the registry's version --- site/src/lib/ports.ts | 6 +++--- site/test/package-destinations.test.ts | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/site/src/lib/ports.ts b/site/src/lib/ports.ts index fee14fcc1..fcd52e8ee 100644 --- a/site/src/lib/ports.ts +++ b/site/src/lib/ports.ts @@ -1156,7 +1156,7 @@ const CORE_PORTS: readonly Port[] = [ label: 'Gradle', lang: 'kotlin', code: `dependencies { - implementation(platform("io.github.libtmux:libtmux-bom:0.1.0")) + implementation(platform("io.github.libtmux:libtmux-bom:{version}")) implementation("io.github.libtmux:libtmux") testImplementation("io.github.libtmux:libtmux-junit5") @@ -1378,9 +1378,9 @@ target_link_libraries(your_target PRIVATE libtmux::libtmux)`, lang: 'swift', code: `.package( url: "https://github.com/libtmux/libtmux-swift.git", - from: "0.1.0" + from: "{version}" )`, - note: 'A range from 0.1.0 up to the next major version. Any 0.1.N release may change the API, so pin `exact:` instead to avoid a break.', + note: 'A range from this release up to the next major version. Any 0.1.N release may change the API, so pin `exact:` instead to avoid a break.', }, ], // SwiftPM resolves from the repository itself, so the repository is the diff --git a/site/test/package-destinations.test.ts b/site/test/package-destinations.test.ts index 8abd6d19e..0ecfe70ba 100644 --- a/site/test/package-destinations.test.ts +++ b/site/test/package-destinations.test.ts @@ -170,3 +170,15 @@ describe('release badge of a port no registry carries', () => { } }) }) + +describe('versioned installs follow the registry', () => { + it.each([ + ['java', (version: string) => `platform("io.github.libtmux:libtmux-bom:${version}")`], + ['swift', (version: string) => `from: "${version}"`], + ])('names the %s release the registry carries', (slug, spelling) => { + const port = PORT_BY_SLUG[slug]! + const { version } = registryFor(port) + expect(version).toBeTruthy() + expect(installsFor(port)[0]!.code).toContain(spelling(version!)) + }) +}) From cd4b4fc9aca869d90fc8ad312184e29da23ebfe5 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 14 Nov 2026 16:21:58 -0600 Subject: [PATCH 13/13] rehype-site-root(fix[badges]) Serve an HTML header's badges from the port's mount MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit why: Erlang's README header is HTML (written for ex_doc), so its localized badges reach the page as raw `` tags. The site-root rewrite only visits elements, so those paths stayed root-absolute: the PR preview's isolation check found them escaping /pr-317/, and on libtmux.org /badges/ at the root answers 403, so the badges would ship broken. what: - Rewrite `src="/badges/…"` inside raw HTML nodes with the same own-mount rule a Markdown badge takes (the port build's mount, under any preview root) - Test both the port mount and a preview root for an HTML header badge --- site/src/plugins/rehype-site-root.mjs | 8 ++++++++ site/test/port-guide-badges.test.ts | 21 +++++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/site/src/plugins/rehype-site-root.mjs b/site/src/plugins/rehype-site-root.mjs index 873b6d5b4..44e4b530e 100644 --- a/site/src/plugins/rehype-site-root.mjs +++ b/site/src/plugins/rehype-site-root.mjs @@ -23,6 +23,14 @@ export function rehypeSiteRoot() { return (tree, file) => { const port = file?.data?.astro?.frontmatter?.port || buildPort + // A README whose header is HTML (Erlang's, written for ex_doc) reaches the + // tree as raw HTML, so its localized `` tags are not + // elements; they take the same own-mount rule as a Markdown badge. + const badgeMount = port === buildPort ? `${portRoot}/${port}/${buildTarget(process.env).version}` : root + visit(tree, 'raw', (node) => { + if (typeof node.value !== 'string' || !node.value.includes('/badges/')) return + node.value = node.value.replace(/(\bsrc=)(["'])\/badges\//g, (_, attr, quote) => `${attr}${quote}${badgeMount}/badges/`) + }) visit(tree, 'element', (node) => { const attr = node.tagName === 'a' ? 'href' : node.tagName === 'img' ? 'src' : null if (!attr) return diff --git a/site/test/port-guide-badges.test.ts b/site/test/port-guide-badges.test.ts index 585314631..d1b8ec001 100644 --- a/site/test/port-guide-badges.test.ts +++ b/site/test/port-guide-badges.test.ts @@ -148,17 +148,30 @@ describe('stage --check compares badge files', () => { describe('badge URLs in a rendered guide', () => { afterEach(() => vi.unstubAllEnvs()) - const render = async (port: string) => { + const render = async (port: string, markdown = '![x](/badges/abc.svg)', root = '') => { vi.stubEnv('LIBTMUX_DOCS_PORT', port) vi.stubEnv('LIBTMUX_DOCS_VERSION', 'latest') - vi.stubEnv('LIBTMUX_DOCS_ROOT', '') - vi.stubEnv('LIBTMUX_DOCS_PORT_ROOT', '') + vi.stubEnv('LIBTMUX_DOCS_ROOT', root) + vi.stubEnv('LIBTMUX_DOCS_PORT_ROOT', root) vi.resetModules() const { rehypeSiteRoot } = await import('../src/plugins/rehype-site-root.mjs') const processor = await createMarkdownProcessor({ rehypePlugins: [rehypeSiteRoot], syntaxHighlight: false }) - return (await processor.render('![x](/badges/abc.svg)', { frontmatter: { port: 'ruby' } })).code + return (await processor.render(markdown, { frontmatter: { port: 'ruby' } })).code } + // Erlang's README header is HTML, so its localized badges are raw `` tags, not Markdown images. + const htmlHeader = '

\n x\n

' + + it('serves an HTML header\'s badges from the port build\'s own mount', async () => { + const html = await render('ruby', htmlHeader) + expect(html).toContain('src="/ruby/latest/badges/abc.svg"') + expect(html).not.toContain('src="/badges/') + }) + + it('keeps an HTML header\'s badges inside a preview root', async () => { + expect(await render('ruby', htmlHeader, '/pr-317')).toContain('src="/pr-317/ruby/latest/badges/abc.svg"') + }) + it('serves a port build\'s badges from its own mount', async () => { expect(await render('ruby')).toContain('src="/ruby/latest/badges/abc.svg"') })