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 Filter
Expr -
Description#
SendableandCodablebecause 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.2import PackageDescriptionlet 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
Sourcesdirectory and save this complete program asSources/Example.swift. ThewithTmuxServerfixture owns a private tmux server and stops it after success or failure. Ordinary application code usesServerfor its own socket; these examples use the fixture until their setup moves to ordinary server objects. View sourceimport Foundationimport LibTmuximport TmuxFixture@mainstruct ApiQueryPanes {static func main() async {do {try await withTmuxServer { @Sendable server inguard 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_BINto an absolute executable path to select a tmux version:Terminal window $ swift run ApiExampleExpected output:
Active panes: 1Original stays active: true- Type parameters
-
-
Constraint Filterable
-
Members7#
Common operations1#
- where(_:_:) method Builds a comparison from a key path.
Other members6#
- and(_:): case and([Filter
Expr <Root>]) constant - comparison(field:operation:): case comparison(field: String, operation: Filter
Operation ) constant - matches(_:) method Whether one value satisfies this filter.
- not(_:): case not(Filter
Expr <Root>) constant - or(_:): case or([Filter
Expr <Root>]) constant - validate() method Rejects field ids this build does not understand anywhere in the tree.
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.