Skip to content

Commit f6207d2

Browse files
committed
chore(nushell): more smart completer
1 parent c48c60c commit f6207d2

2 files changed

Lines changed: 40 additions & 19 deletions

File tree

‎modules/home-manager/nushell/default.nix‎

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,25 +35,6 @@ in {
3535
algorithm = "fuzzy";
3636
external.enable = true;
3737
external.max_results = 100;
38-
external.completer = lib.nushell.mkNushellFnInline ({ spans }: # nu
39-
''
40-
let expanded_alias = scope aliases
41-
| where name == ${spans}.0
42-
| get -o 0.expansion
43-
44-
let spans = if $expanded_alias != null {
45-
${spans}
46-
| skip 1
47-
| prepend ($expanded_alias | split row ' ' | take 1)
48-
} else {
49-
${spans}
50-
}
51-
52-
match $spans.0 {
53-
devenv => $_argc_completer
54-
_ => $_carapace_completer
55-
} | do $in $spans
56-
'');
5738
};
5839
cursor_shape = {
5940
vi_insert = "line";

‎modules/home-manager/nushell/defs/completer.nu‎

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,43 @@ let _argc_completer = {|args: list<string>|
1010
| each { |line| $line | split column "\t" value description }
1111
| flatten
1212
}
13+
14+
let _fish_completer = {|spans|
15+
fish --command $"complete '--do-complete=($spans | str replace --all "'" "\\'" | str join ' ')'"
16+
| from tsv --flexible --noheaders --no-infer
17+
| rename value description
18+
| update value {|row|
19+
let value = $row.value
20+
let need_quote = ['\' ',' '[' ']' '(' ')' ' ' '\t' "'" '"' "`"] | any {$in in $value}
21+
if ($need_quote and ($value | path exists)) {
22+
let expanded_path = if ($value starts-with ~) {$value | path expand --no-symlink} else {$value}
23+
$'"($expanded_path | str replace --all "\"" "\\\"")"'
24+
} else {$value}
25+
}
26+
}
27+
28+
$env.config.completions.external.completer = ({|spans|
29+
let expanded_alias = scope aliases
30+
| where name == $spans.0
31+
| get -o 0.expansion
32+
33+
let spans = if $expanded_alias != null {
34+
$spans
35+
| skip 1
36+
| prepend ($expanded_alias | split row ' ' | take 1)
37+
} else {
38+
$spans
39+
}
40+
let sudos = ["doas" "sudo" "please"]
41+
let use_fish = [ "zfs" "zpool" ]
42+
let use_argc = [ "devenv" ]
43+
if ($spans.0 in $sudos) and ($spans.1? in $use_fish) {
44+
$_fish_completer
45+
} else if ($spans.0 in $sudos) and ($spans.1? in $use_argc) {
46+
$_argc_completer
47+
} else if ($spans.0 in $use_fish) {
48+
$_fish_completer
49+
} else if ($spans.0 in $use_argc) {
50+
$_argc_completer
51+
} else $_carapace_completer | do $in $spans
52+
})

0 commit comments

Comments
 (0)