mirror of
https://github.com/RGBCube/nu_scripts
synced 2025-08-02 07:07:46 +00:00
refactor left_prompt decorator logic (#469)
- added instructions for measurements - change NU_POWER_MODE default to `power` (in fast mode, there is still a problem with hid eable components on the left) - tweaked atuin_stat theme Co-authored-by: nash <nash@iffy.me>
This commit is contained in:
parent
17103049f5
commit
cfdc7b725c
2 changed files with 45 additions and 23 deletions
|
@ -7,6 +7,8 @@ use power.nu
|
||||||
power inject 1 2 {source: kube, color: '#504945'} {
|
power inject 1 2 {source: kube, color: '#504945'} {
|
||||||
context: purple
|
context: purple
|
||||||
}
|
}
|
||||||
|
use power_utils.nu
|
||||||
|
power inject 0 1 {source: atuin, color: '#678067'}
|
||||||
power init
|
power init
|
||||||
```
|
```
|
||||||
or
|
or
|
||||||
|
@ -36,8 +38,29 @@ power init
|
||||||
- `let-env NU_POWER_DECORATOR = '<power|plain>'` power mode and plain mode
|
- `let-env NU_POWER_DECORATOR = '<power|plain>'` power mode and plain mode
|
||||||
- `let-env NU_POWER_FRAME = '<default|fill>'` two line prompt (experimental)
|
- `let-env NU_POWER_FRAME = '<default|fill>'` two line prompt (experimental)
|
||||||
|
|
||||||
|
### benchmark
|
||||||
|
```
|
||||||
|
let-env NU_POWER_BENCHMARK = true
|
||||||
|
```
|
||||||
|
Then execute a few commands casually, such as pressing the Enter key continuously.
|
||||||
|
then execute
|
||||||
|
|
||||||
|
```
|
||||||
|
let-env NU_POWER_MODE = 'fast' # or 'power'
|
||||||
|
```
|
||||||
|
|
||||||
|
Go ahead and press enter,
|
||||||
|
Execute power timelog to analyze the results.
|
||||||
|
```
|
||||||
|
power timelog
|
||||||
|
| group-by message
|
||||||
|
| transpose k v
|
||||||
|
| each {|x| $x | upsert v ($x.v | get duration | math avg)}
|
||||||
|
```
|
||||||
|
|
||||||
## todo
|
## todo
|
||||||
- [x] source return `$nothing` for hiding
|
- [x] source return `$nothing` for hiding
|
||||||
|
- [ ] in fast mode, there is still a problem with hideable components on the left
|
||||||
- [x] proxy stat invalid in plain mode
|
- [x] proxy stat invalid in plain mode
|
||||||
- '<<' not longer hide separator in `fast` mode
|
- '<<' not longer hide separator in `fast` mode
|
||||||
- [ ] implement `power eject`
|
- [ ] implement `power eject`
|
||||||
|
|
|
@ -97,7 +97,7 @@ def logtime [msg act] {
|
||||||
return $result
|
return $result
|
||||||
}
|
}
|
||||||
|
|
||||||
def-env wraptime [message action] {
|
def wraptime [message action] {
|
||||||
if $env.NU_POWER_BENCHMARK? == true {
|
if $env.NU_POWER_BENCHMARK? == true {
|
||||||
{|| logtime $message $action }
|
{|| logtime $message $action }
|
||||||
} else {
|
} else {
|
||||||
|
@ -120,7 +120,7 @@ export def timelog [] {
|
||||||
def decorator [ ] {
|
def decorator [ ] {
|
||||||
match $env.NU_POWER_DECORATOR {
|
match $env.NU_POWER_DECORATOR {
|
||||||
'plain' => {
|
'plain' => {
|
||||||
{|s, direction?: string, color?: string = 'light_yellow', fg?: string|
|
{|s, direction?: string, color?: string = 'light_yellow', next_color?: string|
|
||||||
match $direction {
|
match $direction {
|
||||||
'>' => {
|
'>' => {
|
||||||
let r = $'(ansi light_yellow)|'
|
let r = $'(ansi light_yellow)|'
|
||||||
|
@ -137,17 +137,15 @@ def decorator [ ] {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'power' => {
|
'power' => {
|
||||||
{|s, direction?: string, color?: string = 'light_yellow', fg?: string|
|
{|s, direction?: string, color?: string = 'light_yellow', next_color?: string|
|
||||||
match $direction {
|
match $direction {
|
||||||
'>' => {
|
'>' => {
|
||||||
let l = (ansi -e {bg: $fg})
|
let r = $'(ansi -e {fg: $color, bg: $next_color})(char nf_left_segment)'
|
||||||
let r = $'(ansi -e {fg: $fg, bg: $color})(char nf_left_segment)'
|
$'($s)($r)'
|
||||||
$'($l)($s)($r)'
|
|
||||||
}
|
}
|
||||||
'>>' => {
|
'>>' => {
|
||||||
let l = (ansi -e {bg: $fg})
|
let r = $'(ansi reset)(ansi -e {fg: $color})(char nf_left_segment)'
|
||||||
let r = $'(ansi reset)(ansi -e {fg: $fg})(char nf_left_segment)'
|
$'($s)($r)'
|
||||||
$'($l)($s)($r)'
|
|
||||||
}
|
}
|
||||||
'<'|'<<' => {
|
'<'|'<<' => {
|
||||||
let l = $'(ansi -e {fg: $color})(char nf_right_segment)(ansi -e {bg: $color})'
|
let l = $'(ansi -e {fg: $color})(char nf_right_segment)(ansi -e {bg: $color})'
|
||||||
|
@ -171,13 +169,14 @@ def left_prompt [segment] {
|
||||||
| filter {|x| $x.1 != $nothing }
|
| filter {|x| $x.1 != $nothing }
|
||||||
)
|
)
|
||||||
let stop = ($segment | length) - 1
|
let stop = ($segment | length) - 1
|
||||||
let cs = ($segment | each {|x| $x.0 })
|
let cs = ($segment | each {|x| $x.0 } | append $segment.0.0 | range 1..)
|
||||||
let cs = ($cs | prepend $cs.1?)
|
|
||||||
$segment
|
$segment
|
||||||
| zip $cs
|
| zip $cs
|
||||||
| enumerate
|
| enumerate
|
||||||
| each {|x|
|
| each {|x|
|
||||||
if $x.index == $stop {
|
if $x.index == 0 and $env.NU_POWER_DECORATOR == 'power' {
|
||||||
|
$'(ansi -e {bg: $segment.0.0})(do $decorator $x.item.0.1 '>' $x.item.0.0 $x.item.1)'
|
||||||
|
} else if $x.index == $stop {
|
||||||
do $decorator $x.item.0.1 '>>' $x.item.0.0 $x.item.1
|
do $decorator $x.item.0.1 '>>' $x.item.0.0 $x.item.1
|
||||||
} else {
|
} else {
|
||||||
do $decorator $x.item.0.1 '>' $x.item.0.0 $x.item.1
|
do $decorator $x.item.0.1 '>' $x.item.0.0 $x.item.1
|
||||||
|
@ -212,7 +211,7 @@ def right_prompt [segment] {
|
||||||
def decorator_gen [
|
def decorator_gen [
|
||||||
direction?: string
|
direction?: string
|
||||||
color?: string = 'light_yellow'
|
color?: string = 'light_yellow'
|
||||||
fg?: string
|
next_color?: string
|
||||||
] {
|
] {
|
||||||
match $env.NU_POWER_DECORATOR {
|
match $env.NU_POWER_DECORATOR {
|
||||||
'plain' => {
|
'plain' => {
|
||||||
|
@ -233,14 +232,12 @@ def decorator_gen [
|
||||||
'power' => {
|
'power' => {
|
||||||
match $direction {
|
match $direction {
|
||||||
'>' => {
|
'>' => {
|
||||||
let l = (ansi -e {bg: $fg})
|
let r = $'(ansi -e {fg: $color, bg: $next_color})(char nf_left_segment)'
|
||||||
let r = $'(ansi -e {fg: $fg, bg: $color})(char nf_left_segment)'
|
{|s| $'($s)($r)' }
|
||||||
{|s| $'($l)($s)($r)' }
|
|
||||||
}
|
}
|
||||||
'>>' => {
|
'>>' => {
|
||||||
let l = (ansi -e {bg: $fg})
|
let r = $'(ansi reset)(ansi -e {fg: $color})(char nf_left_segment)'
|
||||||
let r = $'(ansi reset)(ansi -e {fg: $fg})(char nf_left_segment)'
|
{|s| $'($s)($r)' }
|
||||||
{|s| $'($l)($s)($r)' }
|
|
||||||
}
|
}
|
||||||
'<'|'<<' => {
|
'<'|'<<' => {
|
||||||
let l = $'(ansi -e {fg: $color})(char nf_right_segment)(ansi -e {bg: $color})'
|
let l = $'(ansi -e {fg: $color})(char nf_right_segment)(ansi -e {bg: $color})'
|
||||||
|
@ -265,13 +262,15 @@ def squash [thunk] {
|
||||||
def left_prompt_gen [segment] {
|
def left_prompt_gen [segment] {
|
||||||
let stop = ($segment | length) - 1
|
let stop = ($segment | length) - 1
|
||||||
let vs = ($segment | each {|x| [$x.color ($env.NU_PROMPT_COMPONENTS | get $x.source)]})
|
let vs = ($segment | each {|x| [$x.color ($env.NU_PROMPT_COMPONENTS | get $x.source)]})
|
||||||
let cs = ($vs | each {|x| $x.0})
|
let cs = ($segment | each {|x| $x.color } | append $segment.0.color | range 1..)
|
||||||
let cs = ($cs | prepend $cs.1?)
|
|
||||||
let thunk = ($vs
|
let thunk = ($vs
|
||||||
| zip $cs
|
| zip $cs
|
||||||
| enumerate
|
| enumerate
|
||||||
| each {|x|
|
| each {|x|
|
||||||
if $x.index == $stop {
|
if $x.index == 0 and $env.NU_POWER_DECORATOR == 'power' {
|
||||||
|
let o = (decorator_gen '>' $x.item.0.0 $x.item.1)
|
||||||
|
[$x.item.0.1 {|x| $'(ansi -e {bg: $segment.0.color})(do $o $x)' }]
|
||||||
|
} else if $x.index == $stop {
|
||||||
[$x.item.0.1 (decorator_gen '>>' $x.item.0.0 $x.item.1)]
|
[$x.item.0.1 (decorator_gen '>>' $x.item.0.0 $x.item.1)]
|
||||||
} else {
|
} else {
|
||||||
[$x.item.0.1 (decorator_gen '>' $x.item.0.0 $x.item.1)]
|
[$x.item.0.1 (decorator_gen '>' $x.item.0.0 $x.item.1)]
|
||||||
|
@ -451,7 +450,7 @@ export-env {
|
||||||
|
|
||||||
let-env NU_POWER_MODE = (default_env
|
let-env NU_POWER_MODE = (default_env
|
||||||
NU_POWER_MODE
|
NU_POWER_MODE
|
||||||
'fast' # power | fast
|
'power' # power | fast
|
||||||
)
|
)
|
||||||
|
|
||||||
let-env NU_POWER_SCHEMA = (default_env
|
let-env NU_POWER_SCHEMA = (default_env
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue