diff --git a/espanso/src/cli/log.rs b/espanso/src/cli/log.rs new file mode 100644 index 0000000..ab0bd28 --- /dev/null +++ b/espanso/src/cli/log.rs @@ -0,0 +1,55 @@ +/* + * This file is part of espanso. + * + * Copyright (C) 2019-2021 Federico Terzi + * + * espanso is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * espanso is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with espanso. If not, see . + */ + +use std::{fs::File, io::BufReader}; +use std::io::BufRead; + +use super::{CliModule, CliModuleArgs}; + +pub fn new() -> CliModule { + CliModule { + requires_paths: true, + subcommand: "log".to_string(), + entry: log_main, + ..Default::default() + } +} + +fn log_main(args: CliModuleArgs) { + let paths = args.paths.expect("missing paths argument"); + let log_file = paths.runtime.join(crate::LOG_FILE_NAME); + + if !log_file.exists() { + eprintln!("No log file found."); + std::process::exit(2); + } + + let log_file = File::open(log_file); + if let Ok(log_file) = log_file { + let reader = BufReader::new(log_file); + for line in reader.lines() { + if let Ok(line) = line { + println!("{}", line); + } + } + } else { + eprintln!("Error reading log file"); + std::process::exit(1); + } +} diff --git a/espanso/src/main.rs b/espanso/src/main.rs index cc5048c..cebc73d 100644 --- a/espanso/src/main.rs +++ b/espanso/src/main.rs @@ -36,6 +36,7 @@ const LOG_FILE_NAME: &str = "espanso.log"; lazy_static! { static ref CLI_HANDLERS: Vec = vec![ cli::path::new(), + cli::log::new(), ]; } @@ -79,46 +80,46 @@ fn main() { .short("v") .multiple(true) .help("Sets the level of verbosity")) - .subcommand(SubCommand::with_name("cmd") - .about("Send a command to the espanso daemon.") - .subcommand(SubCommand::with_name("exit") - .about("Terminate the daemon.")) - .subcommand(SubCommand::with_name("enable") - .about("Enable the espanso replacement engine.")) - .subcommand(SubCommand::with_name("disable") - .about("Disable the espanso replacement engine.")) - .subcommand(SubCommand::with_name("toggle") - .about("Toggle the status of the espanso replacement engine.")) - ) - .subcommand(SubCommand::with_name("edit") - .about("Open the default text editor to edit config files and reload them automatically when exiting") - .arg(Arg::with_name("config") - .help("Defaults to \"default\". The configuration file name to edit (without the .yml extension).")) - .arg(Arg::with_name("norestart") - .short("n") - .long("norestart") - .required(false) - .takes_value(false) - .help("Avoid restarting espanso after editing the file")) - ) - .subcommand(SubCommand::with_name("detect") - .about("Tool to detect current window properties, to simplify filters creation.")) - .subcommand(SubCommand::with_name("daemon") - .about("Start the daemon without spawning a new process.")) - .subcommand(SubCommand::with_name("register") - .about("MacOS and Linux only. Register espanso in the system daemon manager.")) - .subcommand(SubCommand::with_name("unregister") - .about("MacOS and Linux only. Unregister espanso from the system daemon manager.")) + // .subcommand(SubCommand::with_name("cmd") + // .about("Send a command to the espanso daemon.") + // .subcommand(SubCommand::with_name("exit") + // .about("Terminate the daemon.")) + // .subcommand(SubCommand::with_name("enable") + // .about("Enable the espanso replacement engine.")) + // .subcommand(SubCommand::with_name("disable") + // .about("Disable the espanso replacement engine.")) + // .subcommand(SubCommand::with_name("toggle") + // .about("Toggle the status of the espanso replacement engine.")) + // ) + // .subcommand(SubCommand::with_name("edit") + // .about("Open the default text editor to edit config files and reload them automatically when exiting") + // .arg(Arg::with_name("config") + // .help("Defaults to \"default\". The configuration file name to edit (without the .yml extension).")) + // .arg(Arg::with_name("norestart") + // .short("n") + // .long("norestart") + // .required(false) + // .takes_value(false) + // .help("Avoid restarting espanso after editing the file")) + // ) + // .subcommand(SubCommand::with_name("detect") + // .about("Tool to detect current window properties, to simplify filters creation.")) + // .subcommand(SubCommand::with_name("daemon") + // .about("Start the daemon without spawning a new process.")) + // .subcommand(SubCommand::with_name("register") + // .about("MacOS and Linux only. Register espanso in the system daemon manager.")) + // .subcommand(SubCommand::with_name("unregister") + // .about("MacOS and Linux only. Unregister espanso from the system daemon manager.")) .subcommand(SubCommand::with_name("log") - .about("Print the latest daemon logs.")) - .subcommand(SubCommand::with_name("start") - .about("Start the daemon spawning a new process in the background.")) - .subcommand(SubCommand::with_name("stop") - .about("Stop the espanso daemon.")) - .subcommand(SubCommand::with_name("restart") - .about("Restart the espanso daemon.")) - .subcommand(SubCommand::with_name("status") - .about("Check if the espanso daemon is running or not.")) + .about("Print the daemon logs.")) + // .subcommand(SubCommand::with_name("start") + // .about("Start the daemon spawning a new process in the background.")) + // .subcommand(SubCommand::with_name("stop") + // .about("Stop the espanso daemon.")) + // .subcommand(SubCommand::with_name("restart") + // .about("Restart the espanso daemon.")) + // .subcommand(SubCommand::with_name("status") + // .about("Check if the espanso daemon is running or not.")) .subcommand(SubCommand::with_name("path") .about("Prints all the espanso directory paths to easily locate configuration and matches.") .subcommand(SubCommand::with_name("config") @@ -135,39 +136,39 @@ fn main() { .subcommand(SubCommand::with_name("base") .about("Print the default match file path.")) ) - .subcommand(SubCommand::with_name("match") - .about("List and execute matches from the CLI") - .subcommand(SubCommand::with_name("list") - .about("Print all matches to standard output") - .arg(Arg::with_name("json") - .short("j") - .long("json") - .help("Return the matches as json") - .required(false) - .takes_value(false) - ) - .arg(Arg::with_name("onlytriggers") - .short("t") - .long("onlytriggers") - .help("Print only triggers without replacement") - .required(false) - .takes_value(false) - ) - .arg(Arg::with_name("preservenewlines") - .short("n") - .long("preservenewlines") - .help("Preserve newlines when printing replacements") - .required(false) - .takes_value(false) - ) - ) - .subcommand(SubCommand::with_name("exec") - .about("Triggers the expansion of the given match") - .arg(Arg::with_name("trigger") - .help("The trigger of the match to be expanded") - ) - ) - ) + // .subcommand(SubCommand::with_name("match") + // .about("List and execute matches from the CLI") + // .subcommand(SubCommand::with_name("list") + // .about("Print all matches to standard output") + // .arg(Arg::with_name("json") + // .short("j") + // .long("json") + // .help("Return the matches as json") + // .required(false) + // .takes_value(false) + // ) + // .arg(Arg::with_name("onlytriggers") + // .short("t") + // .long("onlytriggers") + // .help("Print only triggers without replacement") + // .required(false) + // .takes_value(false) + // ) + // .arg(Arg::with_name("preservenewlines") + // .short("n") + // .long("preservenewlines") + // .help("Preserve newlines when printing replacements") + // .required(false) + // .takes_value(false) + // ) + // ) + // .subcommand(SubCommand::with_name("exec") + // .about("Triggers the expansion of the given match") + // .arg(Arg::with_name("trigger") + // .help("The trigger of the match to be expanded") + // ) + // ) + // ) // Package manager .subcommand(SubCommand::with_name("package") .about("Espanso package manager commands")