@@ -556,33 +556,57 @@ def action_previous_diff(self, *args):
556556 def action_next_diff (self , * args ):
557557 self .go_to_chunk (self .cursor .next )
558558
559- def push_change (self , direction ):
560- src = self ._get_focused_pane ()
561- dst = src + direction
562- chunk = self .linediffer .get_chunk (self .cursor .chunk , src , dst )
563- assert (src != - 1 and self .cursor .chunk is not None )
564- assert (dst in (0 , 1 , 2 ))
565- assert (chunk is not None )
566- self .replace_chunk (src , dst , chunk )
559+ def get_action_chunk (self , src , dst ):
560+ valid_panes = list (range (0 , self .num_panes ))
561+ if (src not in valid_panes or dst not in valid_panes or
562+ self .cursor .chunk is None ):
563+ raise ValueError ("Action was taken on invalid panes" )
567564
568- def pull_change (self , direction ):
569- dst = self ._get_focused_pane ()
570- src = dst + direction
571565 chunk = self .linediffer .get_chunk (self .cursor .chunk , src , dst )
572- assert (dst != - 1 and self .cursor .chunk is not None )
573- assert (src in (0 , 1 , 2 ))
574- assert (chunk is not None )
575- self .replace_chunk (src , dst , chunk )
566+ if chunk is None :
567+ raise ValueError ("Action was taken on a missing chunk" )
568+ return chunk
576569
577- def copy_change (self , direction , copy_direction ):
570+ def get_action_panes (self , direction , reverse = False ):
578571 src = self ._get_focused_pane ()
579572 dst = src + direction
580- chunk = self .linediffer .get_chunk (self .cursor .chunk , src , dst )
581- assert (src != - 1 and self .cursor .chunk is not None )
582- assert (dst in (0 , 1 , 2 ))
583- assert (chunk is not None )
584- copy_up = True if copy_direction < 0 else False
585- self .copy_chunk (src , dst , chunk , copy_up )
573+ return (dst , src ) if reverse else (src , dst )
574+
575+ def action_push_change_left (self , * args ):
576+ src , dst = self .get_action_panes (- 1 )
577+ self .replace_chunk (src , dst , self .get_action_chunk (src , dst ))
578+
579+ def action_push_change_right (self , * args ):
580+ src , dst = self .get_action_panes (+ 1 )
581+ self .replace_chunk (src , dst , self .get_action_chunk (src , dst ))
582+
583+ def action_pull_change_left (self , * args ):
584+ src , dst = self .get_action_panes (- 1 , reverse = True )
585+ self .replace_chunk (src , dst , self .get_action_chunk (src , dst ))
586+
587+ def action_pull_change_right (self , * args ):
588+ src , dst = self .get_action_panes (+ 1 , reverse = True )
589+ self .replace_chunk (src , dst , self .get_action_chunk (src , dst ))
590+
591+ def action_copy_change_left_up (self , * args ):
592+ src , dst = self .get_action_panes (- 1 )
593+ self .copy_chunk (
594+ src , dst , self .get_action_chunk (src , dst ), copy_up = True )
595+
596+ def action_copy_change_right_up (self , * args ):
597+ src , dst = self .get_action_panes (+ 1 )
598+ self .copy_chunk (
599+ src , dst , self .get_action_chunk (src , dst ), copy_up = True )
600+
601+ def action_copy_change_left_down (self , * args ):
602+ src , dst = self .get_action_panes (- 1 )
603+ self .copy_chunk (
604+ src , dst , self .get_action_chunk (src , dst ), copy_up = False )
605+
606+ def action_copy_change_right_down (self , * args ):
607+ src , dst = self .get_action_panes (+ 1 )
608+ self .copy_chunk (
609+ src , dst , self .get_action_chunk (src , dst ), copy_up = False )
586610
587611 def pull_all_non_conflicting_changes (self , direction ):
588612 assert direction in (- 1 , 1 )
0 commit comments