Source file window_match.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
open! Ppx_yojson_conv_lib.Yojson_conv
module Matcher = struct
type t =
title:string option
-> app_id:string option
-> identifier:string option
-> labels:string list
-> bool
end
type t =
{ pattern : Window_pattern.t
; invert : bool
; scope : Scope.t
}
[@@deriving yojson]
let to_string m =
let pattern = Window_pattern.to_string m.pattern in
let invert = if m.invert then Some "invert" else None in
let scope =
match m.scope with
| All -> None
| Focused -> Some "focused"
| Output name -> Some (Printf.sprintf "output %s" name)
in
let tags = List.filter_map Fun.id [ invert; scope ] in
match tags with
| [] -> pattern
| _ -> String.concat ", " tags |> Printf.sprintf "%s [%s]" pattern
;;