Issue with Rendering of Two-Line Prompt Themes #5677
-
Code of Conduct
What happened?I encountered abnormal rendering when using two-line prompt themes (Windows Terminal / Nushell). I tried several two-line prompt themes (amro, atomic, tokyo), and they all exhibited the following issue: When starting: ┏[ hyoryu][ RAM: 28/63GB][ ~]
┖[ 01:52:45] ♥ After entering ┏[ hyoryu][ RAM: 28/63GB][ ~]
┏[ hyoryu][ RAM: 28/63GB][ ~]
┖[ 01:53:21] ♥ a Nushell Config# $nu.env-path
# Nushell Environment Config File
#
# version = "0.98.0"
def create_left_prompt [] {
let dir = match (do --ignore-shell-errors { $env.PWD | path relative-to $nu.home-path }) {
null => $env.PWD
'' => '~'
$relative_pwd => ([~ $relative_pwd] | path join)
}
let path_color = (if (is-admin) { ansi red_bold } else { ansi green_bold })
let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi light_green_bold })
let path_segment = $"($path_color)($dir)(ansi reset)"
$path_segment | str replace --all (char path_sep) $"($separator_color)(char path_sep)($path_color)"
}
def create_right_prompt [] {
# create a right prompt in magenta with green separators and am/pm underlined
let time_segment = ([
(ansi reset)
(ansi magenta)
(date now | format date '%x %X') # try to respect user's locale
] | str join | str replace --regex --all "([/:])" $"(ansi green)${1}(ansi magenta)" |
str replace --regex --all "([AP]M)" $"(ansi magenta_underline)${1}")
let last_exit_code = if ($env.LAST_EXIT_CODE != 0) {([
(ansi rb)
($env.LAST_EXIT_CODE)
] | str join)
} else { "" }
([$last_exit_code, (char space), $time_segment] | str join)
}
# Use nushell functions to define your right and left prompt
$env.PROMPT_COMMAND = {|| create_left_prompt }
# FIXME: This default is not implemented in rust code as of 2023-09-08.
$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_MULTILINE_INDICATOR = {|| "::: " }
# If you want previously entered commands to have a different prompt from the usual one,
# you can uncomment one or more of the following lines.
# This can be useful if you have a 2-line prompt and it's taking up a lot of space
# because every command entered takes up 2 lines instead of 1. You can then uncomment
# the line below so that previously entered commands show with a single `🚀`.
# $env.TRANSIENT_PROMPT_COMMAND = {|| "🚀 " }
# $env.TRANSIENT_PROMPT_INDICATOR = {|| "" }
# $env.TRANSIENT_PROMPT_INDICATOR_VI_INSERT = {|| "" }
# $env.TRANSIENT_PROMPT_INDICATOR_VI_NORMAL = {|| "" }
# $env.TRANSIENT_PROMPT_MULTILINE_INDICATOR = {|| "" }
# $env.TRANSIENT_PROMPT_COMMAND_RIGHT = {|| "" }
# Specifies how environment variables are:
# - converted from a string to a value on Nushell startup (from_string)
# - converted from a value back to a string when running external commands (to_string)
# Note: The conversions happen *after* config.nu is loaded
$env.ENV_CONVERSIONS = {
"PATH": {
from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
}
"Path": {
from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
}
}
# Directories to search for scripts when calling source or use
# The default for this is $nu.default-config-dir/scripts
$env.NU_LIB_DIRS = [
($nu.default-config-dir | path join 'scripts') # add <nushell-config-dir>/scripts
($nu.data-dir | path join 'completions') # default home for nushell completions
]
# Directories to search for plugin binaries when calling register
# The default for this is $nu.default-config-dir/plugins
$env.NU_PLUGIN_DIRS = [
($nu.default-config-dir | path join 'plugins') # add <nushell-config-dir>/plugins
]
# To add entries to PATH (on Windows you might use Path), you can use the following pattern:
# $env.PATH = ($env.PATH | split row (char esep) | prepend '/some/path')
# An alternate way to add entries to $env.PATH is to use the custom command `path add`
# which is built into the nushell stdlib:
# use std "path add"
# $env.PATH = ($env.PATH | split row (char esep))
# path add /some/path
# path add ($env.CARGO_HOME | path join "bin")
# path add ($env.HOME | path join ".local" "bin")
# $env.PATH = ($env.PATH | uniq)
fnm env --json | from json | load-env
# 如果是 Linux,则 `node` 在 `$env.FNM_MULTISHELL_PATH join "bin` 中。
$env.PATH = ($env.PATH | split row (char esep) | prepend $env.FNM_MULTISHELL_PATH)
$env.PATH = ($env.PATH | uniq )
# To load from a custom file you can use:
# source ($nu.default-config-dir | path join 'custom.nu') # $nu.config-path
# Nushell Config File
#
# version = "0.98.0"
let pink = "#fa86c4"
let pink_reverse = "#ffffff"
# For more information on defining custom themes, see
# https://www.nushell.sh/book/coloring_and_theming.html
# And here is the theme collection
# https://github.com/nushell/nu_scripts/tree/main/themes
let dark_theme = {
# color for nushell primitives
separator: white
leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
header: { fg: $pink, attr: b }
empty: blue
# Closures can be used to choose colors for specific values.
# The value (in this case, a bool) is piped into the closure.
# eg) {|| if $in { 'light_cyan' } else { 'light_gray' } }
bool: light_cyan
int: white
filesize: cyan
duration: white
date: purple
range: white
float: white
string: white
nothing: white
binary: white
cell-path: white
row_index: { fg: $pink, attr: b }
record: white
list: white
block: white
hints: dark_gray
search_result: { bg: red fg: white }
shape_and: purple_bold
shape_binary: purple_bold
shape_block: blue_bold
shape_bool: light_cyan
shape_closure: { fg: $pink, attr: b }
shape_custom: $pink
shape_datetime: cyan_bold
shape_directory: cyan
shape_external: cyan
shape_externalarg: { fg: $pink, attr: b }
shape_external_resolved: light_yellow_bold
shape_filepath: cyan
shape_flag: blue_bold
shape_float: purple_bold
# shapes are used to change the cli syntax highlighting
shape_garbage: { fg: white bg: red attr: b }
shape_glob_interpolation: cyan_bold
shape_globpattern: cyan_bold
shape_int: purple_bold
shape_internalcall: cyan_bold
shape_keyword: cyan_bold
shape_list: cyan_bold
shape_literal: blue
shape_match_pattern: $pink
shape_matching_brackets: { attr: u }
shape_nothing: light_cyan
shape_operator: yellow
shape_or: purple_bold
shape_pipe: purple_bold
shape_range: yellow_bold
shape_record: cyan_bold
shape_redirection: purple_bold
shape_signature: { fg: $pink, attr: b }
shape_string: $pink
shape_string_interpolation: cyan_bold
shape_table: blue_bold
shape_variable: purple
shape_vardecl: purple
shape_raw_string: light_purple
}
let light_theme = {
# color for nushell primitives
separator: dark_gray
leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
header: { fg: $pink, attr: b }
empty: blue
# Closures can be used to choose colors for specific values.
# The value (in this case, a bool) is piped into the closure.
# eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } }
bool: dark_cyan
int: dark_gray
filesize: cyan_bold
duration: dark_gray
date: purple
range: dark_gray
float: dark_gray
string: dark_gray
nothing: dark_gray
binary: dark_gray
cell-path: dark_gray
row_index: { fg: $pink, attr: b }
record: dark_gray
list: dark_gray
block: dark_gray
hints: dark_gray
search_result: { fg: white bg: red }
shape_and: purple_bold
shape_binary: purple_bold
shape_block: blue_bold
shape_bool: light_cyan
shape_closure: { fg: $pink, attr: b }
shape_custom: $pink
shape_datetime: cyan_bold
shape_directory: cyan
shape_external: cyan
shape_externalarg: { fg: $pink, attr: b }
shape_external_resolved: light_purple_bold
shape_filepath: cyan
shape_flag: blue_bold
shape_float: purple_bold
# shapes are used to change the cli syntax highlighting
shape_garbage: { fg: white bg: red attr: b }
shape_glob_interpolation: cyan_bold
shape_globpattern: cyan_bold
shape_int: purple_bold
shape_internalcall: cyan_bold
shape_keyword: cyan_bold
shape_list: cyan_bold
shape_literal: blue
shape_match_pattern: $pink
shape_matching_brackets: { attr: u }
shape_nothing: light_cyan
shape_operator: yellow
shape_or: purple_bold
shape_pipe: purple_bold
shape_range: yellow_bold
shape_record: cyan_bold
shape_redirection: purple_bold
shape_signature: { fg: $pink, attr: b }
shape_string: $pink
shape_string_interpolation: cyan_bold
shape_table: blue_bold
shape_variable: purple
shape_vardecl: purple
shape_raw_string: light_purple
}
# External completer example
# let carapace_completer = {|spans|
# carapace $spans.0 nushell ...$spans | from json
# }
# The default config record. This is where much of your global configuration is setup.
$env.config = {
show_banner: false # 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
}
table: {
mode: light # 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
show_empty: true # show 'empty list' and 'empty record' placeholders for command output
padding: { left: 1, right: 1 } # a left right padding of each column in a table
trim: {
methodology: wrapping # wrapping or truncating
wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology
truncating_suffix: "..." # A suffix used by the 'truncating' methodology
}
header_on_separator: false # show header text on separator/border line
# abbreviated_row_count: 10 # limit data rows from top and bottom after reaching a set point
}
error_style: "fancy" # "fancy" or "plain" for screen reader-friendly error messages
# Whether an error message should be printed if an error of a certain kind is triggered.
display_errors: {
exit_code: false # assume the external command prints an error message
# Core dump errors are always printed, and SIGPIPE never triggers an error.
# The setting below controls message printing for termination by all other signals.
termination_signal: true
}
# 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, %Y %b %d %H:%M:%S %z' # shows up in displays of variables or other datetime's outside of tables
# table: '%y/%m/%d %H:%M:%S' # generally shows up in tabular outputs such as ls. commenting this out will change it to the default human readable datetime format
}
explore: {
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: {}
},
selected_cell: { bg: light_blue },
}
history: {
max_size: 100_000 # Session has to be reloaded for this to take effect
sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file
file_format: "plaintext" # "sqlite" or "plaintext"
isolation: false # only available with sqlite file_format. true enables history isolation, false disables it. true will allow the history to be isolated to the current session using up/down arrows. 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
partial: true # set this to false to prevent partial filling of the prompt
algorithm: "prefix" # prefix or fuzzy
sort: "smart" # "smart" (alphabetical for prefix matching, fuzzy score for fuzzy matching) or "alphabetical"
external: {
enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow
max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options
completer: null # check 'carapace_completer' above as an example
}
use_ls_colors: true # set this to true to enable file/path/directory completions using LS_COLORS
}
filesize: {
metric: false # 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, inherit to skip setting cursor shape (line is the default)
vi_insert: block # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (block is the default)
vi_normal: underscore # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (underscore is the default)
}
color_config: $dark_theme # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record
footer_mode: 25 # always, never, number_of_rows, auto
float_precision: 2 # the precision for displaying floats in tables
buffer_editor: nvim # 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: vi # emacs, vi
shell_integration: {
# osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title
osc2: true
# osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory
osc7: true
# osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8
osc8: true
# osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal
osc9_9: false
# osc133 is several escapes invented by Final Term which include the supported ones below.
# 133;A - Mark prompt start
# 133;B - Mark prompt end
# 133;C - Mark pre-execution
# 133;D;exit - Mark execution finished with exit code
# This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is
osc133: true
# osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features
# 633;A - Mark prompt start
# 633;B - Mark prompt end
# 633;C - Mark pre-execution
# 633;D;exit - Mark execution finished with exit code
# 633;E - Explicitly set the command line with an optional nonce
# 633;P;Cwd=<path> - Mark the current working directory and communicate it to the terminal
# and also helps with the run recent menu in vscode
osc633: true
# reset_application_mode is escape \x1b[?1l and was added to help ssh work better
reset_application_mode: true
}
render_right_prompt_on_last_line: true # true or false to enable or disable right prompt to be rendered on last line of the prompt.
use_kitty_protocol: false # enables keyboard enhancement protocol implemented by kitty console, only if your terminal support this.
highlight_resolved_externals: false # true enables highlighting of external commands in the repl resolved by which.
recursion_limit: 50 # the maximum number of times nushell allows recursion before stopping it
plugins: {} # Per-plugin configuration. See https://www.nushell.sh/contributor-book/plugins.html#configuration.
plugin_gc: {
# Configuration for plugin garbage collection
default: {
enabled: true # true to enable stopping of inactive plugins
stop_after: 10sec # how long to wait after a plugin is inactive to stop it
}
plugins: {
# alternate configuration for specific plugins, by name, for example:
#
# gstat: {
# enabled: false
# }
}
}
hooks: {
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 }] # run if the PWD environment is different since the last repl input
}
display_output: "if (term size).columns >= 100 { table -e } else { table }" # run to display the output of a pipeline
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
{
name: completion_menu
only_buffer_difference: false
marker: "| "
type: {
layout: columnar
columns: 4
col_width: 20 # Optional value. If missing all the screen width is used to calculate column width
col_padding: 2
}
style: {
text: $pink
selected_text: { attr: r }
description_text: yellow
match_text: { attr: u }
selected_match_text: { attr: ur }
}
}
{
name: ide_completion_menu
only_buffer_difference: false
marker: "| "
type: {
layout: ide
min_completion_width: 0,
max_completion_width: 50,
max_completion_height: 10, # will be limited by the available lines in the terminal
padding: 0,
border: true,
cursor_offset: 0,
description_mode: "prefer_right"
min_description_width: 0
max_description_width: 50
max_description_height: 10
description_offset: 1
# If true, the cursor pos will be corrected, so the suggestions match up with the typed text
#
# C:\> str
# str join
# str trim
# str split
correct_cursor_pos: false
}
style: {
text: $pink
selected_text: { attr: r }
description_text: yellow
match_text: { attr: u }
selected_match_text: { attr: ur }
}
}
{
name: history_menu
only_buffer_difference: true
marker: "? "
type: {
layout: list
page_size: 10
}
style: {
text: $pink
selected_text: $pink_reverse
description_text: yellow
}
}
{
name: help_menu
only_buffer_difference: true
marker: "? "
type: {
layout: description
columns: 4
col_width: 20 # Optional value. If missing all the screen width is used to calculate column width
col_padding: 2
selection_rows: 4
description_rows: 10
}
style: {
text: $pink
selected_text: $pink_reverse
description_text: yellow
}
}
]
keybindings: [
{
name: completion_menu
modifier: none
keycode: tab
mode: [emacs vi_normal vi_insert]
event: {
until: [
{ send: menu name: completion_menu }
{ send: menunext }
{ edit: complete }
]
}
}
{
name: ide_completion_menu
modifier: control
keycode: char_n
mode: [emacs vi_normal vi_insert]
event: {
until: [
{ send: menu name: ide_completion_menu }
{ send: menunext }
{ edit: complete }
]
}
}
{
name: history_menu
modifier: control
keycode: char_r
mode: [emacs, vi_insert, vi_normal]
event: { send: menu name: history_menu }
}
{
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_menu
modifier: control
keycode: char_z
mode: emacs
event: {
until: [
{ send: menupageprevious }
{ edit: undo }
]
}
}
{
name: escape
modifier: none
keycode: escape
mode: [emacs, vi_normal, vi_insert]
event: { send: esc } # NOTE: does not appear to work
}
{
name: cancel_command
modifier: control
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_q
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: [
{ send: menuup }
{ send: up }
]
}
}
{
name: move_down
modifier: none
keycode: down
mode: [emacs, vi_normal, vi_insert]
event: {
until: [
{ send: menudown }
{ send: down }
]
}
}
{
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: {
until: [
{ send: menudown }
{ send: down }
]
}
}
{
name: delete_one_character_backward
modifier: none
keycode: backspace
mode: [emacs, vi_insert]
event: { edit: backspace }
}
{
name: delete_one_word_backward
modifier: control
keycode: backspace
mode: [emacs, vi_insert]
event: { edit: backspaceword }
}
{
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_backward
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: cuttolineend }
}
{
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 }
{ edit: 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 }
{ edit: 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 }
}
# The following bindings with `*system` events require that Nushell has
# been compiled with the `system-clipboard` feature.
# If you want to use the system clipboard for visual selection or to
# paste directly, uncomment the respective lines and replace the version
# using the internal clipboard.
{
name: copy_selection
modifier: control_shift
keycode: char_c
mode: emacs
event: { edit: copyselection }
# event: { edit: copyselectionsystem }
}
{
name: cut_selection
modifier: control_shift
keycode: char_x
mode: emacs
event: { edit: cutselection }
# event: { edit: cutselectionsystem }
}
# {
# name: paste_system
# modifier: control_shift
# keycode: char_v
# mode: emacs
# event: { edit: pastesystem }
# }
{
name: select_all
modifier: control_shift
keycode: char_a
mode: emacs
event: { edit: selectall }
}
]
}
# Use Theme
source ~/.oh-my-posh.nu
# Alias
alias git-bash = E:/SOFT/programming/package-manage/Git/bin/bash Theme# .oh-my-posh.nu
# make sure we have the right prompt render correctly
if ($env.config? | is-not-empty) {
$env.config = ($env.config | upsert render_right_prompt_on_last_line true)
}
$env.POWERLINE_COMMAND = 'oh-my-posh'
$env.POSH_THEME = (echo "C:\\Users\\hyoryu\\AppData\\Local\\Programs\\oh-my-posh\\themes\\tokyo_mine.omp.json")
$env.PROMPT_INDICATOR = ""
$env.POSH_SESSION_ID = (echo "4349ede4-7768-4782-84e6-e0f8871cf1c4")
$env.POSH_SHELL_VERSION = (version | get version)
let _omp_executable: string = (echo "C:/Users/hyoryu/AppData/Local/Programs/oh-my-posh/bin/oh-my-posh.exe")
# PROMPTS
def --wrapped _omp_get_prompt [
type: string,
...args: string
] {
mut execution_time = -1
mut no_status = true
# We have to do this because the initial value of `$env.CMD_DURATION_MS` is always `0823`, which is an official setting.
# See https://github.com/nushell/nushell/discussions/6402#discussioncomment-3466687.
if $env.CMD_DURATION_MS != '0823' {
$execution_time = $env.CMD_DURATION_MS
$no_status = false
}
(
^$_omp_executable print $type
--save-cache
--shell=nu
$"--shell-version=($env.POSH_SHELL_VERSION)"
$"--status=($env.LAST_EXIT_CODE)"
$"--no-status=($no_status)"
$"--execution-time=($execution_time)"
$"--terminal-width=((term size).columns)"
...$args
)
}
$env.PROMPT_MULTILINE_INDICATOR = (
^$_omp_executable print secondary
--shell=nu
$"--shell-version=($env.POSH_SHELL_VERSION)"
)
$env.PROMPT_COMMAND = {||
# hack to set the cursor line to 1 when the user clears the screen
# this obviously isn't bulletproof, but it's a start
mut clear = false
if $nu.history-enabled {
$clear = (history | is-empty) or ((history | last 1 | get 0.command) == "clear")
}
if ($env.SET_POSHCONTEXT? | is-not-empty) {
do --env $env.SET_POSHCONTEXT
}
_omp_get_prompt primary $"--cleared=($clear)"
}
$env.PROMPT_COMMAND_RIGHT = {|| _omp_get_prompt right }
^$_omp_executable notice
// tokyo_mine.opm.json
{
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"blocks": [
{
"alignment": "left",
"segments": [
{
"foreground": "#7eb8da",
"style": "plain",
"#template": "\u250f[<#ffffff>\ueb99</> {{ .UserName }} from <#ffffff>\uf108</> {{ .HostName }}]",
"template": "\u250f[<#ffffff>\ueb99</> {{ .UserName }}]",
"type": "session"
},
{
"#foreground": "#be9ddf",
"#properties": {
"style": "dallas",
"threshold": 0
},
"#style": "diamond",
"#template": "[<#ffffff>\uf252</> {{ .FormattedMs }}s]",
"#type": "executiontime"
},
{
"properties": {
"root_icon": "\uf292"
},
"style": "diamond",
"template": "\uf0e7",
"type": "root"
},
{
"foreground": "#be9ddf",
"style": "diamond",
"template": "[<#ffffff>\ue266</> RAM: {{ (div ((sub .PhysicalTotalMemory .PhysicalFreeMemory)|float64) 1073741824.0) }}/{{ (div .PhysicalTotalMemory 1073741824.0) }}GB]",
"type": "sysinfo"
},
{
"foreground": "#7eb8da",
"properties": {
"style": "folder"
},
"style": "plain",
"#template": "\u2516[<#98bfad>{{ .Path }}</>] <#ffa5d8>\u2665",
"template": "[<#98bfad>\ue5ff {{ .Path }}</>]",
"type": "path"
},
{
"foreground": "#ffa5d8",
"properties": {
"fetch_stash_count": true,
"fetch_status": true,
"fetch_upstream_icon": true
},
"style": "plain",
"template": "[<#ffffff>{{ .UpstreamIcon }}</>{{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} <#ffffff>\uf044</> {{ .Working.String }}{{ end }}{{ if and (.Working.Changed) (.Staging.Changed) }} |{{ end }}{{ if .Staging.Changed }} <#ffffff>\uf046</> {{ .Staging.String }}{{ end }}{{ if gt .StashCount 0 }} <#ffffff>\ueb4b</> {{ .StashCount }}{{ end }}]",
"type": "git"
},
{
"foreground": "#ffa5d8",
"style": "plain",
"template": "[{{ .Profile }}{{if .Region}}@{{ .Region }}{{ end }}]",
"type": "aws"
},
{
"foreground": "#ffa5d8",
"style": "plain",
"template": "[{{.Context}}{{if .Namespace}} :: {{.Namespace}}{{end}}]",
"type": "kubectl"
},
{
"foreground": "#ffa5d8",
"style": "plain",
"template": "[\uf0e7]",
"type": "root"
},
{
"foreground": "#ffa5d8",
"style": "powerline",
"template": "[<#ffffff>\uea6c</> Error, check your command]",
"type": "status"
}
],
"type": "prompt"
},
{
"alignment": "left",
"newline": true,
"segments": [
{
"foreground": "#7eb8da",
"properties": {
"#time_format": "Monday at 3:04:05 PM",
"time_format": "15:04:05"
},
"style": "diamond",
"#template": "[<#ffffff>\uf073</> {{ .CurrentDate | date .Format }}]",
"template": "\u2516[<#ffffff>\uf108</> {{ .CurrentDate | date .Format }}]",
"type": "time"
},
{
"foreground": "#ffa5d8",
"style": "plain",
"template": " \u2665",
"type": "text"
}
],
"type": "prompt"
},
{
"#alignment": "left",
"#newline": true,
"#segments": [
{
"foreground": "#7eb8da",
"style": "plain",
"template": "\u2514\u2500Δ",
"type": "text"
}
],
"#type": "prompt"
}
],
"final_space": false,
"version": 2
} What OS are you seeing the problem on?Windows Which shell are you using?nu Log output┏[ hyoryu][ RAM: 27/63GB][ ~]
┖[ 02:36:06] ♥ oh-my-posh debug nu --plain
Version: 23.14.2
Shell: nu (0.98.0)
Prompt:
┏[ hyoryu][ RAM: 27/63GB][ ~]
┖[ 02:36:08] ♥
Segments:
ConsoleTitle(false) - 0 ms
Session(true) - 2 ms
Sysinfo(true) - 2 ms
Path(true) - 3 ms
Time(true) - 0 ms
Text(true) - 0 ms
Run duration: 27.3153ms
Cache path: C:\Users\hyoryu\AppData\Local\oh-my-posh
Config path: C:\Users\hyoryu\AppData\Local\Programs\oh-my-posh\themes\tokyo_mine.omp.json
Logs:
[DEBUG] 02:36:08.486 debug.go:49 → debug mode enabled
[DEBUG] 02:36:08.506 debug.go:49 → plain mode enabled
[DEBUG] 02:36:08.506 terminal.go:Getenv:164 → C:\Users\hyoryu\AppData\Local
[TRACE] 02:36:08.506 terminal.go:Getenv(LOCALAPPDATA) - 0s
[TRACE] 02:36:08.506 terminal.go:CachePath() - 0s
[DEBUG] 02:36:08.506 terminal.go:70 → loading cache file: C:\Users\hyoryu\AppData\Local\oh-my-posh\omp.cache
[DEBUG] 02:36:08.507 terminal.go:70 → loading cache key: upgrade_check
[TRACE] 02:36:08.507 terminal.go(C:\Users\hyoryu\AppData\Local\oh-my-posh\omp.cache) - 1.102ms
[DEBUG] 02:36:08.507 terminal.go:Getenv:164 → C:\Users\hyoryu\AppData\Local
[TRACE] 02:36:08.507 terminal.go:Getenv(LOCALAPPDATA) - 0s
[TRACE] 02:36:08.507 terminal.go:CachePath() - 0s
[DEBUG] 02:36:08.507 terminal.go:70 → loading cache file: C:\Users\hyoryu\AppData\Local\oh-my-posh\omp.cache.4349ede4-7768-4782-84e6-e0f8871cf1c4
[DEBUG] 02:36:08.507 terminal.go:70 → loading cache key: prompt_count_cache
[TRACE] 02:36:08.507 terminal.go(C:\Users\hyoryu\AppData\Local\oh-my-posh\omp.cache.4349ede4-7768-4782-84e6-e0f8871cf1c4) - 0s
[TRACE] 02:36:08.507 terminal.go:setPromptCount() - 0s
[DEBUG] 02:36:08.507 terminal.go:Getenv:164 → C:\Users\hyoryu\AppData\Local\Programs\oh-my-posh\themes\tokyo_mine.omp.json
[TRACE] 02:36:08.507 terminal.go:Getenv(POSH_THEME) - 0s
[DEBUG] 02:36:08.507 terminal.go:ResolveConfigPath:96 → config set using POSH_THEME: C:\Users\hyoryu\AppData\Local\Programs\oh-my-posh\themes\tokyo_mine.omp.json
[TRACE] 02:36:08.507 terminal.go:ResolveConfigPath() - 0s
[TRACE] 02:36:08.507 terminal.go:Init() - 21.1777ms
[TRACE] 02:36:08.507 terminal.go:Flags() - 0s
[TRACE] 02:36:08.507 load.go:loadConfig() - 0s
[TRACE] 02:36:08.507 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.507 debug.go:57 → terminal program: Windows Terminal
[DEBUG] 02:36:08.507 debug.go:57 → terminal shell: shell
[DEBUG] 02:36:08.507 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.507 terminal.go:Getenv(OMP_CACHE_DISABLED) - 0s
[TRACE] 02:36:08.507 terminal_windows.go:WindowsRegistryKeyValue(HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\ColorizationColor) - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.507 terminal_windows.go:WindowsRegistryKeyValue:215 → ColorizationColor(DWORD): 0xC4FA85BA
[TRACE] 02:36:08.507 terminal.go:Shell() - 0s
[DEBUG] 02:36:08.507 terminal.go:Getenv:164 → 0.98.0
[TRACE] 02:36:08.507 terminal.go:Getenv(POSH_SHELL_VERSION) - 0s
[DEBUG] 02:36:08.507 debug.go:PrintDebug:23 → segment: Title
[DEBUG] 02:36:08.507 text.go:Render:80 → rendering template:
[TRACE] 02:36:08.507 terminal.go:Flags() - 0s
[TRACE] 02:36:08.507 terminal.go:Shell() - 0s
[DEBUG] 02:36:08.507 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.507 terminal.go:Getenv(POSH_CURSOR_LINE) - 0s
[DEBUG] 02:36:08.507 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.507 terminal.go:Getenv(POSH_CURSOR_COLUMN) - 0s
[TRACE] 02:36:08.507 terminal.go:Flags() - 0s
[TRACE] 02:36:08.507 terminal.go:Flags() - 0s
[TRACE] 02:36:08.507 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.507 status.go:Init:53 → {{ .Code }}
[TRACE] 02:36:08.507 terminal.go:Flags() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:PathSeparator() - 0s
[TRACE] 02:36:08.507 terminal.go:Flags() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:Flags() - 0s
[TRACE] 02:36:08.507 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.507 terminal.go:Flags() - 0s
[TRACE] 02:36:08.507 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.507 sysinfo.go:Init:36 → precision: 2
[DEBUG] 02:36:08.508 terminal.go:Pwd:189 → C:\Users\hyoryu
[TRACE] 02:36:08.508 terminal.go:Pwd() - 971.1µs
[DEBUG] 02:36:08.508 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.508 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.508 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.508 segment.go:SetEnabled:115 → segment: Status
[TRACE] 02:36:08.508 terminal.go:StatusCodes() - 0s
[DEBUG] 02:36:08.508 text.go:Render:80 → rendering template: {{ .Code }}
[TRACE] 02:36:08.508 terminal.go:Flags() - 0s
[TRACE] 02:36:08.508 terminal.go:Pwd() - 0s
[TRACE] 02:36:08.508 terminal.go:Pwd() - 0s
[DEBUG] 02:36:08.508 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.508 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.508 segment.go:SetEnabled:115 → segment: Sysinfo
[DEBUG] 02:36:08.508 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.508 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.508 segment.go:SetEnabled:115 → segment: Aws
[TRACE] 02:36:08.508 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.508 aws.go:Enabled:42 → display_default: true
[DEBUG] 02:36:08.508 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.508 terminal.go:Getenv(AWS_VAULT) - 0s
[DEBUG] 02:36:08.508 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.508 terminal_windows.go:Root() - 0s
[TRACE] 02:36:08.508 terminal.go:Getenv(AWS_DEFAULT_PROFILE) - 0s
[DEBUG] 02:36:08.508 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.508 terminal.go:Getenv(AWS_PROFILE) - 0s
[TRACE] 02:36:08.508 terminal.go:Shell() - 0s
[DEBUG] 02:36:08.508 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.508 terminal.go:StatusCodes() - 0s
[TRACE] 02:36:08.508 terminal.go:Flags() - 0s
[TRACE] 02:36:08.508 terminal.go:Getenv(AWS_REGION) - 0s
[TRACE] 02:36:08.508 terminal_windows.go:IsWsl() - 0s
[DEBUG] 02:36:08.508 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.508 terminal.go:Getenv(AWS_DEFAULT_REGION) - 0s
[TRACE] 02:36:08.508 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.508 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.508 terminal.go:Getenv(AWS_CONFIG_FILE) - 0s
[TRACE] 02:36:08.508 terminal.go:Pwd() - 0s
[DEBUG] 02:36:08.508 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.508 terminal.go:Pwd() - 0s
[TRACE] 02:36:08.508 terminal.go:Pwd() - 0s
[DEBUG] 02:36:08.508 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.508 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.508 terminal.go:Pwd() - 0s
[DEBUG] 02:36:08.508 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.508 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.508 segment.go:SetEnabled:115 → segment: Git
[TRACE] 02:36:08.508 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.508 terminal.go:Pwd() - 0s
[TRACE] 02:36:08.508 terminal.go:Pwd() - 0s
[DEBUG] 02:36:08.508 terminal.go:Getenv:164 → C:\Users\hyoryu\AppData\Local
[DEBUG] 02:36:08.508 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.508 terminal.go:Getenv(LOCALAPPDATA) - 0s
[TRACE] 02:36:08.508 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.508 terminal_windows.go:58 → C:\Users\hyoryu
[DEBUG] 02:36:08.508 segment.go:SetEnabled:115 → segment: Root
[TRACE] 02:36:08.508 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.508 segment.go:SetEnabled:115 → segment: Kubectl
[TRACE] 02:36:08.508 terminal_windows.go:Root() - 0s
[DEBUG] 02:36:08.508 terminal_windows.go:58 → C:\Users\hyoryu
[DEBUG] 02:36:08.508 segment.go:SetEnabled:115 → segment: Root
[DEBUG] 02:36:08.510 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.508 kubectl.go:Enabled:79 → cache_timeout: 0
[DEBUG] 02:36:08.510 segment.go:SetEnabled:115 → segment: Path
[DEBUG] 02:36:08.510 kubectl.go:Enabled:93 → parse_kubeconfig: true
[DEBUG] 02:36:08.510 terminal.go:Getenv:164 → NO DATA
[DEBUG] 02:36:08.510 path.go:149 → display_cygpath: false
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:Getenv(KUBECONFIG) - 0s
[TRACE] 02:36:08.510 terminal.go:PathSeparator() - 0s
[TRACE] 02:36:08.510 terminal.go:Pwd() - 0s
[DEBUG] 02:36:08.510 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.510 terminal.go:Shell() - 0s
[TRACE] 02:36:08.510 terminal.go:Shell() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[ERROR] 02:36:08.510 terminal.go:FileContent:297 → open C:\Users\hyoryu\.kube\config: The system cannot find the path specified.
[TRACE] 02:36:08.510 terminal.go:FileContent(C:\Users\hyoryu\.kube\config) - 0s
[DEBUG] 02:36:08.510 kubectl.go:doParseKubeConfig:151 → display_error: false
[TRACE] 02:36:08.510 terminal_windows.go:Root() - 0s
[DEBUG] 02:36:08.510 terminal.go:TemplateCache:651 → environment: [ACSetupSvcPort=23210 ACSvcPort=17532 ALLUSERSPROFILE=C:\ProgramData APPDATA=C:\Users\hyoryu\AppData\Roaming CARGO_HOME=E:\SOFT\programming\programming-language\rust\cargo CMD_DURATION_MS=1 CommonProgramFiles=C:\Program Files\Common Files CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files CommonProgramW6432=C:\Program Files\Common Files COMPUTERNAME=HYORYU-DESKTOP ComSpec=C:\WINDOWS\system32\cmd.exe CPLUS_INCLUDE_PATH=C:\Users\hyoryu\scoop\apps\gcc\current\include C_INCLUDE_PATH=C:\Users\hyoryu\scoop\apps\gcc\current\include DIRS_POSITION=0 DriverData=C:\Windows\System32\Drivers\DriverData FNM_ARCH=x64 FNM_COREPACK_ENABLED=false FNM_DIR=E:\SOFT\programming\package-manage\fnm FNM_LOGLEVEL=info FNM_MULTISHELL_PATH=C:\Users\hyoryu\AppData\Local\fnm_multishells\53548_1727285610130 FNM_NODE_DIST_MIRROR=https://nodejs.org/dist FNM_RESOLVE_ENGINES=false FNM_VERSION_FILE_STRATEGY=local GOPATH=E:/SOFT/programming/programming-language/go/gopath HOMEDRIVE=C: HOMEPATH=\Users\hyoryu JAVA_HOME=E:\SOFT\programming\programming-language\Java\jdk-20 LAST_EXIT_CODE=0 LOCALAPPDATA=C:\Users\hyoryu\AppData\Local LOGONSERVER=\\HYORYU-DESKTOP NUMBER_OF_PROCESSORS=16 NU_LOG_DATE_FORMAT=%Y-%m-%dT%H:%M:%S%.3f NU_LOG_FORMAT=%ANSI_START%%DATE%|%LEVEL%|%MSG%%ANSI_STOP% NU_VERSION=0.98.0 OneDrive=C:\Users\hyoryu\OneDrive OneDriveConsumer=C:\Users\hyoryu\OneDrive OS=Windows_NT Path=C:\Users\hyoryu\AppData\Local\fnm_multishells\53548_1727285610130;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;E:\SOFT\programming\programming-language\Python\Python312\Scripts;E:\SOFT\tool_text\Neovim\bin;E:\SOFT\programming\package-manage\Git\bin;E:\SOFT\programming\programming-language\Python\Python312;E:\SOFT\programming\programming-language\javascript\nodejs;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;E:\SOFT\programming\database\mongodb\mongosh;E:\SOFT\programming\programming-language\Java\jdk-20\bin;E:\SOFT\tool_movie-editor\ffmpeg\ffmpeg-7.0.1-essentials_build\bin;E:\SOFT\programming\database\sqlite\sqlite-tools-win-x64-3460000;E:\SOFT\programming\database\PostgreSQL\16\bin;E:\SOFT\programming\package-manage\maven\apache-maven-3.9.6\bin;E:\SOFT\programming\package-manage\fnm;E:\SOFT\programming\programming-language\lua\luarocks-3.11.1-windows-64;C:\Program Files\PowerShell\7\;C:\Program Files\Neovim\bin;C:\Program Files\Go\bin;C:\Users\hyoryu\;C:\Program Files\Docker\Docker\resources\bin;E:\SOFT\programming\programming-language\rust\cargo\bin;C:\Users\hyoryu\scoop\apps\gcc\current\bin;C:\Users\hyoryu\scoop\shims;C:\Users\hyoryu\AppData\Local\Microsoft\WindowsApps;C:\Users\hyoryu\AppData\Local\Programs\oh-my-posh\bin;E:\SOFT\programming\package-manage\pnpm;E:\SOFT\programming\editor\VisualStudioCode\bin;C:\Users\hyoryu\go\bin;C:\Users\hyoryu\AppData\Local\Programs\nu\bin\ PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC POSH_INSTALLER=winget POSH_SESSION_ID=4349ede4-7768-4782-84e6-e0f8871cf1c4 POSH_SHELL_VERSION=0.98.0 POSH_THEME=C:\Users\hyoryu\AppData\Local\Programs\oh-my-posh\themes\tokyo_mine.omp.json POSH_THEMES_PATH=C:\Users\hyoryu\AppData\Local\Programs\oh-my-posh\themes POWERLINE_COMMAND=oh-my-posh POWERSHELL_DISTRIBUTION_CHANNEL=MSI:Windows 10 Pro PROCESSOR_ARCHITECTURE=AMD64 PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 167 Stepping 1, GenuineIntel PROCESSOR_LEVEL=6 PROCESSOR_REVISION=a701 ProgramData=C:\ProgramData ProgramFiles=C:\Program Files ProgramFiles(x86)=C:\Program Files (x86) ProgramW6432=C:\Program Files PROMPT_INDICATOR= PROMPT_MULTILINE_INDICATOR=> PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules PUBLIC=C:\Users\Public PWD=C:\Users\hyoryu RlsSvcPort=22112 RUSTUP_HOME=E:\SOFT\programming\programming-language\rust\rustup SESSIONNAME=Console SystemDrive=C: SystemRoot=C:\WINDOWS TEMP=C:\Users\hyoryu\AppData\Local\Temp TMP=C:\Users\hyoryu\AppData\Local\Temp USERDOMAIN=HYORYU-DESKTOP USERDOMAIN_ROAMINGPROFILE=HYORYU-DESKTOP USERNAME=hyoryu USERPROFILE=C:\Users\hyoryu windir=C:\WINDOWS WSLENV=WT_SESSION:WT_PROFILE_ID: WT_PROFILE_ID={47302f9c-1ac4-566c-aa3e-8cf29889d6ab} WT_SESSION=9b12573e-ab05-47b9-abbb-6e60206adae2]
[TRACE] 02:36:08.510 terminal.go:Pwd() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.510 terminal_windows.go:58 → C:\Users\hyoryu
[DEBUG] 02:36:08.510 segment.go:SetEnabled:115 → segment: Session
[TRACE] 02:36:08.510 terminal_windows.go:IsWsl() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.510 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:Getenv(SSH_CONNECTION) - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.510 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.510 path.go:setMappedLocations:563 → mapped_locations_enabled: true
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[ERROR] 02:36:08.510 terminal.go:FileContent:297 → open C:\Users\hyoryu/.aws/config: The system cannot find the path specified.
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.510 path.go:setMappedLocations:564 →
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.510 terminal.go:User:330 → hyoryu
[TRACE] 02:36:08.510 terminal.go:FileContent(C:\Users\hyoryu/.aws/config) - 1.6461ms
[DEBUG] 02:36:08.510 path.go:setMappedLocations:565 →
[TRACE] 02:36:08.510 terminal.go:User() - 0s
[DEBUG] 02:36:08.510 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:PathSeparator() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.510 terminal.go:Host:347 → hyoryu-desktop
[TRACE] 02:36:08.510 terminal.go:Host() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.510 path.go:setMappedLocations:566 → ~
[DEBUG] 02:36:08.510 terminal.go:Getenv:164 → NO DATA
[TRACE] 02:36:08.510 terminal.go:Getenv(SHLVL) - 0s
[DEBUG] 02:36:08.510 path.go:setMappedLocations:571 → mapped_locations: map[]
[TRACE] 02:36:08.510 terminal.go:TemplateCache() - 1.6461ms
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:PathSeparator() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:TemplateCache() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:PathSeparator() - 0s
[TRACE] 02:36:08.510 terminal.go:TemplateCache() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.510 status.go:Enabled:42 → always_enabled: false
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.510 path.go:colorizePath:740 → cycle: []
[DEBUG] 02:36:08.510 path.go:getFolderSeparator:273 → NO DATA
[DEBUG] 02:36:08.510 path.go:getFolderSeparator:275 → \
[DEBUG] 02:36:08.510 path.go:colorizePath:743 → cycle_folder_separator: false
[DEBUG] 02:36:08.510 path.go:colorizePath:744 → %s
[DEBUG] 02:36:08.510 path.go:colorizePath:746 → %s
[DEBUG] 02:36:08.510 path.go:colorizePath:747 → %s
[DEBUG] 02:36:08.510 path.go:colorizePath:748 → %s
[TRACE] 02:36:08.510 terminal.go:Pwd() - 0s
[TRACE] 02:36:08.510 terminal.go:TemplateCache() - 0s
[TRACE] 02:36:08.510 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.510 terminal.go:StackCount() - 0s
[DEBUG] 02:36:08.511 win32_windows.go:isWriteable:299 → not current user or in group
[DEBUG] 02:36:08.511 win32_windows.go:isWriteable:303 → current user is member of S-1-5-32-544
[DEBUG] 02:36:08.511 win32_windows.go:isWriteable:311 ↓
WRITE_DAC
WRITE_OWNER
SYNCHRONIZE
DELETE
READ_CONTROL
[DEBUG] 02:36:08.511 win32_windows.go:isWriteable:313 → user has write access
[TRACE] 02:36:08.511 terminal_windows.go:DirIsWritable() - 1.0058ms
[TRACE] 02:36:08.511 terminal.go:TemplateCache() - 0s
[DEBUG] 02:36:08.512 terminal.go:CommandPath:389 → E:\SOFT\programming\package-manage\Git\bin\git.exe
[TRACE] 02:36:08.512 terminal.go:CommandPath(git.exe) - 3.6601ms
[TRACE] 02:36:08.512 terminal.go:HasCommand(git.exe) - 3.6601ms
[DEBUG] 02:36:08.512 git.go:shouldDisplay:312 → fetch_bare_info: false
[TRACE] 02:36:08.512 terminal.go:Pwd() - 0s
[DEBUG] 02:36:08.512 terminal.go:ResolveSymlink:286 → C:\Users\hyoryu
[TRACE] 02:36:08.512 terminal.go:ResolveSymlink(C:\Users\hyoryu) - 0s
[ERROR] 02:36:08.513 terminal.go:HasParentFilePath:553 → CreateFile .git: The system cannot find the file specified.
[TRACE] 02:36:08.513 terminal.go:HasParentFilePath(.git) - 998µs
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: ┏[<#ffffff></> {{ .UserName }}]
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: [<#98bfad> {{ .Path }}</>]
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: [<#ffffff></> RAM: {{ (div ((sub .PhysicalTotalMemory .PhysicalFreeMemory)|float64) 1073741824.0) }}/{{ (div .PhysicalTotalMemory 1073741824.0) }}GB]
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[TRACE] 02:36:08.513 terminal.go:TemplateCache() - 0s
[TRACE] 02:36:08.513 terminal.go:TemplateCache() - 0s
[TRACE] 02:36:08.513 terminal.go:TemplateCache() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template:
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: diamond
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: plain
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: plain
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: plain
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: plain
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: powerline
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: plain
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: diamond
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: plain
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[TRACE] 02:36:08.513 terminal.go:Shell() - 0s
[TRACE] 02:36:08.513 terminal.go:Shell() - 0s
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[TRACE] 02:36:08.513 terminal.go:Pwd() - 0s
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.513 terminal.go:GOOS() - 0s
[TRACE] 02:36:08.513 terminal.go:Pwd() - 0s
[DEBUG] 02:36:08.513 segment.go:SetEnabled:115 → segment: Text
[TRACE] 02:36:08.513 terminal.go:TemplateCache() - 0s
[DEBUG] 02:36:08.513 terminal_windows.go:58 → C:\Users\hyoryu
[TRACE] 02:36:08.513 terminal.go:GOOS() - 0s
[DEBUG] 02:36:08.513 segment.go:SetEnabled:115 → segment: Time
[DEBUG] 02:36:08.513 time.go:Enabled:29 → 15:04:05
[TRACE] 02:36:08.513 terminal.go:TemplateCache() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: ♥
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: ┖[<#ffffff></> {{ .CurrentDate | date .Format }}]
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[TRACE] 02:36:08.513 terminal.go:TemplateCache() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: diamond
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[DEBUG] 02:36:08.513 text.go:Render:80 → rendering template: plain
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s
[TRACE] 02:36:08.513 terminal.go:Shell() - 0s
[TRACE] 02:36:08.513 terminal.go:Shell() - 0s
[TRACE] 02:36:08.513 terminal.go:Shell() - 0s
[TRACE] 02:36:08.513 terminal.go:Shell() - 0s
[TRACE] 02:36:08.513 terminal.go:Shell() - 0s
[DEBUG] 02:36:08.513 terminal.go:Getenv:164 → C:\Users\hyoryu\AppData\Local
[TRACE] 02:36:08.513 terminal.go:Getenv(LOCALAPPDATA) - 0s
[TRACE] 02:36:08.513 terminal.go:CachePath() - 0s
[TRACE] 02:36:08.513 terminal.go:Flags() - 0s |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 6 replies
-
@SetsuikiHyoryu I can't reproduce this. Upgraded to 0.98, yet the prompt is rendered correctly using your config. |
Beta Was this translation helpful? Give feedback.
-
The only time i've seen something like this in nushell is when nushell starts too fast. As I recall, what happens is nushell starts and gets the terminal width, let's say 80x24, in the meantime, your terminal finishes starting and now the terminal width is 100x24, but nushell already knows the size as 80x24, so when you type any character, it realizes it's bigger and redraws the prompt. At least that's my theory. We could introduce some artificial delay in the nushell startup, but I hate to intentionally slow things down. |
Beta Was this translation helpful? Give feedback.
The only time i've seen something like this in nushell is when nushell starts too fast. As I recall, what happens is nushell starts and gets the terminal width, let's say 80x24, in the meantime, your terminal finishes starting and now the terminal width is 100x24, but nushell already knows the size as 80x24, so when you type any character, it realizes it's bigger and redraws the prompt. At least that's my theory. We could introduce some artificial delay in the nushell startup, but I hate to intentionally slow things down.