You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 1250c8d
Browse filesBrowse the repository at this point in the historyBrowse files
| Rendering | hand-rolled on crossterm | Editors need fine cursor control + minimal diffed repaints. (`ratatui` optional for chrome only — modeline/minibuffer.) |
176
176
| Text buffer |`ropey`| O(log n) edits and slices on million-line files; cheap to view-slice for rendering. |
177
+
| Text boundaries |`unicode-segmentation`| Extended grapheme clusters are the user-visible editing unit. |
178
+
| Display width |`unicode-width`| Complete grapheme clusters map to terminal cells without splitting Unicode sequences. |
| File watching |`notify`| inotify/FSEvents/etc. for the (optional, later) auto-reload path. |
@@ -192,11 +194,16 @@ Both a *file window* and a *terminal pane* are leaves in the same window-layout
192
194
- Backed by a `ropey::Rope`. (A `Vec<String>` is acceptable for the very first prototype, but `ropey` is the intended default and the migration is cheap.)
193
195
- Tracks: the rope, a dirty flag, the file path, and file metadata needed for save/reload behavior.
194
196
- Point, mark, and scroll offset belong to the window/editor view state, not solely to the buffer.
197
+
- Point and mark use Rope character indices but may rest only at extended grapheme cluster boundaries.
198
+
- Horizontal movement, deletion, selection, kill, yank, undo, and redo operate on complete extended grapheme clusters.
199
+
- Vertical movement preserves terminal cell columns and never places point inside a grapheme cluster.
195
200
- Multiple buffers held in a buffer list; one is active.
196
201
- Undo/redo: an edit-history stack (group keystrokes into sensible undo units; Emacs-style undo can come later).
197
202
198
203
### 6.2 Renderer
199
204
-**Diffed paint.** Maintain a shadow of the last drawn screen; only emit escape codes for cells that changed. This is the difference between flicker and butter, and it directly serves the latency goal.
205
+
- Display width is measured for complete grapheme clusters, and clipping includes or excludes each cluster as a whole.
206
+
- Tabs keep four-column tab stops, normal clusters use their reported one or two cells, and standalone zero-width clusters use one visible editor cell.
200
207
- Viewport: scroll offset + visible range derived from point.
201
208
- Line wrapping handled explicitly (soft-wrap toggle is a later nicety).
0 commit comments