package oxbow

  1. Overview
  2. Docs
Dynamic window manager for the river Wayland compositor

Install

dune-project
 Dependency

Authors

Maintainers

Sources

v0.1.0.tar.gz
md5=a637acaa0e19046cd65fff733874eb97
sha512=76230cbecd7510de7a05b5d1f335915ef7b6c4aa557d8dbfd23591606618d2cfa25082d17b93f2f4b53a118d1cbf6a80e4ad51cf0f099b4921fb83d6df0c9801

doc/src/oxbow.core/window_pattern.ml.html

Source file window_pattern.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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
open! Ppx_yojson_conv_lib.Yojson_conv

type t =
  { title : string option [@yojson.option]
  ; app_id : string option [@yojson.option]
  ; identifier : string option [@yojson.option]
  ; label : string option [@yojson.option]
  ; case : Pattern.Case.t
  }
[@@deriving yojson]

let equal (a : t) (b : t) = a = b

let is_empty = function
  | { title = None; app_id = None; identifier = None; label = None; case = _ } -> true
  | _ -> false
;;

let to_string p =
  let field_value name value =
    match value with
    | None -> None
    | Some s -> Some (Printf.sprintf "%s=%s" name s)
  in
  let parts =
    List.filter_map
      Fun.id
      [ field_value "title" p.title
      ; field_value "app-id" p.app_id
      ; field_value "identifier" p.identifier
      ; field_value "label" p.label
      ]
  in
  match p.case with
  | Sensitive -> String.concat " " parts
  | Insensitive -> String.concat " " parts |> Printf.sprintf "%s (insensitive)"
;;

let compile m =
  Pattern.compile_specs
    ~case:m.case
    [ (m.title, fun (t, _, _, _) -> Option.to_list t)
    ; (m.app_id, fun (_, a, _, _) -> Option.to_list a)
    ; (m.identifier, fun (_, _, i, _) -> Option.to_list i)
    ; (m.label, fun (_, _, _, ls) -> ls)
    ]
  |> Result.map (fun m ~title ~app_id ~identifier ~labels ->
    m (title, app_id, identifier, labels))
;;