eandualem / eandualem/tmux-workspaces

Add selectable and typed persistent workspace glyphs with plain-text fallback

Closed
#33 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
1
Forks
0
Avg merge
2h 12m
Merged PRs (30d)
40

Description

[from:tmux-workspaces]

## Problem

Users identify workspaces by purpose, but the compact switcher primarily represents them by numbers and text. Let each workspace carry a selected or typed glyph that remains associated with that purpose across navigation and reopening.

## Evidence and scope

Reviewed main `4d3d213` on 2026-09-08. `model.workspace()` stores ID, name, tabs and selection; there is no workspace icon field or editor. Workspace buttons use labels derived from position/name. The request is persistent user-chosen workspace identity, not merely replacing decorative button characters.

## Acceptance criteria

- [ ] Add an optional workspace glyph field with a picker of conservative choices and a typed-entry path. Offer clear/reset and keyboard operation; changing a glyph does not rename the workspace or alter tab/session associations.
- [ ] Display the selected glyph in the workspace switcher and relevant current-workspace label while retaining a readable name/number fallback and stable click targets.
- [ ] Define supported Unicode/grapheme and display-cell-width behavior. Reject controls, escape sequences, newlines and unsupported zero-width-only input; do not truncate inside a supported cluster. Prevent wide glyphs or combining marks from shifting neighboring hit areas at narrow widths.
- [ ] Provide a plain ASCII/no-icons mode. Terminals cannot reliably report font glyph coverage; do not promise automatic missing-glyph detection or require installing a special font. Document any restricted glyph set or emoji-width limitation honestly.
- [ ] Persist and validate the field using stable workspace IDs and the existing library concurrency model. Older saved libraries without icons still open; concurrent independent edits merge, same-field conflicts are surfaced, and stale/deleted workspace targets cannot change another workspace.
- [ ] Preserve labels, icons and layout through exit/reopen, workspace reorder/deletion and concurrent viewers. Test save failure, corrupt/unsupported glyph input, width/overflow and keyboard/mouse targeting with disposable libraries and PTYs.
- [ ] Obtain owner visual acceptance for the selected compact presentation. Keep the purpose-based arrangement and pull-attention positioning.

## Dependencies and limits

Prioritize landing the existing PRs individually. Depends on the existing validated persistence layer; use #1 for picker/menu keyboard navigation and coordinate with navigation controls #29 and theme work #32 only where they share rendering. This adds no agent status rings, unread badges, notifications, automatic state-driven icon changes, font installation or process lifecycle control.

Finish only after actionable review feedback is addressed, the PR is merged and this issue is verified closed. Preserve user libraries and external sessions.

Contributor guide

Open the contributing guide

Research direction

Start by tracing model.workspace() and the existing validated persistence layer, then inspect the workspace switcher and current-workspace label behavior. Review PR #1 and coordinate with navigation controls #29 and theme work #32 where rendering overlaps. Done means persistent validated glyphs, fallback and ASCII mode, stable layout and targeting, concurrency-safe saves, and coverage with disposable libraries and PTYs.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.