Loog: A fast, minimal code editor.
NativeRust and Skia
HighlightingTree-sitter
DiagnosticsLanguage servers
ExtensionsWebAssembly
EncodingsGBK, Big5, Shift_JIS
TerminalShells and WSL
GitDiffs and worktrees
MarkdownLive preview
SessionsRestored on restart
loog / main*
README.md Commit b811984f (loog)
Commit b811984f · 3 files+10−101/3InlineSplit
src/app/bootstrap.rs+6−0Open ChangesOpen File
@@ -67,6 +67,12 @@ pub(crate) fn svg_icons() -> SvgIconRegistry {
67 .with_icon("copy", icondata::VsCopy)
68 .with_icon("enter", r#"<svg xmlns="http://www.w3.org/2000/svg""#)
69 .with_icon("terminal", icondata::VsTerminal)
70 .with_icon("terminal-stop", icondata::VsDebugStop)
71 .with_icon("terminal-split", icondata::VsSplitHorizontal)
72 .with_icon("terminal-more", icondata::VsEllipsis)
67 .with_icon("copy", icondata::VsCopy)
68 .with_icon("enter", r#"<svg xmlns="http://www.w3.org/2000/svg""#)
69 .with_icon("terminal", icondata::VsTerminal)
70 // Bottom-panel tabs: one outline family (Lucide) so the
71 // four share stroke weight and none carries a frame.
72 .with_icon("panel-terminal", icondata::LuTerminal)
73 .with_icon("panel-commits", icondata::LuGitCommitHorizontal)
74 .with_icon("panel-output", icondata::LuScrollText)
75 .with_icon("panel-problems", icondata::LuCircleAlert)
76 .with_icon("terminal-stop", icondata::VsDebugStop)
77 .with_icon("terminal-split", icondata::VsSplitHorizontal)
78 .with_icon("terminal-more", icondata::VsEllipsis)
src/app/chrome.rs+11−0Open ChangesOpen File
@@ -185,6 +185,14 @@ pub fn status_binding(state: &AppContext) -> …
185 pending: app.keymap.pending().to_vec(),
186 language: syntax_notes(),
187 language_services: services_menu::status(&app),
188 vim: editor_vim::is_active(&app)
189 .then(|| (app.editor.vim.mode(), app.editor.vim.status())),
190 file: app.workspace.active().map(|id| FileStatus {
185 pending: app.keymap.pending().to_vec(),
186 language: syntax_notes(),
187 language_services: services_menu::status(&app),
188 problems: {
189 let counts = problems::counts();
190 Some(ProblemCounts {
191 errors: counts.errors,
192 warnings: counts.warnings,
193 infos: counts.infos,
194 })
195 },
196 vim: editor_vim::is_active(&app)
197 .then(|| (app.editor.vim.mode(), app.editor.vim.status())),
198 file: app.workspace.active().map(|id| FileStatus {
@@ -255,6 +263,9 @@ pub fn status_binding(state: &AppContext) -> …
255 crate::app::highlight_menu::open(&writer);
256 }
257 }
258 StatusCommand::LanguageServices => {
259 if writer.get().menu.visible {
260 writer.update(|app| app.menu.close());
263 crate::app::highlight_menu::open(&writer);
264 }
265 }
266 StatusCommand::Problems => writer.update(|app| {
267 app.toggle_log_panel(PanelTab::Problems)
268 }),
269 StatusCommand::LanguageServices => {
270 if writer.get().menu.visible {
271 writer.update(|app| app.menu.close());
src/app/language_services.rs+13−10Open ChangesOpen File
@@ -190,20 +190,23 @@ impl LanguageServices {
190 }
191
192 /// Errors in files that are not open, for the Problems badge.
193 pub fn closed_error_count(&self, open: &BTreeSet<String>) -> usize {
194 use crate::features::language_service::Severity;
195 self.closed
196 .lock()
197 .unwrap()
198 .iter()
199 .filter(|(key, _)| !open.contains(key))
190 }
191
192 /// Errors in files that are not open, for the Problems badge.
193 pub fn closed_counts(
194 &self,
195 open: &BTreeSet<String>,
196 ) -> Counts {
197 let mut counts = Counts::default();
198 for (_, file) in self
199 .closed
200 .lock()
201 .unwrap()
TerminalCommitsOutputProblems
PS C:\loog> cargo run --release
Compiling loog v0.1.10 (D:\loog)
Finished release profile [optimized] in 8.4s
Running target\release\Loog.exe
PS C:\loog>
000Text DiffTXT