@@ -232,7 +232,45 @@ impl EditorView {
232232 }
233233 }
234234
235− // render selections
235+ // render gutters
236+
237+ let linenr: Style = theme.get("ui.linenr");
238+ let warning: Style = theme.get("warning");
239+ let error: Style = theme.get("error");
240+ let info: Style = theme.get("info");
241+ let hint: Style = theme.get("hint");
242+
243+ for (i, line) in (view.first_line..last_line).enumerate() {
244+ use helix_core::diagnostic::Severity;
245+ if let Some(diagnostic) = doc.diagnostics().iter().find(|d| d.line == line) {
246+ surface.set_stringn(
247+ viewport.x - OFFSET,
248+ viewport.y + i as u16,
249+ "●",
250+ 1,
251+ match diagnostic.severity {
252+ Some(Severity::Error) => error,
253+ Some(Severity::Warning) | None => warning,
254+ Some(Severity::Info) => info,
255+ Some(Severity::Hint) => hint,
256+ },
257+ );
258+ }
259+
260+ // line numbers having selections are rendered differently
261+ surface.set_stringn(
262+ viewport.x + 1 - OFFSET,
263+ viewport.y + i as u16,
264+ format!("{:>5}", line + 1),
265+ 5,
266+ linenr,
267+ );
268+ }
269+
270+ // render selections and selected linenr(s)
271+ let linenr_select: Style = theme
272+ .try_get("ui.linenr.selected")
273+ .unwrap_or_else(|| theme.get("ui.linenr"));
236274
237275 if is_focused {
238276 let screen = {
@@ -329,6 +367,13 @@ impl EditorView {
329367 ),
330368 cursor_style,
331369 );
370+ surface.set_stringn(
371+ viewport.x + 1 - OFFSET,
372+ viewport.y + head.row as u16,
373+ format!("{:>5}", view.first_line + head.row + 1),
374+ 5,
375+ linenr_select,
376+ );
332377 // TODO: set cursor position for IME
333378 if let Some(syntax) = doc.syntax() {
334379 use helix_core::match_brackets;
@@ -357,40 +402,6 @@ impl EditorView {
357402 }
358403 }
359404 }
360−
361− // render gutters
362−
363− let style: Style = theme.get("ui.linenr");
364− let warning: Style = theme.get("warning");
365− let error: Style = theme.get("error");
366− let info: Style = theme.get("info");
367− let hint: Style = theme.get("hint");
368−
369− for (i, line) in (view.first_line..last_line).enumerate() {
370− use helix_core::diagnostic::Severity;
371− if let Some(diagnostic) = doc.diagnostics().iter().find(|d| d.line == line) {
372− surface.set_stringn(
373− viewport.x - OFFSET,
374− viewport.y + i as u16,
375− "●",
376− 1,
377− match diagnostic.severity {
378− Some(Severity::Error) => error,
379− Some(Severity::Warning) | None => warning,
380− Some(Severity::Info) => info,
381− Some(Severity::Hint) => hint,
382− },
383− );
384− }
385−
386− surface.set_stringn(
387− viewport.x + 1 - OFFSET,
388− viewport.y + i as u16,
389− format!("{:>5}", line + 1),
390− 5,
391− style,
392− );
393− }
394405 }
395406
396407 pub fn render_diagnostics(