Skip to content

The Tab System ​

Xed-Editor uses a flexible tab system to manage open files and tools. You can interact with tabs to open new files, switch between documents, or add custom views.

Accessing the Tab Manager ​

The TabManager is responsible for the lifecycle of all open tabs. You can access it via the MainViewModel.

kotlin
val mainViewModel = MainActivity.instance?.viewModel
val tabManager = mainViewModel?.tabManager

Managing Tabs ​

The TabManager provides several methods to control the open tabs.

Reading State ​

  • tabs: A list of all open Tab objects.
  • currentTab: The tab that the user is currently looking at (can be null).
  • currentTabIndex: The index of the active tab in the list.

Adding Tabs ​

  • addTab(tab, switchToTab, checkDuplicate = true): Adds a new tab to the app.
    • switchToTab: If true, the app immediately focuses the new tab.
    • checkDuplicate: If true, the manager checks if the tab is already open using the equals() method. If a duplicate is found, the existing tab is focused instead of adding a new one.

NOTE

EditorTab overrides equals() to compare the underlying file (or in some cases the title). This means if you try to open the same file twice with checkDuplicate = true, Xed-Editor will simply switch to the existing tab.

Removing Tabs ​

  • removeTab(index: Int): Closes the tab at the specific position.
  • removeTab(tab: Tab): Closes the specific tab instance.

Other Operations ​

  • moveTab(from, to): Switches the position of two tabs in the list.
  • setCurrentTab(index): Programmatically switches the active tab.
  • removeOtherTabs(): Closes everything except the current tab.
  • removeAllTabs(): Closes every single open tab.

Types of Tabs ​

There are several built-in tab types:

  • EditorTab: The most common tab, used for editing/viewing text files.
  • ImageTab: Used for viewing images.
  • Custom Tab: Any tab that extends the Tab abstract class.

EditorTab Variants ​

EditorTab itself can behave differently depending on how it was created:

  • File-based Tab: Linked to a physical file on the device. Changes can be saved back to the file.
  • Temporary Tab: Not linked to a file. Used for "Untitled" documents or quick notes. Asks for a location on save.
  • Preview Tab: A read-only tab used to show content like Markdown or HTML previews.

Editor Manager ​

For specifically opening files or editor tabs, use the EditorManager. It provides shortcuts for creating and adding EditorTab instances.

kotlin
val mainViewModel = MainActivity.instance?.viewModel
val editorManager = mainViewModel.editorManager

Reading Editor Tabs ​

If you only care about tabs that contain a code editor, use the tabs property on the EditorManager:

kotlin
val editorTabs: List<EditorTab> = editorManager.tabs

Opening and Managing Editors ​

The EditorManager offers several ways to handle editor-specific tasks:

  • openFile(file, projectRoot, switchToTab, checkDuplicate): The standard way to open a file. It automatically handles things like large file warnings and prevents opening the same file twice if checkDuplicate is true.
  • addEditorTab(...): Creates and adds a new editor tab in one call.
  • createEditorTab(...): A factory method to create an EditorTab without adding it to the UI yet. This is useful if you want to configure the tab before showing it.
  • jumpToPosition(file, projectRoot, lineStart, charStart, lineEnd, charEnd): A very useful method that opens a file (or switches to it if already open) and highlights a specific text range.
  • addPreviewTab(title, content, extension, isReadOnly = true): Opens a temporary tab (by default also read-only) with the given text. Great for showing build logs or generated documentation.