@@ -310,7 +310,7 @@ impl<T: Item + 'static> Component for Menu<T> {
310310 use tui::widgets::TableState;
311311
312312 table.render_table(
313− area.clip_left(Self::LEFT_PADDING as u16),
313+ area.clip_left(Self::LEFT_PADDING as u16).clip_right(1),
314314 surface,
315315 &mut TableState {
316316 offset: scroll,
@@ -320,20 +320,32 @@ impl<T: Item + 'static> Component for Menu<T> {
320320
321321 if let Some(cursor) = self.cursor {
322322 let offset_from_top = cursor - scroll;
323− let cell = &mut surface[(area.x, area.y + offset_from_top as u16)];
324− cell.set_style(selected);
323+ let left = &mut surface[(area.left(), area.y + offset_from_top as u16)];
324+ left.set_style(selected);
325+ let right = &mut surface[(
326+ area.right().saturating_sub(1),
327+ area.y + offset_from_top as u16,
328+ )];
329+ right.set_style(selected);
325330 }
326331
327332 let fits = len <= win_height;
328333
334+ let scroll_style = theme.get("ui.menu.scroll");
329335 for (i, _) in (scroll..(scroll + win_height).min(len)).enumerate() {
336+ let cell = &mut surface[(area.x + area.width - 1, area.y + i as u16)];
337+
338+ if !fits {
339+ // Draw scroll track
340+ cell.set_symbol("▐"); // right half block
341+ cell.set_fg(scroll_style.bg.unwrap_or(helix_view::theme::Color::Reset));
342+ }
343+
330344 let is_marked = i >= scroll_line && i < scroll_line + scroll_height;
331345
332346 if !fits && is_marked {
333− let cell = &mut surface[(area.x + area.width - 2, area.y + i as u16)];
334− cell.set_symbol("▐");
335− // cell.set_style(selected);
336− // cell.set_style(if is_marked { selected } else { style });
347+ // Draw scroll thumb
348+ cell.set_fg(scroll_style.fg.unwrap_or(helix_view::theme::Color::Reset));
337349 }
338350 }
339351 }