package ecaml
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
Library for writing Emacs plugin in OCaml
Install
dune-project
Dependency
Authors
Maintainers
Sources
ecaml-v0.15.0.tar.gz
sha256=89f2806dd37012b07ddbaf40c2d9cfb9de29289944d921d23f4fd9b93d5c7cba
doc/src/ecaml.ecaml_test_helpers/buffer_helper.ml.html
Source file buffer_helper.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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92open! Core open! Import let with_buffer sync_or_async contents ~f = Current_buffer.set_temporarily_to_temp_buffer sync_or_async (fun () -> Point.insert_text (contents |> Text.of_utf8_bytes); f ()) ;; let with_buffer_and_point sync_or_async contents line_and_column ~f = with_buffer sync_or_async contents ~f:(fun () -> Point.goto_line_and_column line_and_column; f ()) ;; let utf8_full_block_U2588 = "\xE2\x96\x88" let show_buffer ~block_out = let contents = Current_buffer.contents () |> Text.to_utf8_bytes in Current_buffer.set_temporarily_to_temp_buffer Sync (fun () -> Point.insert contents; List.iter block_out ~f:(fun position -> let min = Point.min () in let max = Point.max () in let start = Position.clamp_exn position ~min ~max in let end_ = Position.clamp_exn (Position.add position 1) ~min ~max in Point.goto_char start; let contains_newline = Current_buffer.contents ~start ~end_ () |> Text.to_utf8_bytes |> String.is_substring ~substring:"\n" in Current_buffer.delete_region ~start ~end_; Point.insert utf8_full_block_U2588; if contains_newline then Point.insert "\n"); message (Current_buffer.contents () |> Text.to_utf8_bytes)) ;; let show_point () = show_buffer ~block_out:[ Point.get () ] module Region = struct type t = { start : Line_and_column.t ; end_ : Line_and_column.t } [@@deriving sexp_of] end open Region let with_buffer_and_active_region sync_or_async contents { start; end_ } ~f = with_buffer sync_or_async contents ~f:(fun () -> Current_buffer.set_mark (Current_buffer.position_of_line_and_column start); Point.goto_line_and_column end_; f ()) ;; let show_active_region () = match Current_buffer.active_region () with | None -> print_s [%message "No region is active."] | Some (start, end_) -> show_buffer ~block_out:[ start; end_ ] ;; module Sample_input = struct let table1 = {| ┌──────────────────────────────────────┬─────┬──────┬────────┬───────────┐ │ feature │ CRs │ XCRs │ review │ next step │ ├──────────────────────────────────────┼─────┼──────┼────────┼───────────┤ │ jane │ │ │ │ │ │ plugd │ │ │ │ fix build │ │ rewrite-flags │ 1 │ 1 │ 9 │ │ └──────────────────────────────────────┴─────┴──────┴────────┴───────────┘ |} ;; let table2 = {| Features you own: ┌──────────────────────────┬─────┬──────┬───────┬───────────────────────┐ │ feature │ CRs │ XCRs │ #left │ next step │ ├──────────────────────────┼─────┼──────┼───────┼───────────────────────┤ │ jane │ │ │ │ │ │ plugd │ │ │ │ fix build │ │ clean-up-obligations │ │ │ 3 │ review │ │ commander │ │ │ │ rebase, release │ │ versioned-types │ │ │ 1 │ review │ │ pipe-rpc │ │ │ 1 │ rebase, enable-review │ └──────────────────────────┴─────┴──────┴───────┴───────────────────────┘ |} ;; end
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>