add config option to limit external command completions (#6076)

* add config option to limit external command completions

* fmt

* small change

* change name in config

* change name in config again
This commit is contained in:
pwygab 2022-07-20 01:39:50 +08:00 committed by GitHub
parent e5684bc34c
commit ae765c71fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 12 deletions

View File

@ -43,19 +43,21 @@ impl CommandCompletion {
if let Ok(mut contents) = std::fs::read_dir(path) {
while let Some(Ok(item)) = contents.next() {
if !executables.contains(
&item
.path()
.file_name()
.map(|x| x.to_string_lossy().to_string())
.unwrap_or_default(),
) && matches!(
item.path()
.file_name()
.map(|x| match_algorithm
if self.engine_state.config.max_external_completion_results
> executables.len() as i64
&& !executables.contains(
&item
.path()
.file_name()
.map(|x| x.to_string_lossy().to_string())
.unwrap_or_default(),
)
&& matches!(
item.path().file_name().map(|x| match_algorithm
.matches_str(&x.to_string_lossy(), prefix)),
Some(true)
) && is_executable::is_executable(&item.path())
Some(true)
)
&& is_executable::is_executable(&item.path())
{
if let Ok(name) = item.file_name().into_string() {
executables.push(name);

View File

@ -59,6 +59,7 @@ pub struct Config {
pub use_grid_icons: bool,
pub footer_mode: FooterMode,
pub float_precision: i64,
pub max_external_completion_results: i64,
pub filesize_format: String,
pub use_ansi_coloring: bool,
pub quick_completions: bool,
@ -92,6 +93,7 @@ impl Default for Config {
use_grid_icons: false,
footer_mode: FooterMode::RowCount(25),
float_precision: 4,
max_external_completion_results: 100,
filesize_format: "auto".into(),
use_ansi_coloring: true,
quick_completions: true,
@ -249,6 +251,13 @@ impl Value {
eprintln!("$config.partial_completions is not a bool")
}
}
"max_external_completion_results" => {
if let Ok(i) = value.as_integer() {
config.max_external_completion_results = i;
} else {
eprintln!("$config.max_external_completion_results is not an integer")
}
}
"completion_algorithm" => {
if let Ok(v) = value.as_string() {
config.completion_algorithm = v.to_lowercase();

View File

@ -256,6 +256,7 @@ let-env config = {
cd_with_abbreviations: false # set to true to allow you to do things like cd s/o/f and nushell expand it to cd some/other/folder
case_sensitive_completions: false # set to true to enable case-sensitive completions
enable_external_completion: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up my be very slow
max_external_completion_results: 100 # setting it lower can improve completion performance at the cost of omitting some options
# A strategy of managing table view in case of limited space.
table_trim: {