--- a/eric6/QScintilla/Editor.py Fri Sep 27 14:49:42 2019 +0200 +++ b/eric6/QScintilla/Editor.py Sat Sep 28 18:44:48 2019 +0200 @@ -374,6 +374,8 @@ self.checkSyntax() self.isResourcesFile = self.fileName.endswith(".qrc") + self.__convertTabs() + self.recolor() else: # clone the given editor @@ -3005,17 +3007,6 @@ modified = False - if ( - (not self.__getEditorConfig("TabForIndentation")) and - Preferences.getEditor("ConvertTabsOnLoad") and - not (self.lexer_ and - self.lexer_.alwaysKeepTabs()) - ): - txtExpanded = txt.expandtabs(self.__getEditorConfig("TabWidth")) - if txtExpanded != txt: - modified = True - txt = txtExpanded - self.setText(txt) # get eric specific flags @@ -3037,7 +3028,26 @@ self.setModified(modified) self.lastModified = QFileInfo(self.fileName).lastModified() - + + def __convertTabs(self): + """ + Private slot to convert tabulators to spaces. + """ + if ( + (not self.__getEditorConfig("TabForIndentation")) and + Preferences.getEditor("ConvertTabsOnLoad") and + not (self.lexer_ and + self.lexer_.alwaysKeepTabs()) + ): + txt = self.text() + txtExpanded = txt.expandtabs(self.__getEditorConfig("TabWidth")) + if txtExpanded != txt: + self.beginUndoAction + self.setText(txt) + self.endUndoAction() + + self.setModified(True) + def __removeTrailingWhitespace(self): """ Private method to remove trailing whitespace. @@ -5577,6 +5587,7 @@ """ encoding = act.data() self.readFile(self.fileName, encoding=encoding) + self.__convertTabs() self.__checkEncoding() def __contextSave(self): @@ -7084,6 +7095,7 @@ # do not prompt for this change again... self.lastModified = QDateTime.currentDateTime() self.setModified(False) + self.__convertTabs() # re-initialize the online change tracer self.__reinitOnlineChangeTrace() @@ -8349,7 +8361,11 @@ if nodefault: return None else: - return Preferences.getEditor(option) + value = self.__getOverrideValue(option) + if value is None: + # no override + value = Preferences.getEditor(option) + return value try: if option == "EOLMode": @@ -8383,7 +8399,10 @@ if value is None and not nodefault: # use Preferences in case of error - value = Preferences.getEditor(option) + value = self.__getOverrideValue(option) + if value is None: + # no override + value = Preferences.getEditor(option) return value @@ -8398,6 +8417,25 @@ """ return self.__getEditorConfig(option) + def __getOverrideValue(self, option): + """ + Private method to get an override value for the current file type. + + @param option Preferences option key + @type str + @return override value; None in case nothing is defined + @rtype any + """ + if option in ("TabWidth", "IndentWidth"): + overrides = Preferences.getEditor("TabIndentOverride") + if self.filetype in overrides: + if option == "TabWidth": + return overrides[self.filetype][0] + elif option == "IndentWidth": + return overrides[self.filetype][1] + + return None + def mouseDoubleClickEvent(self, evt): """ Protected method to handle mouse double click events.