mirror of
https://github.com/RGBCube/nu_scripts
synced 2025-08-01 22:57:46 +00:00
Clean up str append/prepend a little (#797)
- Move to directory for other `str` contributions - Add simple `help` docs - Simplify type check since only 2 cases are possible @savente93 Are these okay?
This commit is contained in:
parent
7d662ad5c5
commit
707cda3450
7 changed files with 61 additions and 38 deletions
|
@ -1,6 +1,6 @@
|
||||||
# modules
|
# modules
|
||||||
export module record/
|
export module record/
|
||||||
export module str.nu
|
export module str/
|
||||||
# commands
|
# commands
|
||||||
export use fs.nu *
|
export use fs.nu *
|
||||||
export use set-env.nu *
|
export use set-env.nu *
|
||||||
|
|
|
@ -13,25 +13,25 @@
|
||||||
# Add a config hook
|
# Add a config hook
|
||||||
# > set-env -a config.hooks.pre_prompt 'ellie | print'
|
# > set-env -a config.hooks.pre_prompt 'ellie | print'
|
||||||
export def --env main [
|
export def --env main [
|
||||||
field: cell-path # The environment variable name or nested option cell path
|
field: cell-path # The environment variable name or nested option cell path
|
||||||
value: any # The value to set or append
|
value: any # The value to set or append
|
||||||
--append (-a) # Append to the previous value or wrap in a new list
|
--append (-a) # Append to the previous value or wrap in a new list
|
||||||
]: nothing -> nothing {
|
]: nothing -> nothing {
|
||||||
def 'get or' [default field] {
|
def 'get or' [default field] {
|
||||||
get --ignore-errors $field | default $default
|
get --ignore-errors $field | default $default
|
||||||
}
|
|
||||||
let value = if $append {
|
|
||||||
$env | get or [] $field | append $value
|
|
||||||
} else {
|
|
||||||
$value
|
|
||||||
}
|
|
||||||
let field = $field | to text | split row .
|
|
||||||
let value = match $field {
|
|
||||||
[_] => $value
|
|
||||||
[$root, ..$field] => {
|
|
||||||
let field = $field | into cell-path
|
|
||||||
$env | get or {} $root | upsert $field $value
|
|
||||||
}
|
}
|
||||||
}
|
let value = if $append {
|
||||||
load-env { ($field | first): $value }
|
$env | get or [] $field | append $value
|
||||||
|
} else {
|
||||||
|
$value
|
||||||
|
}
|
||||||
|
let field = $field | to text | split row .
|
||||||
|
let value = match $field {
|
||||||
|
[_] => $value
|
||||||
|
[$root, ..$field] => {
|
||||||
|
let field = $field | into cell-path
|
||||||
|
$env | get or {} $root | upsert $field $value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
load-env { ($field | first): $value }
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
export def append [tail: string]: [string -> string, list<string> -> list<string>] {
|
|
||||||
let input = $in
|
|
||||||
match ($input | describe | str replace --regex '<.*' '') {
|
|
||||||
"string" => { $input ++ $tail },
|
|
||||||
"list" => { $input | each {|el| $el ++ $tail} },
|
|
||||||
_ => $input
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export def prepend [head: string]: [string -> string, list<string> -> list<string>] {
|
|
||||||
let input = $in
|
|
||||||
match ($input | describe | str replace --regex '<.*' '') {
|
|
||||||
"string" => { $head ++ $input },
|
|
||||||
"list" => { $input | each {|el| $head ++ $el } },
|
|
||||||
_ => $input
|
|
||||||
}
|
|
||||||
}
|
|
1
stdlib-candidate/std-rfc/str/mod.nu
Normal file
1
stdlib-candidate/std-rfc/str/mod.nu
Normal file
|
@ -0,0 +1 @@
|
||||||
|
export use xpend.nu *
|
39
stdlib-candidate/std-rfc/str/xpend.nu
Normal file
39
stdlib-candidate/std-rfc/str/xpend.nu
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
# Append a suffix to an input string or list of strings.
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
# Output 'hello world'
|
||||||
|
# > 'hello' | str append ' world'
|
||||||
|
#
|
||||||
|
# Output file names suffixed with '_world'
|
||||||
|
# > ls | get name | str append _world
|
||||||
|
export def append [
|
||||||
|
suffix: string
|
||||||
|
]: [string -> string, list<string> -> list<string>] {
|
||||||
|
let input = $in
|
||||||
|
let append = { $in + $suffix }
|
||||||
|
if ($input | describe) == string {
|
||||||
|
$input | do $append
|
||||||
|
} else {
|
||||||
|
$input | each $append
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Prepend a prefix to an input string or list of strings.
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
# Output 'hello world'
|
||||||
|
# > 'world' | str prepend 'hello '
|
||||||
|
#
|
||||||
|
# Output file names prefixed with 'hello_'
|
||||||
|
# > ls | get name | str prepend hello_
|
||||||
|
export def prepend [
|
||||||
|
prefix: string
|
||||||
|
]: [string -> string, list<string> -> list<string>] {
|
||||||
|
let input = $in
|
||||||
|
let prepend = { $prefix + $in }
|
||||||
|
if ($input | describe) == string {
|
||||||
|
$input | do $prepend
|
||||||
|
} else {
|
||||||
|
$input | each $prepend
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,3 @@
|
||||||
export module fs.nu
|
export module fs.nu
|
||||||
export module record.nu
|
export module record.nu
|
||||||
export module str.nu
|
export module str_xpend.nu
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue