Core Library0.xAPI Reference

Choose documentation 3

latest

Current version

latest
English

Early release libtmux is released, and its APIs may still change between releases. This site's structure and URLs may change too.

enum libtmux-swift latest

FilterExpr

A filter over one model, held as data.

Source and package
Qualified name
FilterExpr
Package
libtmux-swift
Source
Sources/LibTmux/FilterExpr.swift
enum FilterExpr : enum FilterExpr

Description#

Sendable and Codable because it is meant to outlive the call that built it: stored in a config, sent to another process, or translated into a tmux predicate. Closures deliberately have no place in it — they cannot be any of those things.

Examples#

Filter panes with a typed expression. Create an inactive split and ask for active panes using a FilterExpr built from a Swift key path. The server evaluates the filter and returns matching Pane snapshots; the original pane stays active. Use Swift 6.2 or newer and tmux 3.3a or newer on Linux or macOS. In an empty directory, save this consumer package as Package.swift; SwiftPM fetches the library from release 0.1.1:

// swift-tools-version: 6.2
import PackageDescription
let package = Package(
name: "ApiExample",
platforms: [.macOS(.v13)],
dependencies: [
.package(url: "https://github.com/libtmux/libtmux-swift.git", from: "0.1.1")
],
targets: [
.executableTarget(
name: "ApiExample",
dependencies: [
.product(name: "LibTmux", package: "libtmux-swift"),
.product(name: "TmuxFixture", package: "libtmux-swift"),
],
path: "Sources"
)
]
)

Create a Sources directory and save this complete program as Sources/Example.swift. The withTmuxServer fixture owns a private tmux server and stops it after success or failure. Ordinary application code uses Server for its own socket; these examples use the fixture until their setup moves to ordinary server objects. View source

import Foundation
import LibTmux
import TmuxFixture
@main
struct ApiQueryPanes {
static func main() async {
do {
try await withTmuxServer { @Sendable server in
guard let original = try await server.panes().first else {
throw ExampleError.paneMissing
}
_ = try await server.split(original, direction: .right)
let expression = try FilterExpr<Pane>.where(\.isActive, .equals(true))
let active = try await server.panes(where: expression)
print("Active panes: \(active.count)")
print("Original stays active: \(active.contains { $0.id == original.id })")
}
} catch {
FileHandle.standardError.write(Data("Example failed: \(error)\n".utf8))
exit(EXIT_FAILURE)
}
}
enum ExampleError: Error {
case paneMissing
}
}

Build and run the saved program. An operation or cleanup error produces a failing exit status. Set LIBTMUX_TMUX_BIN to an absolute executable path to select a tmux version:

Terminal window
$ swift run ApiExample

Expected output:

Active panes: 1
Original stays active: true
Type parameters

Members7#

Common operations1#

  • where(_:_:) method Builds a comparison from a key path.

Other members6#

Inherited members2 members#

Reached through Equatable.!=(_:_:), Decodable.init(from:).

  • !=(_:_:) function inherited Returns a Boolean value indicating whether two values are not equal.
  • init(from:) method inherited Creates a new instance by decoding from the given decoder.
Esc

Type to search.

Reference previewOpen reference