diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/handlers/CCRenameHandler.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/handlers/CCRenameHandler.java
index e98ba1ab133f..9814a6631fe2 100644
--- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/handlers/CCRenameHandler.java
+++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/handlers/CCRenameHandler.java
@@ -4,6 +4,7 @@ import com.intellij.ide.projectView.ProjectView;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.text.StringUtil;
@@ -50,6 +51,10 @@ public abstract class CCRenameHandler implements RenameHandler {
}
rename(project, course, directory);
ProjectView.getInstance(project).refresh();
+ FileEditorManagerEx managerEx = FileEditorManagerEx.getInstanceEx(project);
+ for (VirtualFile virtualFile : managerEx.getOpenFiles()) {
+ managerEx.updateFilePresentation(virtualFile);
+ }
}
protected abstract void rename(@NotNull Project project, @NotNull Course course, @NotNull PsiDirectory directory);
diff --git a/python/educational-core/student/resources/META-INF/plugin.xml b/python/educational-core/student/resources/META-INF/plugin.xml
index a5ac8e742d05..c0ad88e0a788 100644
--- a/python/educational-core/student/resources/META-INF/plugin.xml
+++ b/python/educational-core/student/resources/META-INF/plugin.xml
@@ -106,6 +106,7 @@
+
diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyTabTitleProvider.java b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyTabTitleProvider.java
new file mode 100644
index 000000000000..e2a96a1d6c42
--- /dev/null
+++ b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyTabTitleProvider.java
@@ -0,0 +1,45 @@
+package com.jetbrains.edu.learning;
+
+import com.intellij.openapi.fileEditor.impl.EditorTabTitleProvider;
+import com.intellij.openapi.fileEditor.impl.UniqueNameEditorTabTitleProvider;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.jetbrains.edu.learning.core.EduNames;
+import com.jetbrains.edu.learning.courseFormat.Lesson;
+import com.jetbrains.edu.learning.courseFormat.Task;
+import com.jetbrains.edu.learning.courseFormat.TaskFile;
+import org.jetbrains.annotations.Nullable;
+
+import java.io.File;
+
+public class StudyTabTitleProvider implements EditorTabTitleProvider {
+ @Nullable
+ @Override
+ public String getEditorTabTitle(Project project, VirtualFile file) {
+ TaskFile taskFile = StudyUtils.getTaskFile(project, file);
+ if (taskFile == null) {
+ return null;
+ }
+ String title = new UniqueNameEditorTabTitleProvider().getEditorTabTitle(project, file);
+ if (title == null) {
+ return null;
+ }
+ String[] split = title.split(File.separator);
+ for (int i = 0; i < split.length; i++) {
+ String part = split[i];
+ Task task = taskFile.getTask();
+ VirtualFile taskDir = task.getTaskDir(project);
+ if (taskDir != null && part.equals(taskDir.getName())) {
+ split[i] = task.getName();
+ continue;
+ }
+ Lesson lesson = task.getLesson();
+ int lessonIndex = lesson.getIndex();
+ if (part.equals(EduNames.LESSON + lessonIndex)) {
+ split[i] = lesson.getName();
+ }
+ }
+ return StringUtil.join(split, File.separator);
+ }
+}