diff --git a/PSReadLine/BasicEditing.cs b/PSReadLine/BasicEditing.cs index 91dcefc0..2af9dccd 100644 --- a/PSReadLine/BasicEditing.cs +++ b/PSReadLine/BasicEditing.cs @@ -115,19 +115,31 @@ public static void ForwardDeleteLine(ConsoleKeyInfo? key = null, object arg = nu } /// - /// Like BackwardKillLine - deletes text from the point to the start of the line, + /// Like BackwardKillLine - deletes text from the point to the start of the buffer, + /// but does not put the deleted text in the kill ring. + public static void BackwardDeleteBuffer(ConsoleKeyInfo? key = null, object arg = null) + { + BackwardDeleteSubstring(0, BackwardDeleteBuffer); + } + + /// + /// Like BackwardKillLine - deletes text from the point to the start of the logical line, /// but does not put the deleted text in the kill ring. /// public static void BackwardDeleteLine(ConsoleKeyInfo? key = null, object arg = null) { var position = GetBeginningOfLinePos(_singleton._current); + BackwardDeleteSubstring(position, BackwardDeleteLine); + } + private static void BackwardDeleteSubstring(int position, Action instigator = null) + { if (_singleton._current > position) { var count = _singleton._current - position; _clipboard.Record(_singleton._buffer, position, count); - _singleton.SaveEditItem(EditItemDelete.Create(_clipboard, position, BackwardDeleteLine)); + _singleton.SaveEditItem(EditItemDelete.Create(_clipboard, position, instigator)); _singleton._buffer.Remove(position, count); _singleton._current = position; _singleton.Render(); diff --git a/PSReadLine/KeyBindings.cs b/PSReadLine/KeyBindings.cs index edd049a5..80f7af28 100644 --- a/PSReadLine/KeyBindings.cs +++ b/PSReadLine/KeyBindings.cs @@ -209,7 +209,7 @@ void SetDefaultWindowsBindings() { Keys.CtrlY, MakeKeyHandler(Redo, "Redo") }, { Keys.CtrlZ, MakeKeyHandler(Undo, "Undo") }, { Keys.CtrlBackspace, MakeKeyHandler(BackwardKillWord, "BackwardKillWord") }, - { Keys.CtrlHome, MakeKeyHandler(BackwardDeleteLine, "BackwardDeleteLine") }, + { Keys.CtrlHome, MakeKeyHandler(BackwardDeleteBuffer, "BackwardDeleteBuffer") }, { Keys.CtrlRBracket, MakeKeyHandler(GotoBrace, "GotoBrace") }, { Keys.CtrlAltQuestion, MakeKeyHandler(ShowKeyBindings, "ShowKeyBindings") }, { Keys.AltPeriod, MakeKeyHandler(YankLastArg, "YankLastArg") }, @@ -388,6 +388,7 @@ public static KeyHandlerGroup GetDisplayGrouping(string function) case nameof(AcceptAndGetNext): case nameof(AcceptLine): case nameof(AddLine): + case nameof(BackwardDeleteBuffer): case nameof(BackwardDeleteChar): case nameof(BackwardDeleteLine): case nameof(BackwardDeleteWord): diff --git a/PSReadLine/KeyBindings.vi.cs b/PSReadLine/KeyBindings.vi.cs index e7772955..34fe959a 100644 --- a/PSReadLine/KeyBindings.vi.cs +++ b/PSReadLine/KeyBindings.vi.cs @@ -72,7 +72,7 @@ private void SetDefaultViBindings() { Keys.CtrlSpace, MakeKeyHandler(PossibleCompletions, "PossibleCompletions") }, { Keys.Tab, MakeKeyHandler(ViTabCompleteNext, "ViTabCompleteNext") }, { Keys.ShiftTab, MakeKeyHandler(ViTabCompletePrevious, "ViTabCompletePrevious") }, - { Keys.CtrlU, MakeKeyHandler(BackwardDeleteLine, "BackwardDeleteLine") }, + { Keys.CtrlU, MakeKeyHandler(BackwardDeleteBuffer, "BackwardDeleteBuffer") }, { Keys.CtrlV, MakeKeyHandler(Paste, "Paste") }, { Keys.CtrlC, MakeKeyHandler(CancelLine, "CancelLine") }, { Keys.CtrlL, MakeKeyHandler(ClearScreen, "ClearScreen") }, @@ -81,7 +81,7 @@ private void SetDefaultViBindings() { Keys.CtrlZ, MakeKeyHandler(Undo, "Undo") }, { Keys.CtrlBackspace, MakeKeyHandler(BackwardKillWord, "BackwardKillWord") }, { Keys.CtrlEnd, MakeKeyHandler(ForwardDeleteLine, "ForwardDeleteLine") }, - { Keys.CtrlHome, MakeKeyHandler(BackwardDeleteLine, "BackwardDeleteLine") }, + { Keys.CtrlHome, MakeKeyHandler(BackwardDeleteBuffer, "BackwardDeleteBuffer") }, { Keys.CtrlRBracket, MakeKeyHandler(GotoBrace, "GotoBrace") }, { Keys.F3, MakeKeyHandler(CharacterSearch, "CharacterSearch") }, { Keys.ShiftF3, MakeKeyHandler(CharacterSearchBackward,"CharacterSearchBackward") }, @@ -120,13 +120,13 @@ private void SetDefaultViBindings() { Keys.CtrlC, MakeKeyHandler(CancelLine, "CancelLine") }, { Keys.CtrlL, MakeKeyHandler(ClearScreen, "ClearScreen") }, { Keys.CtrlT, MakeKeyHandler(SwapCharacters, "SwapCharacters") }, - { Keys.CtrlU, MakeKeyHandler(BackwardDeleteLine, "BackwardDeleteLine") }, + { Keys.CtrlU, MakeKeyHandler(BackwardDeleteBuffer, "BackwardDeleteBuffer") }, { Keys.CtrlW, MakeKeyHandler(BackwardDeleteWord, "BackwardDeleteWord") }, { Keys.CtrlY, MakeKeyHandler(Redo, "Redo") }, { Keys.CtrlZ, MakeKeyHandler(Undo, "Undo") }, { Keys.CtrlBackspace, MakeKeyHandler(BackwardKillWord, "BackwardKillWord") }, { Keys.CtrlEnd, MakeKeyHandler(ForwardDeleteLine, "ForwardDeleteLine") }, - { Keys.CtrlHome, MakeKeyHandler(BackwardDeleteLine, "BackwardDeleteLine") }, + { Keys.CtrlHome, MakeKeyHandler(BackwardDeleteBuffer, "BackwardDeleteBuffer") }, { Keys.CtrlRBracket, MakeKeyHandler(GotoBrace, "GotoBrace") }, { Keys.F3, MakeKeyHandler(CharacterSearch, "CharacterSearch") }, { Keys.ShiftF3, MakeKeyHandler(CharacterSearchBackward, "CharacterSearchBackward") }, diff --git a/PSReadLine/PSReadLineResources.resx b/PSReadLine/PSReadLineResources.resx index 920a7ab3..60174699 100644 --- a/PSReadLine/PSReadLineResources.resx +++ b/PSReadLine/PSReadLineResources.resx @@ -126,6 +126,9 @@ Move the cursor back one character + + Delete text from the cursor to the start of the input + Delete the character before the cursor