Exemplo n.º 1
0
Arquivo: base.py Projeto: lerouxb/ni
    def delete_selection(self):
        """
        Common code for deleting a selection used by many edit actions.
        """

        view = self.view
        doc = view.document

        # delete the selection
        selection = view.selection.get_normalised()
        d = DeleteDelta(doc, selection.start, selection.end - selection.start + 1)
        d.do()
        self.deltas.append(d)
        view.selection = None

        # move the cursor (insert point) to the start of where the selection
        # was before we deleted it
        view.cursor_pos = doc.offset_to_cursor_pos(selection.start)
Exemplo n.º 2
0
 def do(self):
     view = self.view
     doc = view.document
     
     if view.selection:
         self.delete_selection()
     
     else:
         offset = doc.cursor_pos_to_offset(view.cursor_pos)
         
         # if we're at the end of the file, do nothing
         if offset >= len(doc.content)-1:
             return
         
         # delete the character under the cursor            
         d = DeleteDelta(doc, offset, 1)
         d.do()
         self.deltas.append(d)
Exemplo n.º 3
0
Arquivo: base.py Projeto: lerouxb/ni
    def do(self):
        view = self.view
        doc = view.document
        settings = self.editor.settings

        if view.selection:
            selection = view.selection.get_normalised()
            from_line = doc.offset_to_cursor_pos(selection.start)[0]
            to_line = doc.offset_to_cursor_pos(selection.end)[0]
        else:
            from_line = view.cursor_pos[0]
            to_line = from_line

        for y in xrange(from_line, to_line + 1):
            line = doc.get_line(y)
            offset = doc.cursor_pos_to_offset((y, 0))
            if line[: len(self.comment_string)] == self.comment_string:
                d = DeleteDelta(doc, offset, len(self.comment_string))
            else:
                d = InsertDelta(doc, offset, self.comment_string)
            d.do()
            self.deltas.append(d)

        # move the cursor if necessary
        y, x = view.cursor_pos
        line = doc.get_line(y)
        if line[: len(self.comment_string)] == self.comment_string:
            # we added comment_string, so increase cursor pos
            if x != 0:
                x += len(self.comment_string)
                if x > len(line):
                    x = len(line)
                view.cursor_pos = (y, x)
        else:
            # we removed comment_string, so decrease cursor pos
            x -= len(self.comment_string)
            if x < 0:
                x = 0
            view.cursor_pos = (y, x)

        # not sure how best to grow/shrink the selection right now,
        # so just destroying it for now
        view.selection = None
Exemplo n.º 4
0
 def do(self):
     view = self.view
     doc = view.document
     
     if view.selection:
         self.delete_selection()
     
     else:
         offset = doc.cursor_pos_to_offset(view.cursor_pos)
         
         # if we're at the start of the file, do nothing
         if offset <= 0:
             return
         
         # delete the character before the cursor            
         d = DeleteDelta(doc, offset-1, 1)
         d.do()
         self.deltas.append(d)
         
         view.cursor_pos = doc.offset_to_cursor_pos(offset-1)
Exemplo n.º 5
0
 def do(self):
     view = self.view
     doc = view.document
     settings = self.editor.settings
     
     if view.selection:
         # unindent the selection
         selection = view.selection.get_normalised()
         
         # selections that grow upwards need slightly different 
         # attention to selections that grow downwards
         if selection.start == view.selection.start:
             selection_direction = "down"
         else:
             selection_direction = "up"
         
         # convert the offsets and unpack
         start_pos = doc.offset_to_cursor_pos(selection.start)
         start_y, start_x = start_pos
         end_pos = doc.offset_to_cursor_pos(selection.end)
         end_y, end_x = end_pos
         
         # add the delete deltas
         spaces_per_line = []
         for y in xrange(start_y, end_y+1):
             line = doc.get_line(y).replace('\t', u' '*settings.tab_size)
             oline = line
             for i in xrange(settings.indent_width):
                 if line and line[0] == u' ':
                     line = line[1:]
                 else:
                     break
             num_spaces = len(oline)-len(line)
             spaces_per_line.append(num_spaces)
             if num_spaces:
                 offset = doc.cursor_pos_to_offset((y, 0))
                 d = DeleteDelta(doc, offset, num_spaces)
                 d.do()
                 self.deltas.append(d)
          
         if selection_direction == "down":
             start_x -= spaces_per_line[0]
             if start_x < 0:
                 start_x = 0
             view.selection.start = doc.cursor_pos_to_offset(
                 (start_y, start_x))                
             end_x -= spaces_per_line[-1]
             if end_x < 0:
                 end_x = 0
             view.selection.end = doc.cursor_pos_to_offset((end_y, end_x))
         else:
             start_x -= spaces_per_line[-1]
             if start_x < 0:
                 start_x = 0
             view.selection.start = doc.cursor_pos_to_offset(
                 (start_y, start_x))                
             end_x -= spaces_per_line[0]
             if end_x < 0:
                 end_x = 0
             view.selection.end = doc.cursor_pos_to_offset((end_y, end_x))
         
     else:
         # unindent only the current line
         y, x = view.cursor_pos 
         line = doc.get_line(y).replace('\t', u' '*settings.tab_size)
         oline = line
         for i in xrange(settings.indent_width):
             if line and line[0] == u' ':
                 line = line[1:]
             else:
                 break
         num_spaces = len(oline)-len(line)
         if num_spaces:
             offset = doc.cursor_pos_to_offset((y, 0))
             d = DeleteDelta(doc, offset, num_spaces)
             d.do()
             self.deltas.append(d)
             x -= num_spaces
             if x < 0:
                 x = 0
             view.cursor_pos = (y, x)