QScintilla/Editor.py

branch
maintenance
changeset 6097
bf18415da0c7
parent 6050
25a4ddb25ca4
parent 6092
f0d60c3de700
child 6166
bace7fb85a01
--- a/QScintilla/Editor.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/QScintilla/Editor.py	Thu Jan 18 18:57:40 2018 +0100
@@ -547,7 +547,8 @@
         """
         Public method to add a clone to our list.
         
-        @param editor reference to the cloned editor (Editor)
+        @param editor reference to the cloned editor
+        @type Editor
         """
         self.__clones.append(editor)
         
@@ -560,7 +561,8 @@
         """
         Public method to remove a clone from our list.
         
-        @param editor reference to the cloned editor (Editor)
+        @param editor reference to the cloned editor
+        @type Editor
         """
         if editor in self.__clones:
             editor.editorRenamed.disconnect(self.fileRenamed)
@@ -569,6 +571,17 @@
             editor.encodingChanged.disconnect(self.__encodingChanged)
             self.__clones.remove(editor)
         
+    def isClone(self, editor):
+        """
+        Public method to test, if the given editor is a clone.
+        
+        @param editor reference to the cloned editor
+        @type Editor
+        @return flag indicating a clone
+        @rtype bool
+        """
+        return editor in self.__clones
+        
     def __bindName(self, line0):
         """
         Private method to generate a dummy filename for binding a lexer.
@@ -616,6 +629,15 @@
             elif "python" in line0:
                 bindName = "dummy.py"
                 self.filetype = "Python2"
+            elif "pypy3" in line0:
+                bindName = "dummy.py"
+                self.filetype = "Python3"
+            elif "pypy2" in line0:
+                bindName = "dummy.py"
+                self.filetype = "Python2"
+            elif "pypy" in line0:
+                bindName = "dummy.py"
+                self.filetype = "Python2"
             elif ("/bash" in line0 or "/sh" in line0):
                 bindName = "dummy.sh"
             elif "ruby" in line0:
@@ -630,6 +652,28 @@
                 self.filetype = "D"
         
         if not bindName:
+            # mode line detection: -*- mode: python -*-
+            match = re.search(r"mode[:=]\s*([-\w_.]+)", line0)
+            if match:
+                mode = match.group(1).lower()
+                if mode in ["python3", "pypy3"]:
+                    bindName = "dummy.py"
+                    self.filetype = "Python3"
+                elif mode in ["python2", "pypy2", "python", "pypy"]:
+                    bindName = "dummy.py"
+                    self.filetype = "Python2"
+                elif mode == "ruby":
+                    bindName = "dummy.rb"
+                    self.filetype = "Ruby"
+                elif mode == "perl":
+                    bindName = "dummy.pl"
+                elif mode == "lua":
+                    bindName = "dummy.lua"
+                elif mode in ["dmd", "d"]:
+                    bindName = "dummy.d"
+                    self.filetype = "D"
+        
+        if not bindName:
             bindName = self.fileName
         
         return bindName
@@ -705,10 +749,13 @@
         self.menuActs["Copy"] = self.menu.addAction(
             UI.PixmapCache.getIcon("editCopy.png"),
             self.tr('Copy'), self.copy)
-        self.menu.addAction(
+        self.menuActs["Paste"] = self.menu.addAction(
             UI.PixmapCache.getIcon("editPaste.png"),
             self.tr('Paste'), self.paste)
         if not self.miniMenu:
+            self.menuActs["ExecuteSelection"] = self.menu.addAction(
+                self.tr("Execute Selection In Console"),
+                self.__executeSelection)
             self.menu.addSeparator()
             self.menu.addAction(
                 UI.PixmapCache.getIcon("editIndent.png"),
@@ -734,7 +781,9 @@
             self.menu.addAction(self.tr('Select all'), self.__selectAll)
             self.menu.addAction(
                 self.tr('Deselect all'), self.__deselectAll)
-            self.menu.addSeparator()
+        else:
+            self.menuActs["ExecuteSelection"] = None
+        self.menu.addSeparator()
         self.menuActs["SpellCheck"] = self.menu.addAction(
             UI.PixmapCache.getIcon("spellchecking.png"),
             self.tr('Check spelling...'), self.checkSpelling)
@@ -1182,7 +1231,7 @@
                 self.tr('Previous change'), self.previousChange)
         self.marginMenuActs["ClearChangeMarkers"] = \
             self.indicMarginMenu.addAction(
-                self.tr('Clear changes'), self.__deleteAllChangeMarkers)
+                self.tr('Clear changes'), self.__reinitOnlineChangeTrace)
         
         self.indicMarginMenu.aboutToShow.connect(self.__showContextMenuMargin)
         
@@ -1253,7 +1302,7 @@
                 self.tr('Previous change'), self.previousChange)
         self.marginMenuActs["ClearChangeMarkers"] = \
             self.marginMenu.addAction(
-                self.tr('Clear changes'), self.__deleteAllChangeMarkers)
+                self.tr('Clear changes'), self.__reinitOnlineChangeTrace)
         self.marginMenu.addSeparator()
         self.marginMenuActs["LMBbookmarks"] = self.marginMenu.addAction(
             self.tr('LMB toggles bookmarks'), self.__lmBbookmarks)
@@ -5126,9 +5175,12 @@
         self.menuActs["Undo"].setEnabled(self.isUndoAvailable())
         self.menuActs["Redo"].setEnabled(self.isRedoAvailable())
         self.menuActs["Revert"].setEnabled(self.isModified())
-        if not self.miniMenu:
-            self.menuActs["Cut"].setEnabled(self.hasSelectedText())
-            self.menuActs["Copy"].setEnabled(self.hasSelectedText())
+        self.menuActs["Cut"].setEnabled(self.hasSelectedText())
+        self.menuActs["Copy"].setEnabled(self.hasSelectedText())
+        if self.menuActs["ExecuteSelection"] is not None:
+            self.menuActs["ExecuteSelection"].setEnabled(
+                self.hasSelectedText())
+        self.menuActs["Paste"].setEnabled(self.canPaste())
         if not self.isResourcesFile:
             if self.fileName and self.isPyFile():
                 self.menuActs["Show"].setEnabled(True)
@@ -6675,7 +6727,7 @@
         if evt.modifiers() & Qt.ControlModifier:
             if delta < 0:
                 self.zoomOut()
-            else:
+            elif delta > 0:
                 self.zoomIn()
             evt.accept()
             return
@@ -6683,7 +6735,7 @@
         if evt.modifiers() & Qt.ShiftModifier:
             if delta < 0:
                 self.gotoMethodClass(False)
-            else:
+            elif delta > 0:
                 self.gotoMethodClass(True)
             evt.accept()
             return
@@ -7136,7 +7188,7 @@
             self.completer.setEnabled(False)
     
     #######################################################################
-    ## Autocompleting templates
+    ## Auto-completing templates
     #######################################################################
     
     def editorCommand(self, cmd):
@@ -7957,3 +8009,10 @@
                 keys.append(key)
         for key in keys:
             del self.__mouseClickHandlers[key]
+    
+    def __executeSelection(self):
+        """
+        Private slot to execute the selected text in the shell window.
+        """
+        txt = self.selectedText()
+        e5App().getObject("Shell").executeLines(txt)

eric ide

mercurial