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
open! Core
let of_items ~root (items : (Command_id.t * Tree_item.t) list)
: Tree_item.t Navigable_tree.t
=
let trie = Ordered_trie.create () in
List.iter items ~f:(fun (path, item) -> Ordered_trie.add trie ~data:item path);
let children =
Ordered_trie.to_tree_nodes
trie
~branch:(fun name children ->
Navigable_tree.Node.Branch
{ value = Tree_item.Section name; children; expanded = true })
~leaf:(fun item -> Navigable_tree.Node.Leaf item)
in
Navigable_tree.Node.Branch { value = Tree_item.Section root; children; expanded = true }
;;
let entry ?(run_on_start = false) label =
let id, bash_code =
match String.lsplit2 label ~on:':' with
| Some (id, bash_code) -> Command_id.of_string id, bash_code
| None -> Command_id.of_string label, label
in
id, Tree_item.Command { id; bash_code; run_on_start; is_interactive = false }
;;