Internal Sparse Array - libtmux._internal.sparse_array¶
Warning
Be careful with these! Internal APIs are not covered by version policies. They can break or be removed between minor versions!
If you need an internal API stabilized please file an issue.
Sparse array for libtmux options and hooks.
-
libtmux._internal.sparse_array.is_sparse_array_list(items)¶
- Parameters:
items (ExplodedComplexUntypedOptionsDict)
- Return type:
TypeGuard[HookArray]
-
class libtmux._internal.sparse_array.SparseArray¶
Bases:
dict[int,T],Generic[T]Support non-sequential indexes while maintaining
list-like behavior.A normal
listwould raiseIndexError.There are no native sparse arrays in python that contain non-sequential indexes and maintain list-like behavior. This is useful for handling libtmux options and hooks:
command-alias[1] split-pane=split-windowto{'command-alias[1]': {'split-pane=split-window'}}listwould lose indice info, anddictwould lose list-like behavior.Examples
Create a sparse array and add values at non-sequential indices:
>>> from libtmux._internal.sparse_array import SparseArray
>>> arr: SparseArray[str] = SparseArray() >>> arr.add(0, "first hook command") >>> arr.add(5, "fifth hook command") >>> arr.add(2, "second hook command")
Access values by index (dict-style):
>>> arr[0] 'first hook command' >>> arr[5] 'fifth hook command'
Check index existence:
>>> 0 in arr True >>> 3 in arr False
Iterate values in sorted index order:
>>> list(arr.iter_values()) ['first hook command', 'second hook command', 'fifth hook command']
Convert to a list (values only, sorted by index):
>>> arr.as_list() ['first hook command', 'second hook command', 'fifth hook command']
Append adds at max index + 1:
>>> arr.append("appended command") >>> arr[6] 'appended command'
Access raw indices:
>>> sorted(arr.keys()) [0, 2, 5, 6]