mirror of
https://github.com/RGBCube/nu_scripts
synced 2025-08-02 07:07:46 +00:00
Add widget for nu exe (debug/release, and main vs other branch) (#634)
Full line prompt looks like: ``` ---<exeStatus>---------- <workingDirectory> ------ <gitRepoStatus> --- <dirs> > ``` Where `<exeStatus>` shows `<exe-path> <exe-branch>`, but is empty if: * nu exe running from a "bin" folder (based on `$nu.current-exe` path) * nu exe built from a "main" branch (otherwise shows `(version | get branch)`)
This commit is contained in:
parent
4fe113714a
commit
907612cc70
1 changed files with 43 additions and 25 deletions
|
@ -1,5 +1,9 @@
|
||||||
# Build a full-line prompt with widgets for:
|
# Build a full-line prompt with widgets for:
|
||||||
# current working directory; git status; and current position in remembered working directories (`std dirs`, a.k.a. `shells`)
|
# current working directory (duh)
|
||||||
|
# git status (branch, branch ahead/behind remote, files changed)
|
||||||
|
# ; current position in remembered working directories (`std dirs`, a.k.a. `shells`) (try it to see)
|
||||||
|
# also, as a nu dev special, widget for active nu executable. (flags `cargo run` vs "installed" and which branch built from)
|
||||||
|
#
|
||||||
#
|
#
|
||||||
# to use:
|
# to use:
|
||||||
# 1. copy this file to `($nu.default-config-dir | path add 'scripts')` (Or someplace on your $env.NU_LIB_DIRS path, defined in env.nu)
|
# 1. copy this file to `($nu.default-config-dir | path add 'scripts')` (Or someplace on your $env.NU_LIB_DIRS path, defined in env.nu)
|
||||||
|
@ -9,8 +13,8 @@
|
||||||
# consolidate all prompt stuff in config.nu.
|
# consolidate all prompt stuff in config.nu.
|
||||||
# 3. Add new prompt setup stuff somewhere in config.nu:
|
# 3. Add new prompt setup stuff somewhere in config.nu:
|
||||||
# ```
|
# ```
|
||||||
# use prompt-builder.nu
|
# use full-line.nu
|
||||||
# $env.PROMPT_COMMAND = {|| prompt-builder }
|
# $env.PROMPT_COMMAND = {|| full-line }
|
||||||
# $env.PROMPT_COMMAND_RIGHT = ""
|
# $env.PROMPT_COMMAND_RIGHT = ""
|
||||||
# ```
|
# ```
|
||||||
#
|
#
|
||||||
|
@ -18,39 +22,53 @@
|
||||||
|
|
||||||
use std dirs
|
use std dirs
|
||||||
|
|
||||||
# build the prompt from segments, looks like:
|
# returns the prompt string
|
||||||
#
|
#
|
||||||
# ^------------- <workingDirectory> ------ <gitRepoStatus> --- <dirs>$
|
# looks like:
|
||||||
|
# ---<exeStatus>---------- <workingDirectory> ------ <gitRepoStatus> --- <dirs>
|
||||||
|
# >
|
||||||
#
|
#
|
||||||
# or, if no git repo current directory
|
# <exeStatus> shows <exe-path> <exe-branch>, but is empty if
|
||||||
#
|
# * nu exe running from a "bin" folder (based on `$nu.current-exe` path)
|
||||||
# ^-------------------------- <workingDirectory> ------------- <dirs>$
|
# * nu exe built from a "main" branch (otherwise shows `(version | get branch)`)
|
||||||
export def main [
|
export def main [
|
||||||
--pad_char (-p) = '_' # character to fill with
|
--pad_char (-p) = '-' # character to fill with
|
||||||
] {
|
] {
|
||||||
let left_segment = $" (dir_string) "
|
let left_content = ($"($pad_char + $pad_char + $pad_char)(current_exe)")
|
||||||
let left_segment_length = ($left_segment | ansi strip | str length -g)
|
let left_content_len = ($left_content | ansi strip | str length -g)
|
||||||
|
let mid_content = ($" (dir_string) ")
|
||||||
let dirs_segment = $"|(dirs show | each {|it| if $it.active {'V'} else {'.'}} | str join '')|"
|
let mid_content_len = ($mid_content | ansi strip | str length -g)
|
||||||
mut git_segment = $" (repo-styled) "
|
|
||||||
if ($git_segment | str length -g) <= 2 {$git_segment = ''}
|
|
||||||
let right_segment = $"($git_segment)($pad_char * 3) ($dirs_segment)"
|
|
||||||
let right_segment_length = ($right_segment | ansi strip | str length -g)
|
|
||||||
|
|
||||||
let term_width = ((term size) | get columns)
|
let term_width = ((term size) | get columns)
|
||||||
mut left_half_length = (($term_width + $left_segment_length) / 2 | into int)
|
let left_padding = ((($term_width / 2) - ($mid_content_len / 2)) | into int)
|
||||||
if (($left_half_length + $right_segment_length) > $term_width) {
|
|
||||||
$left_half_length = $left_segment_length # adapt to narrow console
|
let dirs_segment = $" |(dirs show | each {|it| if $it.active {'V'} else {'.'}} | str join '')|"
|
||||||
}
|
let right_content = ($"(repo-styled)($pad_char + $pad_char + $pad_char)($dirs_segment)")
|
||||||
let right_half_length = ($term_width - $left_half_length) # guarantee sum === term_width
|
let right_content_len = ($right_content | ansi strip | str length -g)
|
||||||
|
|
||||||
|
let right_padding = (($term_width - $left_padding - $mid_content_len) | into int)
|
||||||
|
|
||||||
[(ansi reset),
|
[(ansi reset),
|
||||||
($left_segment | fill --character $pad_char --width $left_half_length --alignment right),
|
($left_content | fill --character $pad_char --width $left_padding --alignment left),
|
||||||
($right_segment | fill --character $pad_char --width $right_half_length --alignment right),
|
$mid_content,
|
||||||
|
($right_content | fill --character $pad_char --width $right_padding --alignment right),
|
||||||
"\n"
|
"\n"
|
||||||
] | str join ''
|
] | str join ''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# build current exe widget
|
||||||
|
def current_exe [] {
|
||||||
|
let content = ([
|
||||||
|
($nu.current-exe | path dirname | path basename | str replace "bin" ""),
|
||||||
|
(version | get branch | str replace "main" ""),
|
||||||
|
] | str join " " | str trim)
|
||||||
|
(if (($content | str length) > 0) {
|
||||||
|
$"(' <' | bright-yellow)($content)('> ' | bright-yellow)"
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
# build current working directory segment
|
# build current working directory segment
|
||||||
def dir_string [] {
|
def dir_string [] {
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue