From 345c00aa1ee6abeb3591a87a58b809748799d4b2 Mon Sep 17 00:00:00 2001 From: Antoine Stevan <44101798+amtoine@users.noreply.github.com> Date: Tue, 18 Jul 2023 18:22:00 +0200 Subject: [PATCH] sync default config / env with default behaviour without any configuration (#9676) related PRs and issues - supersedes https://github.com/nushell/nushell/pull/9633 - should close https://github.com/nushell/nushell/issues/9630 # Description this PR updates the `default_config.nu` config file and the `config.rs` module in `nu_protocol` so that the default behaviour of Nushell, without any config, and the one with `default_config.nu` and `default_env.nu` are the same. ## changelog - 3e2bfc9bb: copy the structure of `default_config.nu` inside the implementation of `Default` in the `config.rs` module for easier check of the default values - e25e5ccd6: sync all the *simple* config fields, i.e. the non-structured ones - ae7e8111c: set the `display_output` hook to always run `table` - a09a1c564: leave only the default menus => i've removed `commands_menu`, `vars_menu` and `commands_with_description` ## todo - [x] ~~check the defaults in `$env.config.explore`~~ done in 173bdbba5 and b9622084c - [x] ~~check the defaults in `$env.config.color_config`~~ done in c411d781d => the theme is now `{}` by default so that it's the same as the default one with `--no-config` - [x] ~~check the defaults `$env.config.keybindings`~~ done in 715a69797 - already available with the selected mode: `completion_previous`, `next_page`, `undo_or_previous_page`, `yank`, `unix-line-discard` and `kill-line`, e.g. in *vi* mode, `unlix-line-discard` is done in NORMAL mode with either `d0` from the end of the line or `dd` from anywhere in the line and `kill-line` is done in NORMAL mode with `shift + d`. these bindings are available by default in *emacs* mode as well. - previously with removed custom menus: `commands_menu`, `vars_menu` and `commands_with_description` - [x] ~~check `$env.config.datetime_format`~~ done in 0ced6b8ec => as there is no *human* format for datetimes, i've commented out both `$env.config.datetime_format` fields - [x] ~~fix `default_env.nu`~~ done in 67c215011 # User-Facing Changes this should not change anything, just make sure the default behaviour of Nushell and the `default_config.nu` are in sync. # Tests + Formatting # After Submitting --- crates/nu-command/tests/commands/table.rs | 2 +- crates/nu-protocol/src/config.rs | 82 ++- .../src/sample_config/default_config.nu | 619 +++++++++++++----- .../nu-utils/src/sample_config/default_env.nu | 16 +- 4 files changed, 496 insertions(+), 223 deletions(-) diff --git a/crates/nu-command/tests/commands/table.rs b/crates/nu-command/tests/commands/table.rs index 37c20d1de..006ba18b6 100644 --- a/crates/nu-command/tests/commands/table.rs +++ b/crates/nu-command/tests/commands/table.rs @@ -243,7 +243,7 @@ fn table_collapse_does_wrapping_for_long_strings() { ├────────────────────────────────┤\ │ 111111111111111109312339230430 │\ │ 179149313814687359833671239329 │\ - │ 01313323321729744896.0000 │\ + │ 01313323321729744896.00 │\ ╰────────────────────────────────╯" ); } diff --git a/crates/nu-protocol/src/config.rs b/crates/nu-protocol/src/config.rs index 0d9717802..0b1915b72 100644 --- a/crates/nu-protocol/src/config.rs +++ b/crates/nu-protocol/src/config.rs @@ -113,47 +113,61 @@ pub struct Config { impl Default for Config { fn default() -> Config { Config { - filesize_metric: false, - table_mode: "rounded".into(), - table_show_empty: true, - external_completer: None, + show_banner: true, + use_ls_colors: true, - color_config: HashMap::new(), - 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, + show_clickable_links_in_ls: true, + + rm_always_trash: false, + + cd_with_abbreviations: false, + + table_mode: "rounded".into(), + table_index_mode: TableIndexMode::Always, + table_show_empty: true, + trim_strategy: TRIM_STRATEGY_DEFAULT, + + datetime_normal_format: None, + datetime_table_format: None, + + explore: HashMap::new(), + + max_history_size: 100_000, + sync_history_on_enter: true, + history_file_format: HistoryFileFormat::PlainText, + history_isolation: true, + + case_sensitive_completions: false, quick_completions: true, partial_completions: true, completion_algorithm: "prefix".into(), - edit_mode: "emacs".into(), - max_history_size: i64::MAX, - sync_history_on_enter: true, - history_file_format: HistoryFileFormat::PlainText, - history_isolation: false, - keybindings: Vec::new(), - menus: Vec::new(), - hooks: Hooks::new(), - rm_always_trash: false, - shell_integration: false, - buffer_editor: String::new(), - table_index_mode: TableIndexMode::Always, - cd_with_abbreviations: false, - case_sensitive_completions: false, enable_external_completion: true, - trim_strategy: TRIM_STRATEGY_DEFAULT, - show_banner: true, - bracketed_paste: true, - show_clickable_links_in_ls: true, - render_right_prompt_on_last_line: false, - explore: HashMap::new(), + max_external_completion_results: 100, + external_completer: None, + + filesize_metric: false, + filesize_format: "auto".into(), + + cursor_shape_emacs: NuCursorShape::Line, cursor_shape_vi_insert: NuCursorShape::Block, cursor_shape_vi_normal: NuCursorShape::UnderScore, - cursor_shape_emacs: NuCursorShape::Line, - datetime_normal_format: None, - datetime_table_format: None, + + color_config: HashMap::new(), + use_grid_icons: true, + footer_mode: FooterMode::RowCount(25), + float_precision: 2, + buffer_editor: String::new(), + use_ansi_coloring: true, + bracketed_paste: true, + edit_mode: "emacs".into(), + shell_integration: false, + render_right_prompt_on_last_line: false, + + hooks: Hooks::new(), + + menus: Vec::new(), + + keybindings: Vec::new(), } } } diff --git a/crates/nu-utils/src/sample_config/default_config.nu b/crates/nu-utils/src/sample_config/default_config.nu index 798b96985..434c6e494 100644 --- a/crates/nu-utils/src/sample_config/default_config.nu +++ b/crates/nu-utils/src/sample_config/default_config.nu @@ -184,18 +184,21 @@ let light_theme = { # The default config record. This is where much of your global configuration is setup. $env.config = { - # true or false to enable or disable the welcome banner at startup - show_banner: true + show_banner: true # true or false to enable or disable the welcome banner at startup + ls: { use_ls_colors: true # use the LS_COLORS environment variable to colorize output clickable_links: true # enable or disable clickable links. Your terminal has to support links. } + rm: { always_trash: false # always act as if -t was given. Can be overridden with -p } + cd: { abbreviations: false # allows `cd s/o/f` to expand to `cd some/other/folder` } + table: { mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column @@ -210,67 +213,38 @@ $env.config = { # datetime_format determines what a datetime rendered in the shell would look like. # Behavior without this configuration point will be to "humanize" the datetime display, # showing something like "a day ago." - datetime_format: { - normal: '%a, %d %b %Y %H:%M:%S %z' # shows up in displays of variables or other datetime's outside of tables + # normal: '%a, %d %b %Y %H:%M:%S %z' # shows up in displays of variables or other datetime's outside of tables # table: '%m/%d/%y %I:%M:%S%p' # generally shows up in tabular outputs such as ls. commenting this out will change it to the default human readable datetime format } explore: { - help_banner: true - exit_esc: true - - command_bar_text: '#C4C9C6' - # command_bar: {fg: '#C4C9C6' bg: '#223311' } - - status_bar_background: {fg: '#1D1F21' bg: '#C4C9C6' } - # status_bar_text: {fg: '#C4C9C6' bg: '#223311' } - - highlight: {bg: 'yellow' fg: 'black' } - - status: { - # warn: {bg: 'yellow', fg: 'blue'} - # error: {bg: 'yellow', fg: 'blue'} - # info: {bg: 'yellow', fg: 'blue'} - } - try: { - # border_color: 'red' - # highlighted_color: 'blue' - - # reactive: false - } - + border_color: {fg: "white"} + }, + status_bar_background: {fg: "#1D1F21", bg: "#C4C9C6"}, + command_bar_text: {fg: "#C4C9C6"}, + highlight: {fg: "black", bg: "yellow"}, + status: { + error: {fg: "white", bg: "red"}, + warn: {} + info: {} + }, table: { - split_line: '#404040' - - cursor: true - - line_index: true - line_shift: true - line_head_top: true - line_head_bottom: true - - show_head: true - show_index: true - - # selected_cell: {fg: 'white', bg: '#777777'} - # selected_row: {fg: 'yellow', bg: '#C1C2A3'} - # selected_column: blue - - # padding_column_right: 2 - # padding_column_left: 2 - - # padding_index_left: 2 - # padding_index_right: 1 - } - + split_line: {fg: "#404040"}, + selected_cell: {}, + selected_row: {}, + selected_column: {}, + cursor: true, + line_head_top: true, + line_head_bottom: true, + line_shift: true, + line_index: true, + }, config: { - cursor_color: {bg: 'yellow' fg: 'black' } - - # border_color: white - # list_color: green - } + border_color: {fg: "white"} + cursor_color: {fg: "black", bg: "light_yellow"} + }, } history: { @@ -279,6 +253,7 @@ $env.config = { file_format: "plaintext" # "sqlite" or "plaintext" isolation: true # true enables history isolation, false disables it. true will allow the history to be isolated to the current session. false will allow the history to be shared across all sessions. } + completions: { case_sensitive: false # set to true to enable case-sensitive completions quick: true # set this to false to prevent auto-selecting completions when only one remains @@ -290,20 +265,23 @@ $env.config = { completer: null # check 'carapace_completer' above as an example } } + filesize: { metric: true # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard) format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, auto } + cursor_shape: { emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line (line is the default) vi_insert: block # block, underscore, line , blink_block, blink_underscore, blink_line (block is the default) vi_normal: underscore # block, underscore, line, blink_block, blink_underscore, blink_line (underscore is the default) } - color_config: $dark_theme # if you want a light theme, replace `$dark_theme` to `$light_theme` + + color_config: {} # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record use_grid_icons: true footer_mode: "25" # always, never, number_of_rows, auto float_precision: 2 # the precision for displaying floats in tables - # buffer_editor: "emacs" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL + buffer_editor: "" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL use_ansi_coloring: true bracketed_paste: true # enable bracketed paste, currently useless on windows edit_mode: emacs # emacs, vi @@ -311,24 +289,15 @@ $env.config = { render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. hooks: { - pre_prompt: [{|| - null # replace with source code to run before the prompt is shown - }] - pre_execution: [{|| - null # replace with source code to run before the repl input is run - }] + pre_prompt: [{ null }] # run before the prompt is shown + pre_execution: [{ null }] # run before the repl input is run env_change: { - PWD: [{|before, after| - null # replace with source code to run if the PWD environment is different since the last repl input - }] - } - display_output: {|| - if (term size).columns >= 100 { table -e } else { table } - } - command_not_found: {|| - null # replace with source code to return an error message when a command is not found + PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input } + display_output: { table } # run before the output of a command is drawn, example: `{ if (term size).columns >= 100 { table -e } else { table } }` + command_not_found: { null } # return an error message when a command is not found } + menus: [ # Configuration for default nushell menus # Note the lack of source parameter @@ -380,74 +349,8 @@ $env.config = { description_text: yellow } } - # Example of extra menus created using a nushell source - # Use the source field to create a list of records that populates - # the menu - { - name: commands_menu - only_buffer_difference: false - marker: "# " - type: { - layout: columnar - columns: 4 - col_width: 20 - col_padding: 2 - } - style: { - text: green - selected_text: green_reverse - description_text: yellow - } - source: { |buffer, position| - scope commands - | where name =~ $buffer - | each { |it| {value: $it.name description: $it.usage} } - } - } - { - name: vars_menu - only_buffer_difference: true - marker: "# " - type: { - layout: list - page_size: 10 - } - style: { - text: green - selected_text: green_reverse - description_text: yellow - } - source: { |buffer, position| - scope variables - | where name =~ $buffer - | sort-by name - | each { |it| {value: $it.name description: $it.type} } - } - } - { - name: commands_with_description - only_buffer_difference: true - marker: "# " - type: { - layout: description - columns: 4 - col_width: 20 - col_padding: 2 - selection_rows: 4 - description_rows: 10 - } - style: { - text: green - selected_text: green_reverse - description_text: yellow - } - source: { |buffer, position| - scope commands - | where name =~ $buffer - | each { |it| {value: $it.name description: $it.usage} } - } - } ] + keybindings: [ { name: completion_menu @@ -461,29 +364,36 @@ $env.config = { ] } } - { - name: completion_previous - modifier: shift - keycode: backtab - mode: [emacs, vi_normal, vi_insert] # Note: You can add the same keybinding to all modes by using a list - event: { send: menuprevious } - } { name: history_menu modifier: control keycode: char_r - mode: emacs + mode: [emacs, vi_insert, vi_normal] event: { send: menu name: history_menu } } { - name: next_page + name: help_menu + modifier: none + keycode: f1 + mode: [emacs, vi_insert, vi_normal] + event: { send: menu name: help_menu } + } + { + name: completion_previous_menu + modifier: shift + keycode: backtab + mode: [emacs, vi_normal, vi_insert] + event: { send: menuprevious } + } + { + name: next_page_menu modifier: control keycode: char_x mode: emacs event: { send: menupagenext } } { - name: undo_or_previous_page + name: undo_or_previous_page_menu modifier: control keycode: char_z mode: emacs @@ -494,60 +404,413 @@ $env.config = { ] } } + { - name: yank - modifier: control - keycode: char_y - mode: emacs - event: { - until: [ - {edit: pastecutbufferafter} - ] - } + name: escape + modifier: none + keycode: escape + mode: [emacs, vi_normal, vi_insert] + event: { send: esc } # NOTE: does not appear to work } { - name: unix-line-discard + name: cancel_command modifier: control - keycode: char_u + keycode: char_c + mode: [emacs, vi_normal, vi_insert] + event: { send: ctrlc } + } + { + name: quit_shell + modifier: control + keycode: char_d + mode: [emacs, vi_normal, vi_insert] + event: { send: ctrld } + } + { + name: clear_screen + modifier: control + keycode: char_l + mode: [emacs, vi_normal, vi_insert] + event: { send: clearscreen } + } + { + name: search_history + modifier: control + keycode: char_r + mode: [emacs, vi_normal, vi_insert] + event: { send: searchhistory } + } + { + name: open_command_editor + modifier: control + keycode: char_o + mode: [emacs, vi_normal, vi_insert] + event: { send: openeditor } + } + + { + name: move_up + modifier: none + keycode: up mode: [emacs, vi_normal, vi_insert] event: { until: [ - {edit: cutfromlinestart} + {send: menuup} + {send: up} ] } } { - name: kill-line - modifier: control - keycode: char_k + name: move_down + modifier: none + keycode: down mode: [emacs, vi_normal, vi_insert] event: { until: [ - {edit: cuttolineend} + {send: menudown} + {send: down} ] } } - # Keybindings used to trigger the user defined menus { - name: commands_menu + name: move_left + modifier: none + keycode: left + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menuleft} + {send: left} + ] + } + } + { + name: move_right_or_take_history_hint + modifier: none + keycode: right + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintcomplete} + {send: menuright} + {send: right} + ] + } + } + { + name: move_one_word_left + modifier: control + keycode: left + mode: [emacs, vi_normal, vi_insert] + event: {edit: movewordleft} + } + { + name: move_one_word_right_or_take_history_hint + modifier: control + keycode: right + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintwordcomplete} + {edit: movewordright} + ] + } + } + { + name: move_to_line_start + modifier: none + keycode: home + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolinestart} + } + { + name: move_to_line_start + modifier: control + keycode: char_a + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolinestart} + } + { + name: move_to_line_end_or_take_history_hint + modifier: none + keycode: end + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintcomplete} + {edit: movetolineend} + ] + } + } + { + name: move_to_line_end_or_take_history_hint + modifier: control + keycode: char_e + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintcomplete} + {edit: movetolineend} + ] + } + } + { + name: move_to_line_start + modifier: control + keycode: home + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolinestart} + } + { + name: move_to_line_end + modifier: control + keycode: end + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolineend} + } + { + name: move_up + modifier: control + keycode: char_p + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menuup} + {send: up} + ] + } + } + { + name: move_down modifier: control keycode: char_t mode: [emacs, vi_normal, vi_insert] - event: { send: menu name: commands_menu } + event: { + until: [ + {send: menudown} + {send: down} + ] + } + } + + { + name: delete_one_character_backward + modifier: none + keycode: backspace + mode: [emacs, vi_insert] + event: {edit: backspace} } { - name: vars_menu - modifier: alt - keycode: char_o - mode: [emacs, vi_normal, vi_insert] - event: { send: menu name: vars_menu } + name: delete_one_word_backward + modifier: control + keycode: backspace + mode: [emacs, vi_insert] + event: {edit: backspaceword} } { - name: commands_with_description - modifier: control - keycode: char_s - mode: [emacs, vi_normal, vi_insert] - event: { send: menu name: commands_with_description } + name: delete_one_character_forward + modifier: none + keycode: delete + mode: [emacs, vi_insert] + event: {edit: delete} + } + { + name: delete_one_character_forward + modifier: control + keycode: delete + mode: [emacs, vi_insert] + event: {edit: delete} + } + { + name: delete_one_character_forward + modifier: control + keycode: char_h + mode: [emacs, vi_insert] + event: {edit: backspace} + } + { + name: delete_one_word_backward + modifier: control + keycode: char_w + mode: [emacs, vi_insert] + event: {edit: backspaceword} + } + + { + name: move_left + modifier: none + keycode: backspace + mode: vi_normal + event: {edit: moveleft} + } + + { + name: newline_or_run_command + modifier: none + keycode: enter + mode: emacs + event: {send: enter} + } + { + name: move_left + modifier: control + keycode: char_b + mode: emacs + event: { + until: [ + {send: menuleft} + {send: left} + ] + } + } + { + name: move_right_or_take_history_hint + modifier: control + keycode: char_f + mode: emacs + event: { + until: [ + {send: historyhintcomplete} + {send: menuright} + {send: right} + ] + } + } + { + name: redo_change + modifier: control + keycode: char_g + mode: emacs + event: {edit: redo} + } + { + name: undo_change + modifier: control + keycode: char_z + mode: emacs + event: {edit: undo} + } + { + name: paste_before + modifier: control + keycode: char_y + mode: emacs + event: {edit: pastecutbufferbefore} + } + { + name: cut_word_left + modifier: control + keycode: char_w + mode: emacs + event: {edit: cutwordleft} + } + { + name: cut_line_to_end + modifier: control + keycode: char_k + mode: emacs + event: {edit: cuttoend} + } + { + name: cut_line_from_start + modifier: control + keycode: char_u + mode: emacs + event: {edit: cutfromstart} + } + { + name: swap_graphemes + modifier: control + keycode: char_t + mode: emacs + event: {edit: swapgraphemes} + } + { + name: move_one_word_left + modifier: alt + keycode: left + mode: emacs + event: {edit: movewordleft} + } + { + name: move_one_word_right_or_take_history_hint + modifier: alt + keycode: right + mode: emacs + event: { + until: [ + {send: historyhintwordcomplete} + {send: movewordright} + ] + } + } + { + name: move_one_word_left + modifier: alt + keycode: char_b + mode: emacs + event: {edit: movewordleft} + } + { + name: move_one_word_right_or_take_history_hint + modifier: alt + keycode: char_f + mode: emacs + event: { + until: [ + {send: historyhintwordcomplete} + {send: movewordright} + ] + } + } + { + name: delete_one_word_forward + modifier: alt + keycode: delete + mode: emacs + event: {edit: deleteword} + } + { + name: delete_one_word_backward + modifier: alt + keycode: backspace + mode: emacs + event: {edit: backspaceword} + } + { + name: delete_one_word_backward + modifier: alt + keycode: char_m + mode: emacs + event: {edit: backspaceword} + } + { + name: cut_word_to_right + modifier: alt + keycode: char_d + mode: emacs + event: {edit: cutwordright} + } + { + name: upper_case_word + modifier: alt + keycode: char_u + mode: emacs + event: {edit: uppercaseword} + } + { + name: lower_case_word + modifier: alt + keycode: char_l + mode: emacs + event: {edit: lowercaseword} + } + { + name: capitalize_char + modifier: alt + keycode: char_c + mode: emacs + event: {edit: capitalizechar} } ] } diff --git a/crates/nu-utils/src/sample_config/default_env.nu b/crates/nu-utils/src/sample_config/default_env.nu index b554fe5bb..a1f02e796 100644 --- a/crates/nu-utils/src/sample_config/default_env.nu +++ b/crates/nu-utils/src/sample_config/default_env.nu @@ -44,13 +44,13 @@ def create_right_prompt [] { # Use nushell functions to define your right and left prompt $env.PROMPT_COMMAND = {|| create_left_prompt } -$env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt } +# $env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt } # The prompt indicators are environmental variables that represent # the state of the prompt -$env.PROMPT_INDICATOR = {|| "> " } -$env.PROMPT_INDICATOR_VI_INSERT = {|| ": " } -$env.PROMPT_INDICATOR_VI_NORMAL = {|| "> " } +$env.PROMPT_INDICATOR = {|| " > " } +$env.PROMPT_INDICATOR_VI_INSERT = {|| " : " } +$env.PROMPT_INDICATOR_VI_NORMAL = {|| " > " } $env.PROMPT_MULTILINE_INDICATOR = {|| "::: " } # Specifies how environment variables are: @@ -69,17 +69,13 @@ $env.ENV_CONVERSIONS = { } # Directories to search for scripts when calling source or use -# -# By default, /scripts is added $env.NU_LIB_DIRS = [ - ($nu.default-config-dir | path join 'scripts') + # ($nu.default-config-dir | path join 'scripts') # add /scripts ] # Directories to search for plugin binaries when calling register -# -# By default, /plugins is added $env.NU_PLUGIN_DIRS = [ - ($nu.default-config-dir | path join 'plugins') + # ($nu.default-config-dir | path join 'plugins') # add /plugins ] # To add entries to PATH (on Windows you might use Path), you can use the following pattern: