Skip to content

Commit d6b120a

Browse files
authored
Make PageUp/PageDown and CtrlPageUp/CtrlPageDown windows only (#1032)
On Unix platforms, `Console.SetWindowPosition` throw `PlatformNotSupportedException`.
1 parent 76f9c4c commit d6b120a

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

PSReadLine/KeyBindings.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -229,10 +229,6 @@ void SetDefaultWindowsBindings()
229229
{ Keys.ShiftF3, MakeKeyHandler(CharacterSearchBackward, "CharacterSearchBackward") },
230230
{ Keys.F8, MakeKeyHandler(HistorySearchBackward, "HistorySearchBackward") },
231231
{ Keys.ShiftF8, MakeKeyHandler(HistorySearchForward, "HistorySearchForward") },
232-
{ Keys.PageUp, MakeKeyHandler(ScrollDisplayUp, "ScrollDisplayUp") },
233-
{ Keys.PageDown, MakeKeyHandler(ScrollDisplayDown, "ScrollDisplayDown") },
234-
{ Keys.CtrlPageUp, MakeKeyHandler(ScrollDisplayUpLine, "ScrollDisplayUpLine") },
235-
{ Keys.CtrlPageDown, MakeKeyHandler(ScrollDisplayDownLine, "ScrollDisplayDownLine") },
236232
// Added for xtermjs-based terminals that send different key combinations.
237233
{ Keys.AltD, MakeKeyHandler(KillWord, "KillWord") },
238234
{ Keys.CtrlAt, MakeKeyHandler(MenuComplete, "MenuComplete") },
@@ -247,6 +243,13 @@ void SetDefaultWindowsBindings()
247243
_dispatchTable.Add(Keys.CtrlDelete, MakeKeyHandler(KillWord, "KillWord"));
248244
_dispatchTable.Add(Keys.CtrlEnd, MakeKeyHandler(ForwardDeleteLine, "ForwardDeleteLine"));
249245
_dispatchTable.Add(Keys.CtrlH, MakeKeyHandler(BackwardDeleteChar,"BackwardDeleteChar"));
246+
247+
// PageUp/PageDown and CtrlPageUp/CtrlPageDown bindings are supported on Windows only because they depend on the
248+
// API 'Console.SetWindowPosition', which throws 'PlatformNotSupportedException' on unix platforms.
249+
_dispatchTable.Add(Keys.PageUp, MakeKeyHandler(ScrollDisplayUp, "ScrollDisplayUp"));
250+
_dispatchTable.Add(Keys.PageDown, MakeKeyHandler(ScrollDisplayDown, "ScrollDisplayDown"));
251+
_dispatchTable.Add(Keys.CtrlPageUp, MakeKeyHandler(ScrollDisplayUpLine, "ScrollDisplayUpLine"));
252+
_dispatchTable.Add(Keys.CtrlPageDown, MakeKeyHandler(ScrollDisplayDownLine, "ScrollDisplayDownLine"));
250253
}
251254

252255
_chordDispatchTable = new Dictionary<PSKeyInfo, Dictionary<PSKeyInfo, KeyHandler>>();
@@ -324,8 +327,6 @@ void SetDefaultEmacsBindings()
324327
{ Keys.AltPeriod, MakeKeyHandler(YankLastArg, "YankLastArg") },
325328
{ Keys.AltUnderbar, MakeKeyHandler(YankLastArg, "YankLastArg") },
326329
{ Keys.CtrlAltY, MakeKeyHandler(YankNthArg, "YankNthArg") },
327-
{ Keys.PageUp, MakeKeyHandler(ScrollDisplayUp, "ScrollDisplayUp") },
328-
{ Keys.PageDown, MakeKeyHandler(ScrollDisplayDown, "ScrollDisplayDown") },
329330
};
330331

331332
// Some bindings are not available on certain platforms
@@ -335,8 +336,13 @@ void SetDefaultEmacsBindings()
335336
_dispatchTable.Add(Keys.CtrlSpace, MakeKeyHandler(MenuComplete, "MenuComplete"));
336337
_dispatchTable.Add(Keys.CtrlEnd, MakeKeyHandler(ScrollDisplayToCursor, "ScrollDisplayToCursor"));
337338
_dispatchTable.Add(Keys.CtrlHome, MakeKeyHandler(ScrollDisplayTop, "ScrollDisplayTop"));
338-
_dispatchTable.Add(Keys.CtrlPageDown, MakeKeyHandler(ScrollDisplayDownLine, "ScrollDisplayDownLine"));
339+
340+
// PageUp/PageDown and CtrlPageUp/CtrlPageDown bindings are supported on Windows only because they depend on the
341+
// API 'Console.SetWindowPosition', which throws 'PlatformNotSupportedException' on unix platforms.
342+
_dispatchTable.Add(Keys.PageUp, MakeKeyHandler(ScrollDisplayUp, "ScrollDisplayUp"));
343+
_dispatchTable.Add(Keys.PageDown, MakeKeyHandler(ScrollDisplayDown, "ScrollDisplayDown"));
339344
_dispatchTable.Add(Keys.CtrlPageUp, MakeKeyHandler(ScrollDisplayUpLine, "ScrollDisplayUpLine"));
345+
_dispatchTable.Add(Keys.CtrlPageDown, MakeKeyHandler(ScrollDisplayDownLine, "ScrollDisplayDownLine"));
340346
}
341347
else
342348
{

0 commit comments

Comments
 (0)