Beispiel #1
0
 def insert_text(self, text, at_end=False, error=False, prompt=False):
     """
     Insert text at the current cursor position
     or at the end of the command line
     """
     if at_end:
         # Insert text at the end of the command line
         self.append_text_to_shell(text, error, prompt)
     else:
         # Insert text at current cursor position
         ConsoleBaseWidget.insert_text(self, text)
Beispiel #2
0
 def mouseMoveEvent(self, event):
     """Show Pointing Hand Cursor on error messages"""
     text = self.get_line_at(event.pos())
     if get_error_match(text):
         if not self.__cursor_changed:
             QApplication.setOverrideCursor(QCursor(Qt.PointingHandCursor))
             self.__cursor_changed = True
         event.accept()
         return
     if self.__cursor_changed:
         QApplication.restoreOverrideCursor()
         self.__cursor_changed = False
     ConsoleBaseWidget.mouseMoveEvent(self, event)
Beispiel #3
0
 def mousePressEvent(self, event):
     """
     Re-implemented to handle the mouse press event.
     event: the mouse press event (QMouseEvent)
     """
     if event.button() == Qt.MidButton:
         text = self.selectedText()
         # Simulating left mouse button:
         event = QMouseEvent(QMouseEvent.MouseButtonPress, event.pos(), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier)
         ConsoleBaseWidget.mousePressEvent(self, event)
         if self.new_input_line:
             self.on_new_line()
         self.insert_text(text)
         event.accept()
     else:
         ConsoleBaseWidget.mousePressEvent(self, event)
Beispiel #4
0
 def focusNextPrevChild(self, next):
     """
     Reimplemented to stop Tab moving to the next window
     """
     if next:
         return False
     return ConsoleBaseWidget.focusNextPrevChild(self, next)
Beispiel #5
0
    def __init__(self, parent, history_filename, debug=False, profile=False):
        """
        parent : specifies the parent widget
        """
        ConsoleBaseWidget.__init__(self, parent)

        # Prompt position: tuple (line, index)
        self.current_prompt_pos = None
        self.new_input_line = True

        # History
        self.histidx = None
        self.hist_wholeline = False
        assert isinstance(history_filename, (str, unicode))
        self.history_filename = history_filename
        self.history = self.load_history()

        # Session
        self.historylog_filename = CONF.get("main", "historylog_filename", get_conf_path("history.log"))

        # Context menu
        self.menu = None
        self.setup_context_menu()

        # Debug mode
        self.debug = debug

        # Simple profiling test
        self.profile = profile

        # write/flush
        self.__buffer = []
        self.__timestamp = 0.0

        # Give focus to widget
        self.setFocus()
Beispiel #6
0
 def setup(self):
     """Reimplement ConsoleBaseWidget method"""
     ConsoleBaseWidget.setup(self)
     self.set_caret(color=Qt.darkGray, width=2)
     self.remove_margins()  # Suppressing Scintilla margins
Beispiel #7
0
 def leaveEvent(self, event):
     """If cursor has not been restored yet, do it now"""
     if self.__cursor_changed:
         QApplication.restoreOverrideCursor()
         self.__cursor_changed = False
     ConsoleBaseWidget.leaveEvent(self, event)
Beispiel #8
0
 def mouseReleaseEvent(self, event):
     """Go to error"""
     ConsoleBaseWidget.mouseReleaseEvent(self, event)
     text = self.get_line_at(event.pos())
     if get_error_match(text) and not self.hasSelectedText():
         self.emit(SIGNAL("go_to_error(QString)"), text)
