24 import Utilities |
24 import Utilities |
25 |
25 |
26 import UI.PixmapCache |
26 import UI.PixmapCache |
27 |
27 |
28 from .ShellHistoryDialog import ShellHistoryDialog |
28 from .ShellHistoryDialog import ShellHistoryDialog |
|
29 |
29 |
30 |
30 class Terminal(QsciScintillaCompat): |
31 class Terminal(QsciScintillaCompat): |
31 """ |
32 """ |
32 Class implementing a simple terminal based on QScintilla. |
33 Class implementing a simple terminal based on QScintilla. |
33 |
34 |
34 A user can enter commands that are executed by a shell process. |
35 A user can enter commands that are executed by a shell process. |
35 """ |
36 """ |
36 def __init__(self, vm, parent = None): |
37 def __init__(self, vm, parent=None): |
37 """ |
38 """ |
38 Constructor |
39 Constructor |
39 |
40 |
40 @param vm reference to the viewmanager object |
41 @param vm reference to the viewmanager object |
41 @param parent parent widget (QWidget) |
42 @param parent parent widget (QWidget) |
126 |
127 |
127 self.incrementalSearchString = "" |
128 self.incrementalSearchString = "" |
128 self.incrementalSearchActive = False |
129 self.incrementalSearchActive = False |
129 |
130 |
130 self.supportedEditorCommands = { |
131 self.supportedEditorCommands = { |
131 QsciScintilla.SCI_LINEDELETE : self.__clearCurrentLine, |
132 QsciScintilla.SCI_LINEDELETE: self.__clearCurrentLine, |
132 QsciScintilla.SCI_NEWLINE : self.__QScintillaNewline, |
133 QsciScintilla.SCI_NEWLINE: self.__QScintillaNewline, |
133 |
134 |
134 QsciScintilla.SCI_DELETEBACK : self.__QScintillaDeleteBack, |
135 QsciScintilla.SCI_DELETEBACK: self.__QScintillaDeleteBack, |
135 QsciScintilla.SCI_CLEAR : self.__QScintillaDelete, |
136 QsciScintilla.SCI_CLEAR: self.__QScintillaDelete, |
136 QsciScintilla.SCI_DELWORDLEFT : self.__QScintillaDeleteWordLeft, |
137 QsciScintilla.SCI_DELWORDLEFT: self.__QScintillaDeleteWordLeft, |
137 QsciScintilla.SCI_DELWORDRIGHT : self.__QScintillaDeleteWordRight, |
138 QsciScintilla.SCI_DELWORDRIGHT: self.__QScintillaDeleteWordRight, |
138 QsciScintilla.SCI_DELLINELEFT : self.__QScintillaDeleteLineLeft, |
139 QsciScintilla.SCI_DELLINELEFT: self.__QScintillaDeleteLineLeft, |
139 QsciScintilla.SCI_DELLINERIGHT : self.__QScintillaDeleteLineRight, |
140 QsciScintilla.SCI_DELLINERIGHT: self.__QScintillaDeleteLineRight, |
140 |
141 |
141 QsciScintilla.SCI_CHARLEFT : self.__QScintillaCharLeft, |
142 QsciScintilla.SCI_CHARLEFT: self.__QScintillaCharLeft, |
142 QsciScintilla.SCI_CHARRIGHT : self.__QScintillaCharRight, |
143 QsciScintilla.SCI_CHARRIGHT: self.__QScintillaCharRight, |
143 QsciScintilla.SCI_WORDLEFT : self.__QScintillaWordLeft, |
144 QsciScintilla.SCI_WORDLEFT: self.__QScintillaWordLeft, |
144 QsciScintilla.SCI_WORDRIGHT : self.__QScintillaWordRight, |
145 QsciScintilla.SCI_WORDRIGHT: self.__QScintillaWordRight, |
145 QsciScintilla.SCI_VCHOME : self.__QScintillaVCHome, |
146 QsciScintilla.SCI_VCHOME: self.__QScintillaVCHome, |
146 QsciScintilla.SCI_LINEEND : self.__QScintillaLineEnd, |
147 QsciScintilla.SCI_LINEEND: self.__QScintillaLineEnd, |
147 QsciScintilla.SCI_LINEUP : self.__QScintillaLineUp, |
148 QsciScintilla.SCI_LINEUP: self.__QScintillaLineUp, |
148 QsciScintilla.SCI_LINEDOWN : self.__QScintillaLineDown, |
149 QsciScintilla.SCI_LINEDOWN: self.__QScintillaLineDown, |
149 |
150 |
150 QsciScintilla.SCI_CHARLEFTEXTEND : self.__QScintillaCharLeftExtend, |
151 QsciScintilla.SCI_CHARLEFTEXTEND: self.__QScintillaCharLeftExtend, |
151 QsciScintilla.SCI_CHARRIGHTEXTEND : self.extendSelectionRight, |
152 QsciScintilla.SCI_CHARRIGHTEXTEND: self.extendSelectionRight, |
152 QsciScintilla.SCI_WORDLEFTEXTEND : self.__QScintillaWordLeftExtend, |
153 QsciScintilla.SCI_WORDLEFTEXTEND: self.__QScintillaWordLeftExtend, |
153 QsciScintilla.SCI_WORDRIGHTEXTEND : self.extendSelectionWordRight, |
154 QsciScintilla.SCI_WORDRIGHTEXTEND: self.extendSelectionWordRight, |
154 QsciScintilla.SCI_VCHOMEEXTEND : self.__QScintillaVCHomeExtend, |
155 QsciScintilla.SCI_VCHOMEEXTEND: self.__QScintillaVCHomeExtend, |
155 QsciScintilla.SCI_LINEENDEXTEND : self.extendSelectionToEOL, |
156 QsciScintilla.SCI_LINEENDEXTEND: self.extendSelectionToEOL, |
156 } |
157 } |
157 |
158 |
158 self.__ioEncoding = Preferences.getSystem("IOEncoding") |
159 self.__ioEncoding = Preferences.getSystem("IOEncoding") |
159 |
160 |
160 self.__process = QProcess() |
161 self.__process = QProcess() |
780 self.setSelection(self.prline, self.prcol,\ |
781 self.setSelection(self.prline, self.prcol,\ |
781 self.prline, self.lineLength(self.prline)) |
782 self.prline, self.lineLength(self.prline)) |
782 self.removeSelectedText() |
783 self.removeSelectedText() |
783 self.__insertText(cmd) |
784 self.__insertText(cmd) |
784 |
785 |
785 def __searchHistory(self, txt, startIdx = -1): |
786 def __searchHistory(self, txt, startIdx=-1): |
786 """ |
787 """ |
787 Private method used to search the history. |
788 Private method used to search the history. |
788 |
789 |
789 @param txt text to match at the beginning (string) |
790 @param txt text to match at the beginning (string) |
790 @param startIdx index to start search from (integer) |
791 @param startIdx index to start search from (integer) |
932 l = len(txt) |
933 l = len(txt) |
933 line, col = self.getCursorPosition() |
934 line, col = self.getCursorPosition() |
934 self.insertAt(txt, line, col) |
935 self.insertAt(txt, line, col) |
935 if re.search(self.linesepRegExp, txt) is not None: |
936 if re.search(self.linesepRegExp, txt) is not None: |
936 line += 1 |
937 line += 1 |
937 self.setCursorPosition(line, col + l) |
938 self.setCursorPosition(line, col + l) |
938 |
939 |
939 def __configure(self): |
940 def __configure(self): |
940 """ |
941 """ |
941 Private method to open the configuration dialog. |
942 Private method to open the configuration dialog. |
942 """ |
943 """ |