1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
//! **The roster**: the engines this seat reaches, as an accordion, with the
//! open one's workspaces under it (DESIGN §4.39).
//!
//! The grouping is the point. A seat holds one channel per workspace it
//! participates in elsewhere plus this box's own engine (§8.2), and those are
//! separate trust relationships that share nothing — not anchors, not leaves,
//! not addresses. Painting them as one flat list would say they are one thing.
//!
//! **At most one engine is open**, and it is painted first; the rest follow in
//! the order each was last opened on this seat, most recent first, the name
//! breaking a tie (`crate::ui::model::Engines`). A closed engine paints its
//! row and whatever it has to say about itself, and no walls. Opening one
//! closes the other, so the arrangement is one fact and not a set of flags.
//!
//! **A row carries the channel it came from as a client-side stamp** and no
//! origin ever crosses the wire; the stamp is applied where the answer is
//! absorbed ([`crate::ui::Model::absorb`]) and read here.
use crateWsRow;
use crate;
/// The four ops whose subject is every channel, and the strip they hang on.
/// One engine's row, the order the rows stand in, and the pane's cursor track.
/// One wall's row, and the five per-wall controls that hang off the aimed one.
pub use REFRESH;
pub use ;
pub use ;
/// **What a section says while nothing has come down its channel yet.**
///
/// The [`crate::ui::convs`] pane's doctrine one noun over: an empty list is not
/// evidence that a thing holds nothing until somebody has looked. It stands
/// from the window's first paint — which happens before any engine is dialled,
/// deliberately — until the first roster answer lands.
pub const NOT_ANSWERED: &str = "waiting to hear from this channel";
/// What a section says for an engine that answered and holds no workspace. A
/// fact about that engine, and the one empty state that is not a wait.
pub const NO_WALLS: &str =
"this engine holds no workspace — make one with yog on its box, then refresh";
/// The word this pane wears, and the subject the arrows act on when it is
/// focused. **It is painted by `crate::ui::shell`** — above the pane in the
/// broad shape, on the navigation bar in the narrow one (bl-dfda) — because a
/// column's name has one home and which one it is depends on the shape, and
/// the narrow bar's word follows this one for free.
///
/// **The word is *engines*, and the crate's word stays *channel*** (§4.39).
/// A channel is what this crate calls the client-side entry that reaches one
/// engine (§4.6), which is the right word for a thing in `wire/workspaces/`
/// and the wrong one over a list an operator reads: what they are looking at
/// is yogs, each by the name this box gave it.
pub const HEADING: &str = "engines";
/// Paint the roster and take a click on it. **The heading is the shell's** —
/// see [`HEADING`].
/// One engine's section: its row, what it has to say about itself, and — while
/// it is the open one — its walls.
///
/// **What it says about itself is painted open or closed** (bl-e620): the bar
/// holds one sentence and the last writer wins, so a seat with two unreachable
/// engines could discover only one of them from the glass. A channel that
/// cannot be dialled says so under its own row whether or not anybody has
/// opened it. What the accordion folds away is the WALLS.
/// The section header: what this box calls the channel, what its host calls the
/// workspace when the two differ, and **the address it dials**.
///
/// It takes the channel and not the chunk because the decision queue groups its
/// rows by channel too (`crate::ui::queue`), and two spellings of a section
/// header would be two things an operator has to reconcile.
///
/// The rename is here because a local rename is the remedy for a name
/// collision, and an operator has to be able to see one. The address is here
/// because the pane used to drop the one fact that explains a duplicate
/// (bl-77df): an entry whose `address` file holds what this box's own engine
/// listens on paints every workspace of that engine twice, under two headers,
/// with nothing on either saying they are the same server. `lernie entries`
/// prints the address under every row and the window did not.
/// **Pinned first, in pin order**, then the rest by name.
///
/// The rank is what makes this a sort rather than a filter: a seat given only a
/// flag would have to read the pin list back to order them, which is the seat
/// joining an answer against a document only the engine holds.