mirror of
https://github.com/denisidoro/navi
synced 2024-11-24 20:43:06 +00:00
#447: added error message for incompatible fzf version
This commit is contained in:
parent
c4f01310bb
commit
019540a4f5
1 changed files with 38 additions and 0 deletions
|
@ -3,12 +3,18 @@ use crate::prelude::*;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::process::{self, Output};
|
use std::process::{self, Output};
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
|
use std::string::ToString;
|
||||||
|
|
||||||
pub mod structures;
|
pub mod structures;
|
||||||
use clap::ValueEnum;
|
use clap::ValueEnum;
|
||||||
pub use post::process;
|
pub use post::process;
|
||||||
use structures::Opts;
|
use structures::Opts;
|
||||||
use structures::SuggestionType;
|
use structures::SuggestionType;
|
||||||
|
|
||||||
|
const MIN_FZF_VERSION_MAJOR: u32 = 0;
|
||||||
|
const MIN_FZF_VERSION_MINOR: u32 = 23;
|
||||||
|
const MIN_FZF_VERSION_PATCH: u32 = 1;
|
||||||
|
|
||||||
mod post;
|
mod post;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, Deserialize, ValueEnum)]
|
#[derive(Debug, Clone, Copy, Deserialize, ValueEnum)]
|
||||||
|
@ -47,6 +53,24 @@ fn parse(out: Output, opts: Opts) -> Result<String> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FinderChoice {
|
impl FinderChoice {
|
||||||
|
fn check_fzf_version() -> Option<(u32, u32, u32)> {
|
||||||
|
let output = Command::new("fzf")
|
||||||
|
.arg("--version")
|
||||||
|
.output()
|
||||||
|
.ok()?
|
||||||
|
.stdout;
|
||||||
|
let version_string = String::from_utf8(output).ok()?;
|
||||||
|
let version_parts: Vec<_> = version_string.split('.').collect();
|
||||||
|
if version_parts.len() == 3 {
|
||||||
|
let major = version_parts[0].parse().ok()?;
|
||||||
|
let minor = version_parts[1].parse().ok()?;
|
||||||
|
let patch = version_parts[2].split_whitespace().next()?.parse().ok()?;
|
||||||
|
Some((major, minor, patch))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn call<F, R>(&self, finder_opts: Opts, stdin_fn: F) -> Result<(String, R)>
|
pub fn call<F, R>(&self, finder_opts: Opts, stdin_fn: F) -> Result<(String, R)>
|
||||||
where
|
where
|
||||||
F: Fn(&mut dyn Write) -> Result<R>,
|
F: Fn(&mut dyn Write) -> Result<R>,
|
||||||
|
@ -56,6 +80,20 @@ impl FinderChoice {
|
||||||
Self::Skim => "sk",
|
Self::Skim => "sk",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if let Self::Fzf = self {
|
||||||
|
if let Some((major, minor, patch)) = Self::check_fzf_version() {
|
||||||
|
if major == MIN_FZF_VERSION_MAJOR && minor < MIN_FZF_VERSION_MINOR && patch < MIN_FZF_VERSION_PATCH {
|
||||||
|
eprintln!("Warning: Fzf version {}.{} does not support the preview window layout used by navi.", major, minor);
|
||||||
|
eprintln!("Consider updating Fzf to a version >= {}.{}.{} or use a compatible layout.",
|
||||||
|
MIN_FZF_VERSION_MAJOR,
|
||||||
|
MIN_FZF_VERSION_MINOR,
|
||||||
|
MIN_FZF_VERSION_PATCH
|
||||||
|
);
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let mut command = Command::new(finder_str);
|
let mut command = Command::new(finder_str);
|
||||||
let opts = finder_opts.clone();
|
let opts = finder_opts.clone();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue