about summary refs log tree commit diff stats
path: root/browse-slack
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-08-13 15:43:35 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-08-13 15:43:35 -0700
commit1da16ed6c34ba9b600fd3092b2453f4536e91653 (patch)
treea6a57941f01a94d343dbe7d25b947e3bbceb8a88 /browse-slack
parentae01fd8c70ca31cba096e3d02f2ff9fbe067d101 (diff)
downloadmu-1da16ed6c34ba9b600fd3092b2453f4536e91653.tar.gz
slack: page-up on channel screen
Diffstat (limited to 'browse-slack')
-rw-r--r--browse-slack/environment.mu79
1 files changed, 65 insertions, 14 deletions
diff --git a/browse-slack/environment.mu b/browse-slack/environment.mu
index 4b460868..6f2b2406 100644
--- a/browse-slack/environment.mu
+++ b/browse-slack/environment.mu
@@ -618,8 +618,6 @@ fn all-items-page-down _current-tab: (addr tab), users: (addr array user), chann
     var item-text-ah/eax: (addr handle array byte) <- get item, text
     var item-text/eax: (addr array byte) <- lookup *item-text-ah
     var h/eax: int <- estimate-height item-text
-    set-cursor-position 0/screen, 0 0
-    draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, h, 4/fg 0/bg
     y <- add h
     new-item-index <- decrement
     loop
@@ -669,8 +667,6 @@ fn channel-page-down _current-tab: (addr tab), users: (addr array user), _channe
     var item-text-ah/eax: (addr handle array byte) <- get item, text
     var item-text/eax: (addr array byte) <- lookup *item-text-ah
     var h/eax: int <- estimate-height item-text
-    set-cursor-position 0/screen, 0 0
-    draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, h, 4/fg 0/bg
     y <- add h
     new-tab-item-index <- decrement
     loop
@@ -691,8 +687,31 @@ fn channel-page-down _current-tab: (addr tab), users: (addr array user), _channe
   copy-to *current-tab-item-index-addr, new-tab-item-index
 }
 
-fn page-up _env: (addr environment), users: (addr array user), channels: (addr array channel), _items: (addr item-list) {
+fn page-up _env: (addr environment), users: (addr array user), channels: (addr array channel), items: (addr item-list) {
   var env/edi: (addr environment) <- copy _env
+  var tabs-ah/eax: (addr handle array tab) <- get env, tabs
+  var _tabs/eax: (addr array tab) <- lookup *tabs-ah
+  var tabs/ecx: (addr array tab) <- copy _tabs
+  var current-tab-index-a/eax: (addr int) <- get env, current-tab-index
+  var current-tab-index/eax: int <- copy *current-tab-index-a
+  var current-tab-offset/eax: (offset tab) <- compute-offset tabs, current-tab-index
+  var current-tab/edx: (addr tab) <- index tabs, current-tab-offset
+  var current-tab-type/eax: (addr int) <- get current-tab, type
+  compare *current-tab-type, 0/all-items
+  {
+    break-if-!=
+    all-items-page-up current-tab, users, channels, items
+    return
+  }
+  compare *current-tab-type, 1/channel
+  {
+    break-if-!=
+    channel-page-up current-tab, users, channels, items
+    return
+  }
+}
+
+fn all-items-page-up _current-tab: (addr tab), users: (addr array user), channels: (addr array channel), _items: (addr item-list) {
   var items/esi: (addr item-list) <- copy _items
   var items-data-ah/eax: (addr handle array item) <- get items, data
   var _items-data/eax: (addr array item) <- lookup *items-data-ah
@@ -700,13 +719,7 @@ fn page-up _env: (addr environment), users: (addr array user), channels: (addr a
   var items-data-first-free-a/eax: (addr int) <- get items, data-first-free
   var final-item-index/esi: int <- copy *items-data-first-free-a
   final-item-index <- decrement
-  var tabs-ah/eax: (addr handle array tab) <- get env, tabs
-  var _tabs/eax: (addr array tab) <- lookup *tabs-ah
-  var tabs/ecx: (addr array tab) <- copy _tabs
-  var current-tab-index-a/eax: (addr int) <- get env, current-tab-index
-  var current-tab-index/eax: int <- copy *current-tab-index-a
-  var current-tab-offset/eax: (offset tab) <- compute-offset tabs, current-tab-index
-  var current-tab/eax: (addr tab) <- index tabs, current-tab-offset
+  var current-tab/eax: (addr tab) <- copy _current-tab
   var current-tab-item-index-addr/edi: (addr int) <- get current-tab, item-index
   var new-item-index/ecx: int <- copy *current-tab-item-index-addr
   var y/edx: int <- copy 2
@@ -720,8 +733,6 @@ fn page-up _env: (addr environment), users: (addr array user), channels: (addr a
     var item-text-ah/eax: (addr handle array byte) <- get item, text
     var item-text/eax: (addr array byte) <- lookup *item-text-ah
     var h/eax: int <- estimate-height item-text
-    set-cursor-position 0/screen, 0 0
-    draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, h, 4/fg 0/bg
     y <- add h
     new-item-index <- increment
     loop
@@ -730,6 +741,46 @@ fn page-up _env: (addr environment), users: (addr array user), channels: (addr a
   copy-to *current-tab-item-index-addr, new-item-index
 }
 
+fn channel-page-up _current-tab: (addr tab), users: (addr array user), _channels: (addr array channel), _items: (addr item-list) {
+  var current-tab/edi: (addr tab) <- copy _current-tab
+  var current-channel-index-addr/eax: (addr int) <- get current-tab, root-index
+  var current-channel-index/eax: int <- copy *current-channel-index-addr
+  var channels/esi: (addr array channel) <- copy _channels
+  var current-channel-offset/eax: (offset channel) <- compute-offset channels, current-channel-index
+  var current-channel/esi: (addr channel) <- index channels, current-channel-offset
+  var current-channel-posts-first-free-addr/eax: (addr int) <- get current-channel, posts-first-free
+  var tmp/eax: int <- copy *current-channel-posts-first-free-addr
+  var final-tab-post-index: int
+  copy-to final-tab-post-index, tmp
+  decrement final-tab-post-index
+  var current-channel-posts-ah/eax: (addr handle array int) <- get current-channel, posts
+  var _current-channel-posts/eax: (addr array int) <- lookup *current-channel-posts-ah
+  var current-channel-posts/esi: (addr array int) <- copy _current-channel-posts
+  var items/esi: (addr item-list) <- copy _items
+  var items-data-ah/eax: (addr handle array item) <- get items, data
+  var _items-data/eax: (addr array item) <- lookup *items-data-ah
+  var items-data/ebx: (addr array item) <- copy _items-data
+  var current-tab-item-index-addr/edi: (addr int) <- get current-tab, item-index
+  var new-tab-item-index/ecx: int <- copy *current-tab-item-index-addr
+  var y/edx: int <- copy 2
+  {
+    compare new-tab-item-index, final-tab-post-index
+    break-if->
+    compare y, 0x28/screen-height-minus-menu
+    break-if->=
+    var offset/eax: (offset item) <- compute-offset items-data, new-tab-item-index
+    var item/eax: (addr item) <- index items-data, offset
+    var item-text-ah/eax: (addr handle array byte) <- get item, text
+    var item-text/eax: (addr array byte) <- lookup *item-text-ah
+    var h/eax: int <- estimate-height item-text
+    y <- add h
+    new-tab-item-index <- increment
+    loop
+  }
+  new-tab-item-index <- decrement
+  copy-to *current-tab-item-index-addr, new-tab-item-index
+}
+
 # keep sync'd with render-item
 fn estimate-height _message-text: (addr array byte) -> _/eax: int {
   var message-text/esi: (addr array byte) <- copy _message-text
id='n3' href='#n3'>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
190
191
192
193
194
195
196
197