diff options
author | Rory Dudley | 2024-12-12 17:59:32 -0700 |
---|---|---|
committer | Rory Dudley | 2024-12-12 18:05:00 -0700 |
commit | fa9ec0c377305126f4c810be198bdca68d71a275 (patch) | |
tree | bdcd76287cf46384762454aad4ae841ac7a2539b /src/poem/read.rs | |
parent | 07e75b3f63001ca509df8d5b5a33336ab994814f (diff) | |
download | dwarvish-fa9ec0c377305126f4c810be198bdca68d71a275.tar.gz |
Rewrite of the buffer code + proper UTF-8 support
This patch rewrites much of the code in src/buffer.rs to (utlimately),
be less buggy. It also changed getchar() to have proper support for
UTF-8 characters. The autocomplete function was also enhanced to support
completions with filenames that have spaces in their paths. It handles
these by placing a backslash ('\') before each space in the filename.
There is not yet any completion support with quote ('), nor double-quote
characters ("). The buffer is still navigable with arrow keys, so
arbitrary deletions and insertions are still possible. Deletions and
insertions with multi-width UTF-8 characters work as expected.
Signed-off-by: Rory Dudley <rory@netc.lu>
Notes
Notes:
The complection function only works if the cursor is at the end of the
buffer. Pressing tab anywhere else will result in functionally a no op.
Diffstat (limited to 'src/poem/read.rs')
-rw-r--r-- | src/poem/read.rs | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/poem/read.rs b/src/poem/read.rs index baf6a1d..8b83e58 100644 --- a/src/poem/read.rs +++ b/src/poem/read.rs @@ -357,7 +357,16 @@ impl Readable for Poem { channel = Some(Rune::Notes); } verse.add(&mut word, channel); - channel = Some(rune); + if last != Rune::Read + && last != Rune::Write + && last != Rune::Write2 + && last != Rune::WriteAll + && last != Rune::Addendum + && last != Rune::Addendum2 + && last != Rune::AddendumAll + { + channel = Some(rune); + } } Rune::Special => { @@ -383,15 +392,6 @@ impl Readable for Poem { poem!(chars, j, i, c, verse, word, env); } - // Indicates an environment variable to fork with, - // if the verse's stanza is empty so far - // Rune::Environment => { - // word.push(c); - // if verse.is_empty() { - // channel = Some(rune); - // } - // } - // Indicates a file operation (<, >, or >>) Rune::Read | Rune::Write @@ -402,7 +402,6 @@ impl Readable for Poem { | Rune::AddendumAll => { channel = Some(rune); verse.add(&mut word, channel); - // channel = Some(rune); verse.io.push(rune); } |