diff options
author | Federico Igne <undyamon@disroot.org> | 2024-01-12 19:00:24 +0100 |
---|---|---|
committer | Federico Igne <undyamon@disroot.org> | 2024-01-12 19:00:24 +0100 |
commit | 123ba3b46acd16d420b82d5a25c5a4c50135afe6 (patch) | |
tree | 7199741670cfcc43debc665fa243d6fb1ec37f5b /lib/editor.ml | |
parent | d096051f807441d8a55d44ae55ee1f9463d6d808 (diff) | |
download | sandy-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.ml | 57 |
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 | ||
264 | let handle_next_command m e = | 295 | let handle_next_command m e = |