48 lines
1.3 KiB
Rust
48 lines
1.3 KiB
Rust
|
|
use tokio::process::Command;
|
||
|
|
|
||
|
|
pub(crate) async fn print_versions() -> Result<(), Box<dyn std::error::Error>> {
|
||
|
|
eprintln!("Using emacs version: {}", get_emacs_version().await?.trim());
|
||
|
|
eprintln!(
|
||
|
|
"Using org-mode version: {}",
|
||
|
|
get_org_mode_version().await?.trim()
|
||
|
|
);
|
||
|
|
Ok(())
|
||
|
|
}
|
||
|
|
|
||
|
|
pub(crate) async fn get_emacs_version() -> Result<String, Box<dyn std::error::Error>> {
|
||
|
|
let elisp_script = r#"(progn
|
||
|
|
(message "%s" (version))
|
||
|
|
)"#;
|
||
|
|
let mut cmd = Command::new("emacs");
|
||
|
|
let cmd = cmd
|
||
|
|
.arg("-q")
|
||
|
|
.arg("--no-site-file")
|
||
|
|
.arg("--no-splash")
|
||
|
|
.arg("--batch")
|
||
|
|
.arg("--eval")
|
||
|
|
.arg(elisp_script);
|
||
|
|
|
||
|
|
let out = cmd.output().await?;
|
||
|
|
out.status.exit_ok()?;
|
||
|
|
Ok(String::from_utf8(out.stderr)?)
|
||
|
|
}
|
||
|
|
|
||
|
|
pub(crate) async fn get_org_mode_version() -> Result<String, Box<dyn std::error::Error>> {
|
||
|
|
let elisp_script = r#"(progn
|
||
|
|
(org-mode)
|
||
|
|
(message "%s" (org-version nil t nil))
|
||
|
|
)"#;
|
||
|
|
let mut cmd = Command::new("emacs");
|
||
|
|
let cmd = cmd
|
||
|
|
.arg("-q")
|
||
|
|
.arg("--no-site-file")
|
||
|
|
.arg("--no-splash")
|
||
|
|
.arg("--batch")
|
||
|
|
.arg("--eval")
|
||
|
|
.arg(elisp_script);
|
||
|
|
|
||
|
|
let out = cmd.output().await?;
|
||
|
|
out.status.exit_ok()?;
|
||
|
|
Ok(String::from_utf8(out.stderr)?)
|
||
|
|
}
|