package vcaml

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file mode.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
open Core

module T = struct
  type t =
    | Command_line_editing
    | Confirm_dialog
    | External_command
    | Hit_enter_prompt
    | Insert
    | Insert_mode_completion
    | Insert_mode_x_completion
    | More_prompt
    | Normal
    | Normal_in_terminal_emulator
    | Normal_using_i_ctrl_o_in_insert_mode
    | Normal_using_i_ctrl_o_in_replace_mode
    | Normal_using_i_ctrl_o_in_virtual_replace_mode
    | Operator_pending
    | Operator_pending_forced_blockwise
    | Operator_pending_forced_characterwise
    | Operator_pending_forced_linewise
    | Replace
    | Replace_mode_completion
    | Replace_mode_i_ctrl_x_completion
    | Select_blockwise
    | Select_by_character
    | Select_by_line
    | Terminal
    | Vim_ex_mode
    | Virtual_replace
    | Virtual_replace_mode_completion
    | Virtual_replace_mode_i_ctrl_x_completion
    | Visual_blockwise
    | Visual_blockwise_using_v_ctrl_o_in_select_mode
    | Visual_by_character
    | Visual_by_character_using_v_ctrl_o_in_select_mode
    | Visual_by_line
    | Visual_by_line_using_v_ctrl_o_in_select_mode
  [@@deriving compare, enumerate, sexp_of]
end

include T
include Comparable.Make_plain (T)

let of_mode_symbol = function
  | "n" -> Ok Normal
  | "no" -> Ok Operator_pending
  | "nov" -> Ok Operator_pending_forced_characterwise
  | "noV" -> Ok Operator_pending_forced_linewise
  | "no\022" -> Ok Operator_pending_forced_blockwise
  | "niI" -> Ok Normal_using_i_ctrl_o_in_insert_mode
  | "niR" -> Ok Normal_using_i_ctrl_o_in_replace_mode
  | "niV" -> Ok Normal_using_i_ctrl_o_in_virtual_replace_mode
  | "nt" -> Ok Normal_in_terminal_emulator
  | "v" -> Ok Visual_by_character
  | "vs" -> Ok Visual_by_character_using_v_ctrl_o_in_select_mode
  | "V" -> Ok Visual_by_line
  | "Vs" -> Ok Visual_by_line_using_v_ctrl_o_in_select_mode
  | "\022" -> Ok Visual_blockwise
  | "\022s" -> Ok Visual_blockwise_using_v_ctrl_o_in_select_mode
  | "s" -> Ok Select_by_character
  | "S" -> Ok Select_by_line
  | "\019" -> Ok Select_blockwise
  | "i" -> Ok Insert
  | "ic" -> Ok Insert_mode_completion
  | "ix" -> Ok Insert_mode_x_completion
  | "R" -> Ok Replace
  | "Rc" -> Ok Replace_mode_completion
  | "Rx" -> Ok Replace_mode_i_ctrl_x_completion
  | "Rv" -> Ok Virtual_replace
  | "Rvc" -> Ok Virtual_replace_mode_completion
  | "Rvx" -> Ok Virtual_replace_mode_i_ctrl_x_completion
  | "c" -> Ok Command_line_editing
  | "cv" -> Ok Vim_ex_mode
  | "r" -> Ok Hit_enter_prompt
  | "rm" -> Ok More_prompt
  | "r?" -> Ok Confirm_dialog
  | "!" -> Ok External_command
  | "t" -> Ok Terminal
  | sym -> Or_error.error_s [%message "Unrecognized mode symbol" (sym : string)]
;;

module With_blocking_info = struct
  type nonrec t =
    { mode : t
    ; blocking : bool
    }
  [@@deriving sexp_of]
end