Error out when config.nu has no editor configured (#8282)
# Description Fixes #8245. Instead of trying to use `nano` or `notepad` as defaults, it errors out if finds that `buffer_editor` , $EDITOR, $VISUAL do not exist. If the PR is landed, Ill update the website as it means what its in there is no longer correct. ``` ❯ config nu Error: × No editor configured ╭─[entry #3:1:1] 1 │ config nu · ────┬──── · ╰── Please specify one via environment variables $EDITOR or $VISUAL ╰──── help: Nushell's config file can be found with the command: $nu.config-path. For more help: (https://nushell.sh/book/configuration.html#configurations-with-built-in-commands) ``` # User-Facing Changes # Tests + Formatting Make sure you've run and fixed any issues with these commands: - [X] `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - [X] `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect` to check that you're using the standard code style - [X] `cargo test --workspace` to check that all tests pass # After Submitting If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date.
This commit is contained in:
parent
03e688ea7b
commit
ccd72fa64a
|
@ -58,7 +58,7 @@ impl Command for ConfigEnv {
|
||||||
let mut nu_config = config_path.clone();
|
let mut nu_config = config_path.clone();
|
||||||
nu_config.push("env.nu");
|
nu_config.push("env.nu");
|
||||||
|
|
||||||
let (item, config_args) = get_editor(engine_state, stack)?;
|
let (item, config_args) = get_editor(engine_state, stack, call.head)?;
|
||||||
|
|
||||||
gen_command(call.head, nu_config, item, config_args, env_vars_str).run_with_input(
|
gen_command(call.head, nu_config, item, config_args, env_vars_str).run_with_input(
|
||||||
engine_state,
|
engine_state,
|
||||||
|
|
|
@ -58,7 +58,7 @@ impl Command for ConfigNu {
|
||||||
let mut nu_config = config_path.clone();
|
let mut nu_config = config_path.clone();
|
||||||
nu_config.push("config.nu");
|
nu_config.push("config.nu");
|
||||||
|
|
||||||
let (item, config_args) = get_editor(engine_state, stack)?;
|
let (item, config_args) = get_editor(engine_state, stack, call.head)?;
|
||||||
|
|
||||||
gen_command(call.head, nu_config, item, config_args, env_vars_str).run_with_input(
|
gen_command(call.head, nu_config, item, config_args, env_vars_str).run_with_input(
|
||||||
engine_state,
|
engine_state,
|
||||||
|
|
18
crates/nu-command/src/env/config/utils.rs
vendored
18
crates/nu-command/src/env/config/utils.rs
vendored
|
@ -2,7 +2,7 @@ use std::{collections::HashMap, path::PathBuf};
|
||||||
|
|
||||||
use nu_protocol::{
|
use nu_protocol::{
|
||||||
engine::{EngineState, Stack},
|
engine::{EngineState, Stack},
|
||||||
Span, Spanned,
|
ShellError, Span, Spanned,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::ExternalCommand;
|
use crate::ExternalCommand;
|
||||||
|
@ -10,7 +10,8 @@ use crate::ExternalCommand;
|
||||||
pub(crate) fn get_editor(
|
pub(crate) fn get_editor(
|
||||||
engine_state: &EngineState,
|
engine_state: &EngineState,
|
||||||
stack: &mut Stack,
|
stack: &mut Stack,
|
||||||
) -> Result<(String, Vec<String>), nu_protocol::ShellError> {
|
span: Span,
|
||||||
|
) -> Result<(String, Vec<String>), ShellError> {
|
||||||
let config = engine_state.get_config();
|
let config = engine_state.get_config();
|
||||||
let env_vars = stack.get_env_vars(engine_state);
|
let env_vars = stack.get_env_vars(engine_state);
|
||||||
let editor = if !config.buffer_editor.is_empty() {
|
let editor = if !config.buffer_editor.is_empty() {
|
||||||
|
@ -19,10 +20,17 @@ pub(crate) fn get_editor(
|
||||||
value.as_string()
|
value.as_string()
|
||||||
} else if let Some(value) = env_vars.get("VISUAL") {
|
} else if let Some(value) = env_vars.get("VISUAL") {
|
||||||
value.as_string()
|
value.as_string()
|
||||||
} else if cfg!(target_os = "windows") {
|
|
||||||
Ok("notepad".to_string())
|
|
||||||
} else {
|
} else {
|
||||||
Ok("nano".to_string())
|
Err(ShellError::GenericError(
|
||||||
|
"No editor configured".into(),
|
||||||
|
"Please specify one via environment variables $EDITOR or $VISUAL".into(),
|
||||||
|
Some(span),
|
||||||
|
Some(
|
||||||
|
"Nushell's config file can be found with the command: $nu.config-path. For more help: (https://nushell.sh/book/configuration.html#configurations-with-built-in-commands)"
|
||||||
|
.into(),
|
||||||
|
),
|
||||||
|
vec![],
|
||||||
|
))
|
||||||
}?;
|
}?;
|
||||||
if let Some((a, b)) = editor.split_once(' ') {
|
if let Some((a, b)) = editor.split_once(' ') {
|
||||||
Ok((
|
Ok((
|
||||||
|
|
Loading…
Reference in New Issue
Block a user