summaryrefslogtreecommitdiff
path: root/lib/editor.ml
diff options
context:
space:
mode:
authorFederico Igne <undyamon@disroot.org>2024-01-12 19:00:24 +0100
committerFederico Igne <undyamon@disroot.org>2024-01-12 19:00:24 +0100
commit123ba3b46acd16d420b82d5a25c5a4c50135afe6 (patch)
tree7199741670cfcc43debc665fa243d6fb1ec37f5b /lib/editor.ml
parentd096051f807441d8a55d44ae55ee1f9463d6d808 (diff)
downloadsandy-123ba3b46acd16d420b82d5a25c5a4c50135afe6.tar.gz
sandy-123ba3b46acd16d420b82d5a25c5a4c50135afe6.zip
feat: add support for "instant" normal commands (like [J]oin)
Diffstat (limited to 'lib/editor.ml')
-rw-r--r--lib/editor.ml57
1 files changed, 44 insertions, 13 deletions
diff --git a/lib/editor.ml b/lib/editor.ml
index 2e031e1..adc9994 100644
--- a/lib/editor.ml
+++ b/lib/editor.ml
@@ -228,37 +228,68 @@ let handle_normal_command =
228 (* | Key 'x' | Delete -> Buffer.Action.delete_after |> on_focused_buffer_or_new *) 228 (* | Key 'x' | Delete -> Buffer.Action.delete_after |> on_focused_buffer_or_new *)
229 (* | Key 'X' -> Buffer.Action.delete_before |> on_focused_buffer_or_new *) 229 (* | Key 'X' -> Buffer.Action.delete_before |> on_focused_buffer_or_new *)
230 (* | Key '$' -> Buffer.Action.eol |> on_focused_buffer_or_new *) 230 (* | Key '$' -> Buffer.Action.eol |> on_focused_buffer_or_new *)
231 | Shortcut (_, n, Change, Line) -> 231 (* Change *)
232 | Shortcut (_, n, Change) ->
232 let n = Option.value ~default:1 n - 1 in 233 let n = Option.value ~default:1 n - 1 in
234 (Buffer.Action.(
235 delete_to_eol &> move_down &> delete_lines ~n &> move_up &> eol)
236 |> on_focused_buffer_or_new)
237 *> set_mode Insert
238 | Chord (_, n1, Change, n2, Line) ->
239 let n = Option.((value ~default:1 n1 * value ~default:1 n2) - 1) in
240 (Buffer.Action.(delete_lines ~n &> bol &> delete_to_eol)
241 |> on_focused_buffer_or_new)
242 *> set_mode Insert
243 | Chord (_, n1, Change, n2, Down) ->
244 let n = Option.(value ~default:1 n1 * value ~default:1 n2) in
233 (Buffer.Action.(delete_lines ~n &> bol &> delete_to_eol) 245 (Buffer.Action.(delete_lines ~n &> bol &> delete_to_eol)
234 |> on_focused_buffer_or_new) 246 |> on_focused_buffer_or_new)
235 *> set_mode Insert 247 *> set_mode Insert
236 | Shortcut (_, _, Change, To_eol) -> 248 | Chord (_, n1, Change, n2, Left) ->
237 (Buffer.Action.delete_to_eol |> on_focused_buffer_or_new) 249 let n = Option.(value ~default:1 n1 * value ~default:1 n2) in
250 (Buffer.Action.delete_before ~n |> on_focused_buffer_or_new)
238 *> set_mode Insert 251 *> set_mode Insert
239 | Shortcut (_, _, Change, To_bol) -> 252 | Chord (_, n1, Change, n2, Right) ->
240 (Buffer.Action.delete_to_bol |> on_focused_buffer_or_new) 253 let n = Option.(value ~default:1 n1 * value ~default:1 n2) in
254 (Buffer.Action.delete_after ~n |> on_focused_buffer_or_new)
255 *> set_mode Insert
256 | Chord (_, n1, Change, n2, Up) ->
257 let n = Option.(value ~default:1 n1 * value ~default:1 n2) in
258 (Buffer.Action.(bol &> delete_to_eol &> delete_lines_before ~n)
259 |> on_focused_buffer_or_new)
241 *> set_mode Insert 260 *> set_mode Insert
242 (* Delete *) 261 (* Delete *)
262 | Shortcut (_, n, Delete) ->
263 let n = Option.value ~default:1 n - 1 in
264 Buffer.Action.(
265 delete_to_eol &> move_down &> delete_lines ~n &> move_up &> eol)
266 |> on_focused_buffer_or_new
267 | Chord (_, n1, Delete, n2, Line) ->
268 let n = Option.(value ~default:1 n1 * value ~default:1 n2) in
269 Buffer.Action.delete_lines ~n |> on_focused_buffer_or_new
243 | Chord (_, n1, Delete, n2, Down) -> 270 | Chord (_, n1, Delete, n2, Down) ->
244 let n = Option.((value ~default:1 n1 * value ~default:1 n2) + 1) in 271 let n = Option.((value ~default:1 n1 * value ~default:1 n2) + 1) in
245 Buffer.Action.delete_lines ~n |> on_focused_buffer_or_new 272 Buffer.Action.delete_lines ~n |> on_focused_buffer_or_new
246 | Chord (_, n1, Delete, n2, Left) -> 273 | Chord (_, n1, Delete, n2, Left) ->
247 let n = Option.(value ~default:1 n1 * value ~default:1 n2) in 274 let n = Option.(value ~default:1 n1 * value ~default:1 n2) in
248 Buffer.Action.delete_before ~n |> on_focused_buffer_or_new 275 Buffer.Action.delete_before ~n |> on_focused_buffer_or_new
276 | Shortcut (_, n, Erase_before) ->
277 let n = Option.(value ~default:1 n) in
278 Buffer.Action.delete_before ~n |> on_focused_buffer_or_new
249 | Chord (_, n1, Delete, n2, Right) -> 279 | Chord (_, n1, Delete, n2, Right) ->
250 let n = Option.(value ~default:1 n1 * value ~default:1 n2) in 280 let n = Option.(value ~default:1 n1 * value ~default:1 n2) in
251 Buffer.Action.delete_after ~n |> on_focused_buffer_or_new 281 Buffer.Action.delete_after ~n |> on_focused_buffer_or_new
282 | Shortcut (_, n, Erase_after) ->
283 let n = Option.(value ~default:1 n) in
284 Buffer.Action.delete_after ~n |> on_focused_buffer_or_new
252 | Chord (_, n1, Delete, n2, Up) -> 285 | Chord (_, n1, Delete, n2, Up) ->
253 let n = Option.((value ~default:1 n1 * value ~default:1 n2) + 1) in 286 let n = Option.(value ~default:1 n1 * value ~default:1 n2) in
254 Buffer.Action.delete_lines_before ~n |> on_focused_buffer_or_new 287 Buffer.Action.(delete_lines ~n:1 &> delete_lines_before ~n)
255 | Shortcut (_, n, Delete, Line) ->
256 Buffer.Action.delete_lines ~n:Option.(value ~default:1 n)
257 |> on_focused_buffer_or_new 288 |> on_focused_buffer_or_new
258 | Shortcut (_, _, Delete, To_eol) -> 289 (* Join *)
259 Buffer.Action.delete_to_eol |> on_focused_buffer_or_new 290 | Shortcut (_, n, Join) ->
260 | Shortcut (_, _, Delete, To_bol) -> 291 let n = Option.(value ~default:1 n) in
261 Buffer.Action.delete_to_bol |> on_focused_buffer_or_new 292 Buffer.Action.join_lines ~n |> on_focused_buffer_or_new
262 | _ -> noop 293 | _ -> noop
263 294
264let handle_next_command m e = 295let handle_next_command m e =