diff --git a/src/Gen3Hex.Core/ViewModels/ViewPort.cs b/src/Gen3Hex.Core/ViewModels/ViewPort.cs index 92e073a0..7b5c800e 100644 --- a/src/Gen3Hex.Core/ViewModels/ViewPort.cs +++ b/src/Gen3Hex.Core/ViewModels/ViewPort.cs @@ -305,7 +305,12 @@ namespace HavenSoft.Gen3Hex.Core.ViewModels { } var run = Model.GetNextRun(index - 1) ?? new NoInfoRun(int.MaxValue); - if (run.Start <= index - 1 && run.Start + run.Length > index - 1) { + if (run is PCSRun pcs) { + for (int i = index - 1; i < run.Start + run.Length; i++) Model[i] = 0xFF; + var length = PCSString.ReadString(Model, run.Start); + Model.ObserveRunWritten(new PCSRun(run.Start, length, run.PointerSources)); + RefreshBackingData(); + } else if (run.Start <= index - 1 && run.Start + run.Length > index - 1) { // I want to do a backspace at the end of this run SelectionStart = scroll.DataIndexToViewPoint(run.Start); var cellToText = new ConvertCellToText(Model, run.Start); diff --git a/src/Gen3Hex.Tests/StringModelTests.cs b/src/Gen3Hex.Tests/StringModelTests.cs index 9fba02b3..e41c93bf 100644 --- a/src/Gen3Hex.Tests/StringModelTests.cs +++ b/src/Gen3Hex.Tests/StringModelTests.cs @@ -186,7 +186,21 @@ namespace HavenSoft.Gen3Hex.Tests { Assert.Equal(string.Empty, ((Anchor)viewPort[0, 0].Format).Format); } - // test: backspace + [Fact] + public void UsingBackspaceMidStringMakesTheStringEndThere() { + var buffer = Enumerable.Repeat((byte)0xFF, 0x200).ToArray(); + for (int i = 0; i < 0x10; i++) buffer[i] = 0x00; + var model = new PointerAndStringModel(buffer); + var viewPort = new ViewPort(new LoadedFile("test.txt", buffer), model) { Width = 0x10, Height = 0x10 }; + + // add an anchor with some data on the 2nd line + viewPort.SelectionStart = new Point(0, 1); + viewPort.Edit("^bob\"\" \"Hello World!\""); + viewPort.SelectionStart = new Point(6, 1); + viewPort.Edit(ConsoleKey.Backspace); + + Assert.Equal("Hello\"", ((PCSString.Convert(model, 0x10, PCSString.ReadString(model, 0x10))))); + } // TODO escape sequences