@@ -111,6 +111,16 @@ public ContextMenu CreateChangeContextMenu(Models.Change change)
111111 ev . Handled = true ;
112112 } ;
113113
114+ var openWith = new MenuItem ( ) ;
115+ openWith . Header = App . Text ( "OpenWith" ) ;
116+ openWith . Icon = App . CreateMenuIcon ( "Icons.OpenWith" ) ;
117+ openWith . IsEnabled = change . Index != Models . ChangeState . Deleted ;
118+ openWith . Click += async ( _ , ev ) =>
119+ {
120+ await vm . OpenRevisionFileWithDefaultEditorAsync ( change . Path ) ;
121+ ev . Handled = true ;
122+ } ;
123+
114124 var fullPath = Native . OS . GetAbsPath ( repo . FullPath , change . Path ) ;
115125 var explore = new MenuItem ( ) ;
116126 explore . Header = App . Text ( "RevealFile" ) ;
@@ -167,6 +177,7 @@ public ContextMenu CreateChangeContextMenu(Models.Change change)
167177
168178 var menu = new ContextMenu ( ) ;
169179 menu . Items . Add ( openWithMerger ) ;
180+ menu . Items . Add ( openWith ) ;
170181 menu . Items . Add ( explore ) ;
171182 menu . Items . Add ( new MenuItem { Header = "-" } ) ;
172183 menu . Items . Add ( history ) ;
@@ -293,24 +304,30 @@ public ContextMenu CreateChangeContextMenu(Models.Change change)
293304
294305 private async void OnCommitListKeyDown ( object sender , KeyEventArgs e )
295306 {
296- if ( DataContext is ViewModels . CommitDetail detail &&
297- sender is ListBox { SelectedItem : Models . Change change } &&
307+ if ( DataContext is not ViewModels . CommitDetail vm )
308+ return ;
309+
310+ if ( sender is not ListBox { SelectedItem : Models . Change change } )
311+ return ;
312+
313+ if ( e . Key == Key . C &&
298314 e . KeyModifiers . HasFlag ( OperatingSystem . IsMacOS ( ) ? KeyModifiers . Meta : KeyModifiers . Control ) )
299315 {
300- if ( e . Key == Key . C )
301- {
302- var path = change . Path ;
303- if ( e . KeyModifiers . HasFlag ( KeyModifiers . Shift ) )
304- path = detail . GetAbsPath ( path ) ;
316+ if ( e . KeyModifiers . HasFlag ( KeyModifiers . Shift ) )
317+ await App . CopyTextAsync ( vm . GetAbsPath ( change . Path ) ) ;
318+ else
319+ await App . CopyTextAsync ( change . Path ) ;
305320
306- await App . CopyTextAsync ( path ) ;
307- e . Handled = true ;
308- }
309- else if ( e . Key == Key . D && e . KeyModifiers . HasFlag ( KeyModifiers . Shift ) )
310- {
311- detail . OpenChangeInMergeTool ( change ) ;
312- e . Handled = true ;
313- }
321+ e . Handled = true ;
322+ return ;
323+ }
324+
325+ if ( e . Key == Key . D &&
326+ e . KeyModifiers . HasFlag ( OperatingSystem . IsMacOS ( ) ? KeyModifiers . Meta : KeyModifiers . Control ) &&
327+ e . KeyModifiers . HasFlag ( KeyModifiers . Shift ) )
328+ {
329+ vm . OpenChangeInMergeTool ( change ) ;
330+ e . Handled = true ;
314331 }
315332 }
316333
0 commit comments