From a13f76cd40046e748ca39370bb56de026e5667c7 Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Thu, 1 Oct 2026 13:39:16 +0200 Subject: [PATCH] Add languages and reload-languages ctl verbs Expose the language registry via ctl: `languages` lists supported src block languages (one per line), `reload-languages` reloads plugin configs from /etc/orkmode/languages and ~/.config/orkmode/languages and reports how many were loaded. --- crates/ork-server/src/state.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/crates/ork-server/src/state.rs b/crates/ork-server/src/state.rs index 562fd19..9357429 100644 --- a/crates/ork-server/src/state.rs +++ b/crates/ork-server/src/state.rs @@ -223,6 +223,8 @@ impl OrkState { ("archive", "archive — move subtree to .org_archive", OrkState::ctl_archive), ("lint", "lint [doc] — validate documents", OrkState::ctl_lint), ("execute", "execute [scope] [block] — run src blocks", OrkState::ctl_execute), + ("languages", "languages — list supported src block languages", OrkState::ctl_languages), + ("reload-languages", "reload-languages — reload language plugins from config dirs", OrkState::ctl_reload_languages), ]; let cmd = cmd.trim(); @@ -310,6 +312,21 @@ impl OrkState { Ok(self.lint(target)) } + /// List supported src block languages, one per line. + fn ctl_languages(&self, _args: &[&str]) -> Result { + let mut out = self.list_languages().join("\n"); + if !out.is_empty() { + out.push('\n'); + } + Ok(out) + } + + /// Reload language plugins from config dirs; report how many were loaded. + fn ctl_reload_languages(&self, _args: &[&str]) -> Result { + let loaded = self.reload_languages()?; + Ok(format!("reloaded {} language config(s)\n", loaded)) + } + /// Execute src blocks. /// /// Syntax: execute [] []