In the DSH Web GUI, switching sessions typically requires clicking or copy-pasting commands. The dsh-arrowkey-nav plugin solves this problem through keyboard shortcuts, allowing users to navigate between sessions and workspaces.

Core Features

  • Session Navigation: Within the current workspace, use ↑ to switch to the previous session and ↓ to switch to the next session.
  • Workspace Navigation: Use ← to switch to the previous workspace and → to switch to the next workspace.
  • Auto-Scrolling: After switching, the target row is automatically scrolled into view.
  • Focus Retention: If the focus was in the editor before the key was pressed, the focus returns to the editor after the key is released, so typing can continue.
  • Circular Navigation: When reaching the edge of a workspace or list, navigation automatically wraps around to the other end.

Installation and Enablement

The plugin is installed through DSH’s plugin system.

dsh plugin --profile web add dsh-arrowkey-nav -w

After installation, restart the profile and then reload the Web UI. You can verify the configuration with the following command:

dsh web --dump-config | Select-String dsh-arrowkey-nav

How It Works

The plugin does not rely on DOM node IDs. Instead, it switches sessions through the client controller. It reads the rendered order of the sidebar to determine the “next” and “previous” session, rather than relying on the order of the controller’s member list. This design ensures navigation remains valid when sessions are reordered.

Known Limitations

  • Collapsed Views Do Not Scroll: Collapsed workspace groups or sidebars do not trigger scrolling, although the switching action itself still works.
  • IME and Modifier Keys: If a key is already used by an input method or modifier key, the plugin does not intercept the key.
  • Editor State: An empty editor allows arrow-key navigation; once the editor contains a draft, arrow keys are handled by cursor movement instead.
  • Compatibility: Requires specific release versions of DSH 0.1.0 through 0.2.0.