diff options
| author | bitraid <bitraid@protonmail.ch> | 2025-02-08 15:18:05 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-08 22:18:05 +0900 |
| commit | 06c6615507539e3227005844363cb1da39aeb18b (patch) | |
| tree | cb9b1857a32f038f265eff770b77fa7899f16f5c /shell | |
| parent | 818d0be436a9a580561f793424b7780c3584c59c (diff) | |
| download | fzf-06c6615507539e3227005844363cb1da39aeb18b.tar.gz | |
[fish] Fix for directories with special characters (#4230)
Using CTRL-T or ALT-C when the current command line token contained a
directory with special characters, the script would fail to detect it.
For exampe, an existing directory named `it\'s\ a\ test`, instead of
using it as walker-root, it would use it as the query.
Diffstat (limited to 'shell')
| -rw-r--r-- | shell/key-bindings.fish | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/shell/key-bindings.fish b/shell/key-bindings.fish index c66a2aa2..9d173d48 100644 --- a/shell/key-bindings.fish +++ b/shell/key-bindings.fish @@ -171,18 +171,20 @@ function fzf_key_bindings # if $dir is "." but commandline is not a relative path, this means no file path found set fzf_query $commandline else + # Special characters must be double escaped. + set -l re_dir (string escape -n -- $dir) # Also remove trailing slash after dir, to "split" input properly - set fzf_query (string replace -r -- "^$dir/?" '' $commandline) + set fzf_query (string replace -r -- "^$re_dir/?" '' $commandline) end end - echo (string escape -- $dir) - echo (string escape -- $fzf_query) - echo $prefix + echo -- $dir + string escape -- $fzf_query + echo -- $prefix end function __fzf_get_dir -d 'Find the longest existing filepath from input string' - set dir $argv + set dir (string unescape -n -- $argv) # Strip trailing slash, unless $dir is root dir (/) set dir (string replace -r -- '(?<!^)/$' '' $dir) @@ -194,7 +196,7 @@ function fzf_key_bindings set dir (dirname -- "$dir") end - echo $dir + string escape -n -- $dir end end |
