From 7d009e0ca4a1af10cc6d31fb5982e38dcab9ee71 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Mon, 22 Jan 2024 23:46:37 +0100 Subject: feat: add support for rendering text (i.e. tabs) This allows to have differences between the "raw" content of the buffer and its visualization on screen. At the time of writing this handles the rendering of tabs (i.e. '\t') as a fixed amount of spaces, but will be useful for syntax highlighting as well. --- lib/editor.ml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'lib/editor.ml') diff --git a/lib/editor.ml b/lib/editor.ml index f91e66d..69dc666 100644 --- a/lib/editor.ml +++ b/lib/editor.ml @@ -11,6 +11,7 @@ type editor = { offset : int * int; cursor : cursor; buffer : Buffer.t option; + rendered : bool; pending : Key.t Sequence.t; i_pending : Command.t Sequence.t; n_pending : Command.t Sequence.t; @@ -25,6 +26,7 @@ let init (c : Config.t) : editor = offset = (0, 0); cursor = (1, 1); buffer = List.hd c.files |> Option.map ~f:Buffer.from_file; + rendered = true; pending = Key.stream; i_pending = Command.i_stream; n_pending = Command.n_stream; @@ -104,10 +106,13 @@ module Action = struct let aux e = let x, y = e.offset and ((r, c) as size) = e.term.size - and fill = Sequence.singleton '~' in + and fill = Sequence.singleton '~' + and limit = + Buffer.(if e.rendered then rendered_view else unrendered_view) + in let view = Option.( - e.buffer >>| Buffer.view x y r c + e.buffer >>| limit x y r c |> value ~default:(welcome size) |> Text.extend ~fill r) in @@ -117,6 +122,11 @@ module Action = struct (* TODO: save logic *) let quit n = Stdlib.exit n + + (* Debug *) + let get_rendered e = (e.rendered, e) + let set_rendered r e = ((), { e with rendered = r }) + let toggle_rendered = get_rendered >>| not >>= set_rendered let noop = return () end @@ -352,6 +362,8 @@ let handle_normal_command = (* | Key 's' -> *) (* (Buffer.Action.delete_after |> on_focused_buffer_or_new) *) (* *> set_mode Insert *) + (* Debug *) + | Simple (Ctrl 'R') -> toggle_rendered | _ -> noop let handle_next_command m e = -- cgit v1.2.3