@@ -186,20 +186,45 @@ public class SetKeyHandlerCommand : PSCmdlet
186
186
[ ValidateNotNullOrEmpty ]
187
187
public string [ ] Chord { get ; set ; }
188
188
189
- [ Parameter ( Position = 1 , Mandatory = true ) ]
189
+ [ Parameter ( Position = 1 , Mandatory = true , ParameterSetName = "Custom" ) ]
190
190
[ ValidateNotNull ]
191
- public Action < ConsoleKeyInfo ? , object > Handler { get ; set ; }
191
+ public ScriptBlock Handler { get ; set ; }
192
192
193
- [ Parameter ( Mandatory = true ) ]
193
+ [ Parameter ( ParameterSetName = "Custom" ) ]
194
194
public string BriefDescription { get ; set ; }
195
195
196
- [ Parameter ]
196
+ [ Parameter ( ParameterSetName = "Custom" ) ]
197
197
public string LongDescription { get ; set ; }
198
198
199
+ // ValidateSet attribute is generated by the script GenerateBuiltinList
200
+ [ ValidateSet ( "AcceptLine" , "AddLine" , "BackwardChar" , "BackwardDeleteChar" ,
201
+ "BackwardDeleteLine" , "BackwardKillLine" , "BackwardWord" , "BeginningOfHistory" , "BeginningOfLine" ,
202
+ "CancelLine" , "Complete" , "DeleteChar" , "DisableDemoMode" , "EmacsBackwardWord" ,
203
+ "EmacsForwardWord" , "EnableDemoMode" , "EndOfHistory" , "EndOfLine" , "ExchangePointAndMark" ,
204
+ "ForwardChar" , "ForwardDeleteLine" , "ForwardWord" , "HistorySearchBackward" , "HistorySearchForward" ,
205
+ "KillBackwardWord" , "KillLine" , "KillWord" , "NextHistory" , "Paste" ,
206
+ "PossibleCompletions" , "PreviousHistory" , "Redo" , "RevertLine" , "SetKeyHandler" ,
207
+ "SetMark" , "TabCompleteNext" , "TabCompletePrevious" , "Undo" , "Yank" ,
208
+ "YankPop" ) ]
209
+ [ Parameter ( Position = 1 , Mandatory = true , ParameterSetName = "Builtin" ) ]
210
+ public string Builtin { get ; set ; }
211
+
199
212
[ ExcludeFromCodeCoverage ]
200
213
protected override void EndProcessing ( )
201
214
{
202
- PSConsoleReadLine . SetKeyHandler ( Chord , Handler , BriefDescription , LongDescription ) ;
215
+ Action < ConsoleKeyInfo ? , object > keyHandler ;
216
+ if ( ParameterSetName . Equals ( "Builtin" ) )
217
+ {
218
+ keyHandler = ( Action < ConsoleKeyInfo ? , object > )
219
+ Delegate . CreateDelegate ( typeof ( Action < ConsoleKeyInfo ? , object > ) ,
220
+ typeof ( PSConsoleReadLine ) . GetMethod ( Builtin ) ) ;
221
+ BriefDescription = Builtin ;
222
+ }
223
+ else
224
+ {
225
+ keyHandler = ( key , arg ) => Handler . Invoke ( key , arg ) ;
226
+ }
227
+ PSConsoleReadLine . SetKeyHandler ( Chord , keyHandler , BriefDescription , LongDescription ) ;
203
228
}
204
229
}
205
230
0 commit comments