Beispiel #9
0
    def postprocess_keyevent(self, event):
        """Post-process keypress event:
        in InternalShell, this is method is called when shell is ready"""
        event, text, key, ctrl, shift = restore_keyevent(event)

        # Is cursor on the last line? and after prompt?
        if len(text):
            # XXX: Shouldn't it be: `if len(unicode(text).strip(os.linesep))` ?
            if self.hasSelectedText():
                self.check_selection()
            self.restrict_cursor_position(self.current_prompt_pos, "eof")

        cursor_position = self.get_position("cursor")

        if key in (Qt.Key_Return, Qt.Key_Enter):
            if self.is_cursor_on_last_line():
                self._key_enter()
            # add and run selection
            else:
                text = self.selectedText()
                self.insert_text(text, at_end=True)
            event.accept()

        elif key == Qt.Key_Delete:
            if self.hasSelectedText():
                self.check_selection()
                self.removeSelectedText()
            elif self.is_cursor_on_last_line():
                self.stdkey_clear()
            event.accept()

        elif key == Qt.Key_Backspace:
            self._key_backspace(cursor_position)
            event.accept()

        elif key == Qt.Key_Tab:
            self._key_tab()
            event.accept()

        elif key == Qt.Key_Left:
            event.accept()
            if self.current_prompt_pos == cursor_position:
                # Avoid moving cursor on prompt
                return
            method = self.extend_selection_to_next if shift else self.move_cursor_to_next
            method("word" if ctrl else "character", direction="left")

        elif key == Qt.Key_Right:
            event.accept()
            if self.is_cursor_at_end():
                return
            method = self.extend_selection_to_next if shift else self.move_cursor_to_next
            method("word" if ctrl else "character", direction="right")

        elif (key == Qt.Key_Home) or ((key == Qt.Key_Up) and ctrl):
            self._key_home(shift)
            event.accept()

        elif (key == Qt.Key_End) or ((key == Qt.Key_Down) and ctrl):
            self._key_end(shift)
            event.accept()

        elif key == Qt.Key_Up:
            if not self.is_cursor_on_last_line():
                self.set_cursor_position("eof")
            y_cursor = self.get_coordinates(cursor_position)[1]
            y_prompt = self.get_coordinates(self.current_prompt_pos)[1]
            if self.is_completion_widget_visible() or y_cursor > y_prompt:
                self.stdkey_up(shift)
            else:
                self.browse_history(backward=True)
            event.accept()

        elif key == Qt.Key_Down:
            if not self.is_cursor_on_last_line():
                self.set_cursor_position("eof")
            y_cursor = self.get_coordinates(cursor_position)[1]
            y_end = self.get_coordinates("eol")[1]
            if self.is_completion_widget_visible() or y_cursor < y_end:
                self.stdkey_down(shift)
            else:
                self.browse_history(backward=False)
            event.accept()

        elif key in (Qt.Key_PageUp, Qt.Key_PageDown):
            # XXX: Find a way to do this programmatically instead of calling
            # widget keyhandler (this won't work if the *event* is coming from
            # the event queue - i.e. if the busy buffer is ever implemented)
            ConsoleBaseWidget.keyPressEvent(self, event)

        elif key == Qt.Key_Escape:
            self._key_escape()
            event.accept()

        elif key == Qt.Key_V and ctrl:
            self.paste()
            event.accept()

        elif key == Qt.Key_X and ctrl:
            self.cut()
            event.accept()

        elif key == Qt.Key_Z and ctrl:
            self.undo()
            event.accept()

        elif key == Qt.Key_Y and ctrl:
            self.redo()
            event.accept()

        elif key == Qt.Key_A and ctrl:
            self.selectAll()
            event.accept()

        elif key == Qt.Key_Question and not self.hasSelectedText():
            self._key_question(text)
            event.accept()

        elif key == Qt.Key_ParenLeft and not self.hasSelectedText():
            self._key_parenleft(text)
            event.accept()

        elif key == Qt.Key_Period and not self.hasSelectedText():
            self._key_period(text)
            event.accept()

        elif ((key == Qt.Key_Plus) and ctrl) or ((key == Qt.Key_Equal) and shift and ctrl):
            self.zoomIn()
            event.accept()

        elif (key == Qt.Key_Minus) and ctrl:
            self.zoomOut()
            event.accept()

        elif text.length() and not self.isReadOnly():
            self.hist_wholeline = False
            self.insert_text(text)
            self._key_other(text)
            event.accept()

        else:
            # Let the parent widget handle the key press event
            event.ignore()
Beispiel #10
0
 def paste(self):
     """Reimplemented slot to handle multiline paste action"""
     if self.new_input_line:
         self.on_new_line()
     ConsoleBaseWidget.paste(self)
Beispiel #11
0
 def delete(self):
     """Remove selected text"""
     self.check_selection()
     if self.hasSelectedText():
         ConsoleBaseWidget.removeSelectedText(self)
Beispiel #12
0
 def cut(self):
     """Cut text"""
     self.check_selection()
     if self.hasSelectedText():
         ConsoleBaseWidget.cut(self)